Wenpo

内网 IP 下,如何正确进行端口映射?

  •  
  •   Wenpo · Sep 8, 2022 · 6033 views
    This topic created in 1526 days ago, the information mentioned may be changed or developed.

    如题:

    现在运营商 PPPOE 桥接下发的是内网 IP ( 100.X.X.X),NAT1 ,路由类原生 openwrt ;

    尝试开了 UPNP ,并且成功映射,外网测试公网 IP ( 117.X.X.X)端口不通;

    手动在防火墙建立映射,外网测试公网 IP ( 117.X.X.X)端口不通;

    基于以上

    我是否可以理解,在获得内网 IP 的情况下,如果想要成功的做端口映射

    需要做两层端口映射?

    即 Ppoe 桥接后,Openwrt ( 100.X.X.X)上的端口映射只对 100.X.X.X 以下生效

    还需要对 Openwrt 以上( 117.X.X.X)做一层端口映射?

    那内网 NAT1 的意义在于什么?

    Snipaste_2022-09-08_18-13-58.jpg Snipaste_2022-09-08_18-14-21.jpg Snipaste_2022-09-08_18-30-38.jpg

    28 replies  •  2022-09-13 21:17:02 +08:00
    lululau
    lululau
    Sep 8, 2022
    1
    这个需要黑进电信机房才行
    ochatokori
    ochatokori
    Sep 8, 2022 via Android
    2
    是要两层映射,nat1 意义在于你可以内部向外面打洞,之后就可以让外面任意主机访问了。
    nat4 的话就不行了
    Wenpo
    Wenpo
    OP
    Sep 8, 2022
    3
    @lululau 我看刑
    Wenpo
    Wenpo
    OP
    Sep 8, 2022
    4
    @ochatokori

    那我们现在内网 IP 的情况下

    NAT1 只是说对于下发的这个内网 IP ( 100.X.X.X)可以映射

    公网 IP ( 117.X.X.X )还是没有映射得嘛
    SenLief
    SenLief
    Sep 8, 2022
    5
    内网 IP 没啥希望吧?
    ochatokori
    ochatokori
    Sep 8, 2022 via Android
    6
    @Wenpo #4 如果你的路由器( 100.x )和运营商( 117.x )都是 NAT1 ,那就是有映射的,但是需要内部先往外访问一次(打洞),只用 upnp 或者直接监听是不行的
    dddxm
    dddxm
    Sep 8, 2022 via iPhone
    7
    这个 nat 测试 GitHub 有新版的。用那个新版的测试看看
    Wenpo
    Wenpo
    OP
    Sep 8, 2022
    8
    @dddxm

    ![Snipaste_2022-09-08_19-44-18.jpg]( https://img1.imgtp.com/2022/09/08/mVX1TRNL.jpg)
    ![Snipaste_2022-09-08_19-45-45.jpg]( https://img1.imgtp.com/2022/09/08/0546lZZB.jpg)

    试了,也是 NAT1
    Wenpo
    Wenpo
    OP
    Sep 8, 2022
    9
    @ochatokori 那意思还是有机会的嘛,应该写个 IPK 或者脚本之类的可以实现?
    lsylsy2
    lsylsy2
    Sep 8, 2022
    10
    以原版 openwrt21.03 为例,在 upnp 设置里可以启用 stun server ,这样流程就是:
    假设公网 IP ( 117.x.x.x )为 A ,openwrt ( 100.x.x.x )为 B ,终端( 192.168.x.x )为 C:
    1 、C 向 B 发送 UPNP 请求,“给我映射个公网端口到 192.168.x.x:54321”
    2 、B 在自己的防火墙上设置 100.x.x.x:54321 转发到 192.168.x.x:54321 ,然后通过 A 连接公网的 stun 服务查到这是个 NAT1 ,他的公网对应端口是 117.x.x.x:12345
    3 、B 告诉 C:我帮你映射好了,外网访问 117.x.x.x:12345 就可以转发到你的 54321
    Wenpo
    Wenpo
    OP
    Sep 8, 2022
    11
    @lsylsy2 确实有 stun server 这个选项,不过是不是需要双方认定的 stun 服务器,共同到这个服务器查询端口才行?
    mikewang
    mikewang
    Sep 8, 2022❤️2
    12
    首先,STUN 测试一般使用的是 UDP ,而 Port Forwarding Tester 网站上端口检查是 TCP ,不是同一种协议。
    其次,NAT1 (Full cone NAT) 是可以通过类似打洞的方式,在公网上开放自己 TCP 端口的,并且运行 http/https 服务。
    我正在做这个实验,在中国移动的家宽上已经成功实现。
    有空会把方案开源出来。
    Wenpo
    Wenpo
    OP
    Sep 8, 2022
    13
    @mikewang 非常期待。我想这个功能应该很多人都能用得上。
    jackzhou0
    jackzhou0
    Sep 8, 2022
    14
    @mikewang 期待老哥能分享一下方案
    mikewang
    mikewang
    Sep 8, 2022❤️1
    15
    @Wenpo
    @jackzhou0

    简单介绍一下原理吧。

    假设运营商给了我 NAT IP:100.64.12.34
    利用 Socket 端口重用的特性,监听 TCP 端口 100.64.12.34:1234 的同时,由这个端口,向我的腾讯云服务器建立一条 TCP 连接。
    服务器告诉本地,你的公网地址是 203.0.113.10:14500 ,并且服务器保持这个连接不关闭。(这很重要)
    只要这条连接维持下去,任意地址访问 203.0.113.10:14500 ,最终都会转发到 100.64.12.34:1234 去。
    一旦这条连接断开,那么转发规则就会失效。

    方案可行前提是:NAT1 ,并且没有 TCP 防火墙(一般改桥接即可)。
    Argon
    Argon
    Sep 8, 2022 via Android
    16
    @mikewang 期待开源,星星已经准备好了。
    hanguofu
    hanguofu
    Sep 9, 2022
    17
    @mikewang : 高手! 请问这个方案必须把 运营商 的光猫改成 桥接吗 ?
    zhengrt
    zhengrt
    Sep 9, 2022
    18
    @mikewang 期待你的方案!非常感兴趣
    natsji
    natsji
    Sep 9, 2022 via Android
    19
    直接用 ipv6
    knightdf
    knightdf
    Sep 9, 2022
    20
    只能用 frp 之类的可以吧
    MikuM97
    MikuM97
    Sep 9, 2022
    21
    taliscale 之类的软件 SDN 解决方案也可以尝试,NAT1 的情况下软件会自动帮你完成 P2P 的打洞,如果有兴趣折腾,还可以自建 headscale 来提升国内的访问速度
    mikewang
    mikewang
    Sep 9, 2022 via iPhone
    22
    @hanguofu 因为一般情况下光猫防火墙会阻止外部的传入 TCP (即使是 NAT1 )。桥接一劳永逸。
    手动关闭光猫防火墙,并设置 DMZ 也可以达到同样的效果。
    wolfmei
    wolfmei
    Sep 10, 2022
    23
    可以试下部署 headscale
    Tink
    Tink
    Sep 11, 2022 via Android
    24
    @mikewang 类似于 frp ?
    mikewang
    mikewang
    Sep 11, 2022
    25
    @Tink 不是 frp 。
    frp 的流量是要全部经过服务器的。
    这个方案,保持连接只是为了维持 NAT 的端口映射关系,流量不会过服务器。

    服务器并非必要选择,只要知道外部端口并维持连接即可。
    目前在考虑支持 tcp 的 public stun 服务器借助打洞,不过自己服务器的行为更可控一些。
    Tink
    Tink
    Sep 11, 2022
    26
    @mikewang #25 soga 只是为了打洞
    Wenpo
    Wenpo
    OP
    Sep 13, 2022
    28
    @mikewang 感谢!已使用上
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2663 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 55ms · UTC 10:30 · PVG 18:30 · LAX 02:30 · JFK 05:30
    ♥ Do have faith in what you're doing.