一: 开启 IP 转发功能
修改 /etc/sysctl.conf 添加 net.ipv4.ip_forward=1 然后运行 sysctl -p
二: 必要的前提工作, 使能 iptables 的各项功能
iptables -t nat -F
iptables -t nat -X
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -P FORWARD ACCEPT
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -F
iptables -X
iptables -P FORWARD ACCEPT
iptables -P INPUT ACCEPT
三: 常用的功能:
1:IP 转发功能
将来源为 104.251.226.66 访问 45.124.64.183 的 3389 端口转发到 163.172.26.39:3389 端口。(45.124.64.183 是本地网卡分配的地址)
iptables -t nat -A PREROUTING -s 104.251.226.66 -d 45.124.64.183 -p tcp --dport 3389 -j DNAT --to-destination 163.172.26.39:3389
将 163.172.26.39:3389 端口将数据返回给客户端时,将源 ip 改为 45.124.64.183
iptables -t nat -A POSTROUTING -d 163.172.26.39 -p tcp --dport 3389 -j SNAT --to 45.124.64.183
解释: PREROUTING 为入网卡时的规则 POSTROUTING 为出网卡时的规则
- s 参数为指定源端 - d 为目标 DNAT 是将目标重定位到 XXXX SNAT 则表示把源修改为 XXX
上面 iptables -t nat -A PREROUTING -s 104.251.226.66 -d 45.124.64.183 -p tcp –dport 3389 -j DNAT –to-destination 163.172.26.39:3389 这条指令生效后, 当 104.251.226.66 来访问 45.124.64.183 的 3389 端口的时候, 会被重新转发到 163.172.26.39:3389 上面去(此时访问源的 IP 未被改变, 依然是 104.251.226.66).
此时,163.172.26.39 收到的数据源依然认为是 104.251.226.66, 此时数据返回也是直接返回到 104.251.226.66, 而源端肯定会丢弃此数据包(因为源端明明是与 45.124.64.183 进行交互的)
所以我们需要再加条规则 iptables -t nat -A POSTROUTING -d 163.172.26.39 -p tcp –dport 3389 -j SNAT –to 45.124.64.183 到 163.172.26.39 的源地址改为 NAT 主机的 IP, 这样真实服务器才会认为是 NAT 主机发送的请求, 返回数据也向 NAT 主机进行发送.NAT 服务器在收到数据时也会根据对照表将数据返回给访客端