linux端口转发:分为本机端口转发和将本机端口转发到其他机器 这2种情况

第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

原文地址:https://www.cnblogs.com/weihua2020/p/13845711.html