Linux 中的髮夾

Linux 中的髮夾

我有一個路由器,裡面安裝了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 前端,例如韌體建構器

相關內容