本地借由公网机跳板到私网机

iptables设置规则

Iptables 指南 1.1.19
Iptables详解
iptables/netfilter全攻略详解

iptables默认三张表:
1、filter:防火墙,包含INPUT、OUTPUT、FORWARD
2、nat:网络地转转换,包含PREROUTING、POSTROUTING、OUTPUT
3、mangle:流量整形,包含所有的五条链

iptables的五条链 ->写规则的地方
1、INPUT:数据包的目地的是LINUX主机本身
2、OUTPUT:数据包由LINUX主机本身发送
3、FORWARD:数据包从一个接口进入,另一个接口发出(如果做路由转发的话必须开启/etc/sysctl.conf 修改net.ipv4.ip_forward=1)
4、PREROUTING:做路由之前
5、POSTROUTING:做路由之后

背景

A本地机
B公网机(跳板机):公网116.56.140.66,私网172.16.1.100
C私网机:172.16.1.56
A发送116.56.140.66:5000,B将其转发到C私网机172.16.1.56:5000

转发规则设置

1、打开内核转发文件,允许转发
echo "1" > /proc/sys/net/ipv4/ip_forward
2、将访问116.56.140.66:5000的数据包目的地址改为172.16.1.56:5000,但注意不要指定-d 116.56.140.66,因为公网机接收的数据包可能也是被某个路由转发过来的,原先发送到116.56.140.66:5000的数据包目的地址被该路由改变过了,即公网机接收的数据包的目的地址不是116.56.140.66
sudo iptables -t nat -I PREROUTING -p tcp --dport 5000 -j DNAT --to-destination 172.16.1.56:5000
3、允许转发目的地址为172.16.1.56:5000的数据包
sudo iptables -t filter -I FORWARD -p tcp -d 172.16.1.56 --dport 5000 -j ACCEPT
4、将访问172.16.1.56:5000的数据包源地址改为172.16.1.100(不要改为公网116.56.140.66)
sudo iptables -t nat -I POSTROUTING -p tcp -d 172.16.1.56 --dport 5000 -j SNAT --to 172.16.1.100

显示 Gitment 评论