路由与映射

iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -F

端口映射

需要将外网访问本地 IP(192.168.75.5)的 80 端口转换为访问 192.168.75.3 的 8000 端口,这就需要用到 iptables 的端口映射,首先需要开启 Linux 的数据转发功能:

# vi /etc/sysctl.conf,将net.ipv4.ip_forward=0更改为net.ipv4.ip_forward=1
# sysctl -p //使数据转发功能生效

然后更改 iptables,使之实现 nat 映射功能:

# 将外网访问 192.168.75.5 的 80 端口转发到 192.168.75.3:8000 端口。
$ iptables -t nat -A PREROUTING -d 192.168.75.5 -p tcp --dport 80 -j DNAT --to-destination 192.168.75.3:8000
# 将 192.168.75.3 8000 端口将数据返回给客户端时,将源 ip 改为 192.168.75.5
$ iptables -t nat -A POSTROUTING -d 192.168.75.3 -p tcp --dport 8000 -j SNAT 192.168.75.5

查看 nat,可以使用命令:iptables -t nat –list 检查 nat 列表信息,结果如下图所示

iptables

# 将外网访问 80 端口的数据转发到 8080 端口
$ iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
# 将本机访问 80 端口的转发到本机 8080
$ iptables -t nat -A OUTPUT -p tcp -d 127.0.0.1 --dport 80 -j DNAT --to 127.0.0.1:8080
$ iptables -t nat -A OUTPUT -p tcp -d 192.168.4.177 --dport 80 -j DNAT --to 127.0.0.1:8080

本地连接指的是在本机上,用 127.0.0.1 或者本机 IP 来访问本机的端口。本地连接的数据包不会通过网卡,而是由内核处理后直接发给本地进程。这种数据包在 iptables 中只经过 OUTPUT 链,而不会经过 PREROUTING 链。所以需要在 OUTPUT 链中进行 DNAT。除了对 127.0.0.1 之外,对本机 IP (即 192.168.4.177) 的访问也属于本地连接。