雙網卡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還是需要很多地方去學習研究的,寫下這篇日志,防止遺忘。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM