所谓端口转发就是,本来你的进程是提供端口A的TCP服务,但是由于一些特殊原因(比如该端口禁止外网访问,或者金志明某些用户访问),如果还是想要访问到该端口A的服务,可以配置一下端口转发,使得到端口B的请求被自动转发到端口A,而端口B是可以访问的,从而也就实现了对端口A服务的访问。
举个例子,现在我有个服务运行在8100端口,这个端口不允许外网访问,也不允许系统的其他用户访问,但是有访问需求怎么办,现在找一个能够被访问的端口,比如8000。然后开始配置。
首先,必须开启Linux的端口转发功能
我们进入配置文件:
$ vim /etc/sysctl.conf

找到 net.ipv4.ip_forward = 0 这一行,如图改成 net.ipv4.ip_forward = 1 。如果前面有 # 号注释,记得去掉。
修改后保存退出,然后输入命令:
$ sysctl -p
来使配置修改生效。
现在就可以修改iptables,来做端口转发,也就是nat映射了。
本机端口转发
在修改之前,如果你是centOS 7系统,那么需要先安装一个东西来使接下来的命令可以使用:
$ yum -y install iptables-services
然后开始修改配置:
$ iptables -t nat -A PREROUTING -p tcp --dport 8000 -j REDIRECT --to-ports 8100
$ service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]
$ service iptables restart
Redirecting to /bin/systemctl restart iptables.service
三条命令的目的很明显:配置端口转发(使对8000的访问转到8100)、保存修改、重启iptables。如果配置成功,将会看到上面这样的输出。
到此,就可以在外网访问8000端口来获取8100端口的服务了,很简单吧。
但是,这时候如果你在机器上直接去访问8000端口,是不会得到8100端口的服务的,为什么?因为你还需要做一次配置:
$ iptables -t nat -A OUTPUT -d localhost -p tcp --dport 8000 -j REDIRECT --to-ports 8100
$ service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]
$ service iptables restart
Redirecting to /bin/systemctl restart iptables.service
和上面的配置相比,只有第一条不同,不同点在于从PREROUTING 变成了OUTPUT 。
使用命令:
$ iptables -t nat --list
可以查看你添加的配置信息:

可以看到,这个列表分为四块,分别为PREROUTING、INPUT、OUTPUT、POSTROUTING,在PREROUTING和OUTPUT下可以看到我们刚才配置的端口转发,其他两块没有内容。
如果想要删除自己配置的转发规则,也很简单:
$ iptables -t nat -D PREROUTING 1 //序号从1开始,后边依次+1
$ iptables -t nat -D OUTPUT 1
要删除哪一块的规则,就写哪一块,序号从1开始。
以上,就是Linux的本机端口转发配置方法了,还有一种转发是跨IP端口转发,本文暂不介绍。
参考资料:
https://blog.csdn.net/zpf336/article/details/73163419
https://blog.csdn.net/xin_yu_xin/article/details/46416101
https://blog.csdn.net/m0_37886429/article/details/70171571
https://blog.csdn.net/zzhongcy/article/details/42738285
网友评论