在 Ubuntu 系统中,使用 iptables 添加端口转发(也称为端口映射)可以通过设置 NAT(网络地址转换)规则来实现。以下是详细的步骤和示例,帮助你在 Ubuntu 上配置端口转发。
具有管理员权限:执行 iptables 命令需要超级用户权限,因此建议使用 sudo。
已安装 iptables:大多数 Ubuntu 版本默认已安装 iptables。如果未安装,可以使用以下命令安装:
sudo apt update
sudo apt install iptables
假设你有一台运行 Ubuntu 的服务器,具有公网 IP 地址 203.0.113.5,你想将外部访问 203.0.113.5:8080 的流量转发到内网 IP 192.168.1.100:80。
首先,确保内核允许 IP 转发。编辑 /etc/sysctl.conf 文件:
sudo nano /etc/sysctl.conf
找到并取消注释(或添加)以下行:
net.ipv4.ip_forward=1
保存文件后,应用更改:
sudo sysctl -p
使用以下命令添加 DNAT 和 SNAT 规则:
sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.100:80
sudo iptables -t nat -A POSTROUTING -p tcp -d 192.168.1.100 --dport 80 -j MASQUERADE
解释:
PREROUTING 规则:
-t nat:指定使用 nat 表。-A PREROUTING:在 PREROUTING 链添加规则。-p tcp --dport 8080:匹配目标端口为 8080 的 TCP 流量。-j DNAT --to-destination 192.168.1.100:80:将流量目标地址修改为 192.168.1.100:80。POSTROUTING 规则:
-t nat:指定使用 nat 表。-A POSTROUTING:在 POSTROUTING 链添加规则。-p tcp -d 192.168.1.100 --dport 80:匹配目标地址为 192.168.1.100 且目标端口为 80 的 TCP 流量。-j MASQUERADE:进行源地址伪装,使返回流量能够正确路由回客户端。iptables 规则在重启后会丢失,因此需要保存规则。Ubuntu 使用 iptables-persistent 来持久化规则。
安装 iptables-persistent:
sudo apt install iptables-persistent
在安装过程中,系统会提示是否保存当前规则,选择“是”。
手动保存规则(如果已安装):
sudo netfilter-persistent save
sudo netfilter-persistent reload
使用以下命令查看当前的 iptables 规则,确保规则已正确添加:
sudo iptables -t nat -L -n -v
你应该能看到类似以下的输出,表示端口转发规则已生效:
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 DNAT tcp -- * * 0.0.0.0/0 203.0.113.5 tcp dpt:8080 to:192.168.1.100:80
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 MASQUERADE all -- * * 192.168.1.0/24 0.0.0.0/0
如果需要删除之前添加的端口转发规则,可以使用以下命令:
sudo iptables -t nat -D PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.100:80
sudo iptables -t nat -D POSTROUTING -p tcp -d 192.168.1.100 --dport 80 -j MASQUERADE
如果你的系统使用 ufw 作为防火墙管理工具,可以通过以下步骤添加端口转发:
启用 IP 转发(同上)。
添加端口转发规则:
sudo ufw route add 8080/tcp to 192.168.1.100:80
重新加载 ufw 规则:
sudo ufw reload
验证规则:
sudo ufw status numbered
注意:ufw 的端口转发功能在某些版本中可能需要额外的配置或插件支持,具体请参考 ufw 的官方文档。
通过以上步骤,你可以在 Ubuntu 系统中使用 iptables 或 ufw 成功设置端口转发。确保在进行配置前备份现有规则,并在生产环境中谨慎操作,以避免不必要的网络中断。