为 tcp 打洞实现 NAT Hairpin/Loopback

为 tcp 打洞实现 NAT Hairpin/Loopback

我尝试根据这篇文章测试一个python打孔包:https://bford.info/pub/net/p2pnat/

打洞过程在多个网络设置中都有效,只有最终用例(多级 NAT 后面的 3.5 个对等点)给我带来了困难。

我们假设有以下网络:

                  | 
                  | 11.0.0.1
             ___[eth0]___
               **NAT0**
             ___[eth1]___
                  | 192.168.0.1
                  |
               (switch)
                /    \
               /      \
  192.168.0.2 /        \ 192.168.0.3
        __[eth0]__   __[eth0]__
         **NATA**     **NATB**
        __[eth1]__   __[eth1]__
192.168.10.1|            |192.168.11.1
            |            |
192.168.10.2|            |192.168.11.2
        __[eth0]__   __[eth0]__
        **NodeA**    **NodeB**

我想在上面加一个发夹NAT0因为我认为这会导致问题。PREROUTING但是我不明白如何配置,POSTROUTING因为我不知道 PAT(=NAT) 的公共端口。因此我无法知道哪个数据包属于机器北塔或者NATB仅通过检查目标 IP-d 11.0.0.1如果我现在想知道哪个公共端口属于北塔NATB我能够将包发送到正确的本地计算机。

有趣的是,我能够让它仅使用单个 NAT 层(同时根本没有配置 Hairpin)。

可能相关的问题

NAT 反射(NAT 环回)如何工作?

然而,在这种情况下,所有以公共 IP 为目的地的(本地)流量都会被路由到一台机器。就我而言,我想根据公共端口将包路由到不同的计算机。

相关内容