iptables 是 Linux 系统中用于配置内核防火墙的一个命令行工具。它允许系统管理员定义规则,以决定如何处理经过网络接口的数据包。iptables 可以用来进行网络地址转换(NAT),包括源地址转换(SNAT)和目的地址转换(DNAT)。
以下是使用 iptables 进行 IP 地址转换的基本步骤:
在 Linux 系统中,默认情况下 IP 转发是关闭的。你需要启用它才能进行 NAT。编辑 /etc/sysctl.conf 文件,找到以下行:
net.ipv4.ip_forward=1
如果没有这一行,添加它。然后运行以下命令使更改生效:
sysctl -p
SNAT 用于修改数据包的源 IP 地址。例如,如果你想让所有从你的局域网发出的数据包看起来像是来自同一个公网 IP 地址,你可以这样做:
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 203.0.113.5
这里 -t nat 表示操作的是 nat 表,-A POSTROUTING 表示在路由决策之后应用规则,-s 192.168.1.0/24 表示源地址是 192.168.1.0 到 192.168.1.255 的网络,-o eth0 表示数据包是通过 eth0 接口出去的,--to-source 203.0.113.5 表示将源 IP 地址改为 203.0.113.5。
DNAT 用于修改数据包的目的 IP 地址。例如,如果你想让到达你的服务器的特定公网 IP 地址和端口的流量被转发到内网的一台机器上,你可以这样做:
iptables -t nat -A PREROUTING -d 203.0.113.5 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.10:80
这里 -A PREROUTING 表示在路由决策之前应用规则,-d 203.0.113.5 表示目的地址是 203.0.113.5,-p tcp --dport 80 表示协议是 TCP 并且目的端口是 80,--to-destination 192.168.1.10:80 表示将目的地址和端口改为内网的 192.168.1.10 上的 80 端口。
在某些 Linux 发行版中,iptables 规则在重启后不会自动保存。你可以使用 iptables-save 和 iptables-restore 命令来手动保存和恢复规则,或者安装一个额外的工具,如 iptables-persistent。
例如,在基于 Debian 的系统上,你可以使用以下命令保存规则:
iptables-save > /etc/iptables/rules.v4
在基于 Red Hat 的系统上,你可以使用以下命令:
service iptables save
或者
iptables-save > /etc/sysconfig/iptables
请注意,具体的命令可能会根据你的 Linux 发行版和配置有所不同。始终确保你了解每个命令的作用,并在生产环境中谨慎操作。