情形一:跨網絡、跨主機的映射Full-Nat
我們想到達主機B的80端口,但是由於網絡限制可能無法直接完成。但是我們可以到達主機A的8080端口,而主機A可以直接到達B的80端口。
這時候可以使用iptables,將主機B的80端口映射到主機A的8080端口,通過訪問A的8080相當於訪問B的80。實現如下:
在主機A上直接如下命令,實現端口映射的Full-Nat
#!/bin/bash pro='tcp' NAT_Host='Host_A' NAT_Port=8080 Dst_Host='Host_B' Dst_Port=80 iptables -t nat -A PREROUTING -m $pro -p $pro --dport $NAT_Port -j DNAT --to-destination $Dst_Host:$Dst_Port iptables -t nat -A POSTROUTING -m $pro -p $pro --dport $Dst_Port -d $Dst_Host -j SNAT --to-source $NAT_Host
說明:
- NAT_Pro表示NAT的協議,可以是tcp或udp
- NAT_Host表示中間做端口映射的主機。這里也就是主機A
- NAT_Port表示中間做端口映射的端口。這里也就是主機A的8080口
- Dst_Host表示被NAT的主機。這里也就是主機B
- Dst_Host表示被NAT的端口。這里也就是主機B的80口
情形二:主機內部的端口重定向
我們可能需要將訪問主機的7979端口映射到8080端口。也可以iptables重定向完成
iptables -t nat -A PREROUTING -p tcp --dport 7979 -j REDIRECT --to-ports 8080
注意問題
需要打開ip_forward功能。
echo '1' > /proc/sys/net/ipv4/ip_forward