Linux 端口映射配置指南:使用 iptables 实现网络地址转换
在 Linux 系统中,端口映射(端口转发)是实现不同网络间通信的重要手段,通常用于将外部网络的请求转发到内部网络的特定服务。以下是基于 iptables 的端口映射配置详解,包括临时配置和永久生效方案。
基础配置:启用数据包转发
端口映射依赖内核的 IP 转发功能,需先开启:
临时启用 IP 转发(立即生效,重启失效)
1 2 3 4 5
| echo 1 > /proc/sys/net/ipv4/ip_forward
cat /proc/sys/net/ipv4/ip_forward
|
配置 iptables 转发规则
1 2 3 4 5 6 7 8 9 10
| iptables -t nat -A POSTROUTING -j MASQUERADE
iptables -A FORWARD -i [内网网卡名称] -j ACCEPT
iptables -t nat -A POSTROUTING -s [内网网段] -o [外网网卡名称] -j MASQUERADE
|
示例(假设内网网卡为 ens33,外网网卡为 ens37,内网网段为 192.168.50.0/24):
1 2 3
| iptables -t nat -A POSTROUTING -j MASQUERADE iptables -A FORWARD -i ens33 -j ACCEPT iptables -t nat -A POSTROUTING -s 192.168.50.0/24 -o ens37 -j MASQUERADE
|
核心配置:设置端口映射规则
使用 iptables 的 DNAT(目的地址转换)实现端口映射,将外部请求转发到内部服务。
基本语法
1 2 3 4 5
| iptables -t nat -A PREROUTING -p tcp -m tcp --dport [外网端口] -j DNAT --to-destination [内网地址]:[内网端口]
iptables -t nat -A PREROUTING -p udp -m udp --dport [外网端口] -j DNAT --to-destination [内网地址]:[内网端口]
|
示例
1 2 3 4 5
| iptables -t nat -A PREROUTING -p tcp -m tcp --dport 6080 -j DNAT --to-destination 10.0.0.100:6090
iptables -t nat -A PREROUTING -p udp -m udp --dport 53 -j DNAT --to-destination 192.168.1.10:53
|
配置永久生效
以上配置在系统重启后会失效,需通过以下方式持久化:
方法 1:保存规则到文件(推荐)
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
yum install iptables-services -y
apt install iptables-persistent -y
service iptables save
netfilter-persistent save
iptables-save
|
方法 2:添加到启动脚本(兼容旧系统)
将配置命令追加到 /etc/rc.local(需确保文件有执行权限):
1 2 3 4 5 6 7 8 9 10 11 12
| vi /etc/rc.local
echo 1 > /proc/sys/net/ipv4/ip_forward iptables -t nat -A POSTROUTING -j MASQUERADE iptables -A FORWARD -i ens33 -j ACCEPT iptables -t nat -A POSTROUTING -s 192.168.50.0/24 -o ens37 -j MASQUERADE iptables -t nat -A PREROUTING -p tcp --dport 6080 -j DNAT --to-destination 10.0.0.100:6090
chmod +x /etc/rc.local
|
管理与验证规则
1. 查看已配置的规则
1 2 3 4 5
| iptables -t nat -L --line-numbers
iptables -L -n
|
2. 删除规则
1 2
| iptables -t nat -D PREROUTING 1
|
3. 验证端口映射是否生效
1 2 3 4 5
| telnet [外网IP] [外网端口]
curl http://[外网IP]:[外网端口]
|
注意事项
- 防火墙冲突:确保防火墙(如 firewalld、ufw)未阻止转发的端口,必要时关闭或添加对应规则。
- 网络接口名称:通过
ip addr 或 ifconfig 确认内网 / 外网网卡名称,避免配置错误。
- 动态 IP 环境:若外网 IP 动态变化,使用
MASQUERADE 而非 SNAT(固定 IP 用 SNAT 更高效)。
- 安全性:限制转发规则的源 IP 范围(如
-s 192.168.0.0/24),避免开放不必要的访问。
linux下端口映射
1. 允许数据包转发
1 2 3
| echo 1 >/proc/sys/net/ipv4/ip_forwardiptables -t nat -A POSTROUTING -j MASQUERADEiptables -A FORWARD -i [内网网卡名称] -j ACCEPTiptables -t nat -A POSTROUTING -s [内网网段] -o [外网网卡名称] -j MASQUERADE # 例: echo 1 >/proc/sys/net/ipv4/ip_forwardiptables -t nat -A POSTROUTING -j MASQUERADEiptables -A FORWARD -i ens33 -j ACCEPTiptables -t nat -A POSTROUTING -s 192.168.50.0/24 -o ens37 -j MASQUERADE
|
2. 设置端口映射
1 2 3
| iptables -t nat -A PREROUTING -p tcp -m tcp --dport [外网端口] -j DNAT --to-destination [内网地址]:[内网端口] # 例: iptables -t nat -A PREROUTING -p tcp -m tcp --dport 6080 -j DNAT --to-destination 10.0.0.100:6090
|
如果需要永久配置,则将以上命令追加到/etc/rc.local文件