在Linux系统中,IP映射是一个常见需求,主要涉及静态IP地址配置、端口转发(NAT)以及本地域名解析映射,本文将详细介绍这三种常见IP映射的配置方法,包括操作步骤、命令示例及注意事项,帮助用户在不同场景下实现IP映射需求。
静态IP地址映射(网络接口配置)
静态IP映射是指为Linux服务器的网络接口(如eth0、ens33)分配固定的IP地址、子网掩码、网关和DNS服务器,确保服务器IP地址不会因DHCP租约到期而改变,这种映射方式适用于需要长期固定IP的服务器环境,如Web服务器、数据库服务器等。
基于配置文件的静态IP配置
不同Linux发行版的配置文件路径和格式略有差异,以下以CentOS/RHEL(使用NetworkManager)和Ubuntu/Debian(使用netplan)为例说明。
(1)CentOS/RHEL系统(NetworkManager)
-
步骤1:查看网络接口名称
执行命令ip addr
或nmcli connection show
,获取当前活动的网络接口名称(如eth0、ens33)。 -
步骤2:编辑网络配置文件
进入/etc/sysconfig/network-scripts/
目录,复制对应接口的配置文件(如ifcfg-eth0)并备份,然后编辑:cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth0.bak vi /etc/sysconfig/network-scripts/ifcfg-eth0
配置文件内容示例如下:
TYPE=Ethernet BOOTPROTO=static # 静态IP,禁用DHCP NAME=eth0 DEVICE=eth0 ONBOOT=yes # 开机启动网络 IPADDR=192.168.1.100 # 目标静态IP NETMASK=255.255.255.0 # 子网掩码 GATEWAY=192.168.1.1 # 网关地址 DNS1=8.8.8.8 # DNS服务器 DNS2=114.114.114.114
-
步骤3:重启网络服务
执行命令nmcli connection down eth0 && nmcli connection up eth0
或systemctl restart network
,使配置生效。
(2)Ubuntu/Debian系统(netplan)
-
步骤1:查看网络接口名称
执行ip addr
获取接口名称(如ens33)。 -
步骤2:编辑netplan配置文件
进入/etc/netplan/
目录,找到配置文件(如01-netcfg.yaml),编辑内容:network: version: 2 ethernets: ens33: dhcp4: no # 禁用DHCP addresses: [192.168.1.100/24] # IP地址/子网掩码(24位掩码即255.255.255.0) gateway4: 192.168.1.1 # 网关 nameservers: addresses: [8.8.8.8, 114.114.114.114] # DNS服务器
-
步骤3:应用配置
执行netplan apply
命令使配置生效,若提示错误可通过netplan --debug apply
排查。
静态IP配置对比(表格)
发行版 | 配置文件路径 | 重启网络命令 | 关键参数说明 |
---|---|---|---|
CentOS/RHEL | /etc/sysconfig/network-scripts/ifcfg-网卡名 | systemctl restart network |
BOOTPROTO=static, IPADDR, NETMASK, GATEWAY |
Ubuntu/Debian | /etc/netplan/xxx.yaml | netplan apply |
dhcp4: no, addresses, gateway4, nameservers |
端口映射(NAT转发)
端口映射是将网络数据包的目标端口或源地址进行转换,常用于内网服务器通过公网IP访问、端口转发等场景,Linux中主要通过iptables(传统防火墙)或firewalld(CentOS 7+)实现。
基于iptables的端口映射
iptables是Linux内核集成的防火墙工具,支持SNAT(源地址转换)和DNAT(目标地址转换)。
-
(1)DNAT(目标地址转换):将公网端口映射到内网服务器
示例:将本机(公网IP 1.1.1.1)的80端口映射到内网服务器192.168.1.200的8080端口。# 开启内核转发功能 echo 1 > /proc/sys/net/ipv4/ip_forward # 添加DNAT规则(PREROUTING链) iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.200:8080 # 添加MASQUERADE规则(POSTROUTING链,使响应数据包能正确返回) iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE
-
(2)SNAT(源地址转换):内网通过公网IP访问外网
示例:内网网段192.168.1.0/24通过本机公网IP1.1.1.1访问外网。iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 1.1.1.1
-
(3)保存iptables规则
CentOS系统:service iptables save
Ubuntu系统:iptables-save > /etc/iptables/rules.v4
基于firewalld的端口映射(CentOS 7+)
firewalld是CentOS 7及以上版本默认的防火墙工具,支持富规则(Rich Rules)实现端口映射。
-
步骤1:启用防火墙和NAT
systemctl start firewalld firewall-cmd --permanent --add-masquerade # 开启IP伪装(相当于MASQUERADE) firewall-cmd --reload
-
步骤2:添加端口映射规则
示例:将本机80端口映射到内网192.168.1.200的8080端口。firewall-cmd --permanent --add-rich-rule='rule family=ipv4 forward-port port=80 protocol=tcp to-port=8080 to-addr=192.168.1.200' firewall-cmd --reload
iptables命令参数说明(表格)
参数/链 | 作用说明 | 示例 |
---|---|---|
-t nat |
指定nat表,用于地址转换 | iptables -t nat -A PREROUTING... |
-A |
添加规则到链的末尾 | iptables -A INPUT... |
-p tcp/udp |
指定协议(tcp/udp) | iptables -p tcp --dport 80 |
--dport |
目标端口 | --dport 80 |
--to-destination |
DNAT的目标IP和端口(DNAT专用) | --to-destination 192.168.1.200:8080 |
MASQUERADE |
动态源地址转换(适用于动态公网IP) | -j MASQUERADE |
本地域名解析映射(hosts文件)
hosts文件是本地域名与IP地址的映射表,优先级高于DNS服务器,适用于本地测试或特定域名的快速解析。
编辑hosts文件
hosts文件路径为/etc/hosts
,格式为“IP地址 域名 [别名]”。
vi /etc/hosts
0.0.1 localhost
192.168.1.100 testserver # 将testserver映射到192.168.1.100
192.168.1.200 dbserver.local # 带别名的映射
生效与验证
- 保存文件后立即生效(无需重启服务)。
- 验证命令:
ping testserver
或nslookup testserver
,若返回目标IP则配置成功。
注意事项
- hosts文件仅对当前主机生效,局域网其他设备需修改各自的hosts文件。
- 若需长期生效,避免在DNS服务器中配置相同域名,防止冲突。
相关问答FAQs
Q1:如何验证静态IP配置是否生效?
A:可通过以下方式验证:
- 执行
ip addr show 网卡名
,检查IP地址、子网掩码是否与配置一致; - 执行
ping 网关地址
(如ping 192.168.1.1
),验证网络连通性; - 执行
nslookup 域名
或ping 域名
,检查DNS解析是否正常; - 若无法上网,检查
/etc/resolv.conf
中的DNS配置是否正确,或使用systemctl status network
(CentOS)查看网络服务状态。
Q2:修改hosts文件后无法解析域名,如何排查?
A:可按以下步骤排查:
- 检查hosts文件格式:确保每行格式为“IP 域名”,IP和域名之间用空格或Tab分隔,避免多余字符;
- 检查IP地址有效性:确保目标IP地址正确,且主机可达(可通过
ping IP
测试); - 清除DNS缓存:执行
sudo systemctl flush-dns
(需systemd-resolved支持)或重启nscd
服务(sudo systemctl restart nscd
); - 检查DNS优先级:若系统配置了DNS服务器,hosts文件的优先级更高,可尝试
ping -f 域名
强制使用hosts解析,或临时注释掉DNS配置测试。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/35911.html