第1種情況:
將本機的端口轉發到本機的另外不同的端口上
使用場景:比如將本機的18006端口轉發 到 本機的8006端口上,8006端口(真正服務所在的監聽端口)只允許本地localhost訪問,而18006端口可以在外部訪問時,這種方式很管用。
iptables -t nat -I PREROUTING -m tcp -p tcp -d 106.111.110.223 --dport 18006 -j REDIRECT --to-ports 8006
或者
iptables -t nat -I PREROUTING -p tcp -d 166.111.110.223 --dport 18006 -j DNAT --to 166.111.110.223:8006 這種方式比較特殊,但不能改成這樣iptables -t nat -I PREROUTING -p tcp -d 166.111.110.223 --dport 18006 -j DNAT --to 127.0.0.1:8006
參考例子:設置端口轉發功能,將192.168.91.129 10001端口的請求轉發到 192.168.91.129的8080端口
iptables -t nat -A PREROUTING -p tcp -i eno16777736 -d 192.168.91.129 --dport 10001 -j DNAT --to 192.168.91.129:8080
以下3句是保證在本機可以通過10001端口訪問到8080
iptables -t nat -A PREROUTING -p tcp -i lo -d 127.0.0.1 --dport 10001 -j DNAT --to 192.168.91.129:8080
iptables -t nat -A OUTPUT -p tcp -d 127.0.0.1 --dport 10001 -j DNAT --to 192.168.91.129:8080
iptables -t nat -A OUTPUT -p tcp -d 192.168.91.129 --dport 10001 -j DNAT --to 192.168.91.129:8080
第2種情況:
將本機(機器1)的端口 轉移 到其他機器上(機器2)
使用場景:通俗的說就是端口映射
iptables -t nat -I PREROUTING -p tcp -d 166.111.110.223 --dport 18006 -j DNAT --to 100.72.139.1:8006
注意端口映射還需要機器1上開啟net.ipv4.ip_forward=1以及snat 在機器2上設定機器1為默認路由
例子如下:
iptables -t nat -A PREROUTING -d 192.168.172.130 -p tcp --dport 8000 -j DNAT --to-destination 192.168.172.131:80
iptables -t nat -A POSTROUTING -d 192.168.172.131 -p tcp --dport 80 -j SNAT --to 192.168.172.130
注意:實際使用過程中在ros只定義了dnat也即上面的第一步,不需要第2步,也可以正常的對外提供服務)
在firewalld中的實現:
1)msquerade firewall-cmd --permanent --add-masquerade
2)firewall-cmd --permanent --add-forward-port=port=12345:proto=tcp:toaddr=192.168.172.131:toport=22
3)生效 firewalld-cmd --reload
其實還可以利用ncat實現端口轉發(涉及gnb項目的udp數據通過tcp來轉發-gnb_udp_over_tcp)
參考:Linux端口轉發的幾種常用方法 https://blog.csdn.net/u014389734/article/details/108989653