云上的天涯

导航

双网卡Iptables端口转发

当前场景如下

跳板机A是双网卡,有一个内网IP和一个公网IP

内网IP: 10.0.10.30

外网IP:  58.68.255.123

内网机器:10.0.30.88,可以和10.0.10.30通讯

另外有一台内网机器需要通过公网去连接ssh,由于这台内网设备没有公网IP所以需要跳板机通过Iptables做端口转发

刚开始用的Iptbales做端口映射命令如下

iptables -t nat -A PREROUTING -p tcp -d 58.68.255.123 --dport 31688 -j DNAT --to-destination 10.0.30.88:22

iptables -t nat -A POSTROUTING -p tcp -d 10.0.30.88 --dport 22 -j SNAT --to-source 58.68.255.123

发现无法通过58.68.255.123:31688去ssh连接这台机器,试了好几次都是如此,开始想是不是因为双网卡原因

查看路由表后发现58.68.255.123并没有到内网10.0.10.0的路由,大概就是这个原因了,iptables把请求转发到内网10.0.30.88后,10.0.30.88跨网段了无法把包通过58.68.255.123转发回客户端就是连接这台机器的ssh客户端,因为30.88无法回原,必须通过10.0.10.30转发给58.68.255.123再转发给客户端,大概明白这个道理就该知道怎么做了。

iptables -t nat -A PREROUTING -p tcp -d 58.68.255.123 --dport 31688 -j DNAT --to-destination 10.0.30.88:22

iptables -t nat -A POSTROUTING -p tcp -d 10.0.30.88 --dport 22 -j SNAT --to-source 10.0.10.30

只是下一条命令变了而已,把回原地址更改为内网的了,这样就可以在跳板机上把请求转发给客户端了。

或者用以下命令也可以

iptables -t nat -A PREROUTING -p tcp -i em1 --dport 31688 -j DNAT --to 10.0.30.88:22

iptables -t nat -A POSTROUTING -j MASQUERADE

效果是一样的,需要指定网卡,em1为外网网卡

以上第一次命令不生效原因主要还是跨网段的原因,30跨到10,导致这个问题,如果公网IP转发端口的这台机器内网IP也在30段,那么第一条命令是可以生效的。

iptables还是需要很多地方去学习研究的,写下这篇日志,防止遗忘。

posted on 2018-09-26 17:39  云上的天涯  阅读(4143)  评论(1编辑  收藏  举报