![Linux 中的发夹](https://linux22.com/image/76607/Linux%20%E4%B8%AD%E7%9A%84%E5%8F%91%E5%A4%B9.png)
我有一个路由器,里面安装了Linux系统。
我希望我的路由器支持 NAT 发夹
Linux 内核中是否存在这样的功能?如果是的话如何激活?是否有补丁可以将其应用到我的内核上以支持发夹?
来自维基百科的发夹解释:
Let us consider a private network with the following:
Gateway address: 192.168.0.1
Host 1: 192.168.0.5
Host 2: 192.168.0.7
The gateway has an external IP : 192.0.2.1
Host 1 runs a P2P application P1 on its port 12345 which is externally mapped to 4444.
Host 2 runs a P2P application P2 on its port 12345 which is externally mapped to 5555.
If the NAT device supports hairpinning, then P1 application can connect to the P2 application using the external endpoint 192.0.2.1:5555.
If not, the communication will not work.
答案1
这是一个iptables
可以很好地处理“最近”内核的东西(自从2.4,超过 10 年)。
诀窍是执行“反向 natting”:将访问两台 NATted 服务器的本地网络中的任何主机的 IP 地址映射到网关的公共 IP。
类似下面的东西(即仅有的NATting 规则,无防火墙):
iptables -t nat -A PREROUTING -p tcp -m tcp -s 192.168.0.0/24 -d 192.168.0.5 --dport 4444 -j DNAT --to-destination :12345
iptables -t nat -A POSTROUTING -o eth1 -p tcp -m tcp -s 192.168.0.0/24 --dport 12345 -j SNAT --to-source 192.10.2.1
iptables -t nat -A PREROUTING -p tcp -m tcp -s 192.168.0.0/24 -d 192.168.0.7 --dport 5555 -j DNAT --to-destination :12345
iptables -t nat -A POSTROUTING -o eth1 -p tcp -m tcp -s 192.168.0.0/24 --dport 12345 -j SNAT --to-source 192.10.2.1
iptables -t nat -A PREROUTING -p tcp -m tcp -d 192.168.0.1 --dport 4444 -j DNAT --to-destination 192.168.0.5:12345
iptables -t nat -A PREROUTING -p tcp -m tcp -d 192.168.0.1 --dport 5555 -j DNAT --to-destination 192.168.0.7:12345
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 192.168.0.1
如果您不熟悉编写防火墙规则的神秘艺术,我建议使用 GUI 前端,例如固件构建器。