使用iptables创建动态NAT转发规则开放内网服务

如果局域网中有多台服务器提供服务,但是只有一个公网IP地址,这时使用iptables可以创建动态Nat转发规则,在拥有公网IP地址的机器上提供服务。例如我在阿里云购买了4台云主机,属于同一个子网,内网可以互通。其中一台主机拥有一个公网IP可以访问,另外三台主机创建了一个MongoDB Cluster分片集群。如果需要在外网访问MongoDB集群服务的话,就需要在拥有公网IP的主机上创建Nat规则,将外网来的访问转发到内网主机上。


以下是一个公网IP的Nat转发拓扑图:
Nat for MongoDB Sharding

我们在公网IP为101.89.90.123的主机上创建以下3条Nat转发规则:

  • 将端口100转发到内网IP为10.10.93.100的27016端口上
  • 将端口101转发到内网IP为10.10.93.101的27016端口上
  • 将端口102转发到内网IP为10.10.93.102的27016端口上

对应的iptables规则为:

iptables -t nat -A PREROUTING -p tcp --dport 100 -j DNAT --to-destination 10.10.93.100:27016
iptables -t nat -A PREROUTING -p tcp --dport 101 -j DNAT --to-destination 10.10.93.101:27016
iptables -t nat -A PREROUTING -p tcp --dport 102 -j DNAT --to-destination 10.10.93.102:27016

以上是转发规则,但是这还不够。除了转发以外,还需要将转发后数据包的原地址转换为本机地址(当数据包返回时,会自动转换为源地址)。需要添加一下Nat规则:

iptables -t nat -A POSTROUTING -j MASQUERADE
Captain QR Code

扫码联系船长

发表评论

邮箱地址不会被公开。 必填项已用*标注