V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
测试工具
SmokePing
IPv6 访问测试
Wenpo
V2EX  ›  宽带症候群

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

  •  
  •   Wenpo · 85 天前 · 2392 次点击
    这是一个创建于 85 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题:

    现在运营商 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 条回复    2022-09-13 21:17:02 +08:00
    lululau
        1
    lululau  
       85 天前
    这个需要黑进电信机房才行
    ochatokori
        2
    ochatokori  
       85 天前 via Android
    是要两层映射,nat1 意义在于你可以内部向外面打洞,之后就可以让外面任意主机访问了。
    nat4 的话就不行了
    Wenpo
        3
    Wenpo  
    OP
       85 天前
    @lululau 我看刑
    Wenpo
        4
    Wenpo  
    OP
       85 天前
    @ochatokori

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

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

    公网 IP ( 117.X.X.X )还是没有映射得嘛
    SenLief
        5
    SenLief  
       85 天前
    内网 IP 没啥希望吧?
    ochatokori
        6
    ochatokori  
       85 天前 via Android
    @Wenpo #4 如果你的路由器( 100.x )和运营商( 117.x )都是 NAT1 ,那就是有映射的,但是需要内部先往外访问一次(打洞),只用 upnp 或者直接监听是不行的
    dddxm
        7
    dddxm  
       85 天前 via iPhone
    这个 nat 测试 GitHub 有新版的。用那个新版的测试看看
    Wenpo
        8
    Wenpo  
    OP
       85 天前
    @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
        9
    Wenpo  
    OP
       85 天前
    @ochatokori 那意思还是有机会的嘛,应该写个 IPK 或者脚本之类的可以实现?
    lsylsy2
        10
    lsylsy2  
       85 天前
    以原版 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
        11
    Wenpo  
    OP
       85 天前
    @lsylsy2 确实有 stun server 这个选项,不过是不是需要双方认定的 stun 服务器,共同到这个服务器查询端口才行?
    mikewang
        12
    mikewang  
       85 天前   ❤️ 2
    首先,STUN 测试一般使用的是 UDP ,而 Port Forwarding Tester 网站上端口检查是 TCP ,不是同一种协议。
    其次,NAT1 (Full cone NAT) 是可以通过类似打洞的方式,在公网上开放自己 TCP 端口的,并且运行 http/https 服务。
    我正在做这个实验,在中国移动的家宽上已经成功实现。
    有空会把方案开源出来。
    Wenpo
        13
    Wenpo  
    OP
       85 天前
    @mikewang 非常期待。我想这个功能应该很多人都能用得上。
    jackzhou0
        14
    jackzhou0  
       85 天前
    @mikewang 期待老哥能分享一下方案
    mikewang
        15
    mikewang  
       85 天前   ❤️ 1
    @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
        16
    Argon  
       85 天前 via Android
    @mikewang 期待开源,星星已经准备好了。
    hanguofu
        17
    hanguofu  
       85 天前
    @mikewang : 高手! 请问这个方案必须把 运营商 的光猫改成 桥接吗 ?
    zhengrt
        18
    zhengrt  
       84 天前
    @mikewang 期待你的方案!非常感兴趣
    natsji
        19
    natsji  
       84 天前 via Android
    直接用 ipv6
    knightdf
        20
    knightdf  
       84 天前
    只能用 frp 之类的可以吧
    MikuM97
        21
    MikuM97  
       84 天前
    taliscale 之类的软件 SDN 解决方案也可以尝试,NAT1 的情况下软件会自动帮你完成 P2P 的打洞,如果有兴趣折腾,还可以自建 headscale 来提升国内的访问速度
    mikewang
        22
    mikewang  
       84 天前 via iPhone
    @hanguofu 因为一般情况下光猫防火墙会阻止外部的传入 TCP (即使是 NAT1 )。桥接一劳永逸。
    手动关闭光猫防火墙,并设置 DMZ 也可以达到同样的效果。
    wolfmei
        23
    wolfmei  
       83 天前
    可以试下部署 headscale
    Tink
        24
    Tink  
       83 天前 via Android
    @mikewang 类似于 frp ?
    mikewang
        25
    mikewang  
       82 天前
    @Tink 不是 frp 。
    frp 的流量是要全部经过服务器的。
    这个方案,保持连接只是为了维持 NAT 的端口映射关系,流量不会过服务器。

    服务器并非必要选择,只要知道外部端口并维持连接即可。
    目前在考虑支持 tcp 的 public stun 服务器借助打洞,不过自己服务器的行为更可控一些。
    Tink
        26
    Tink  
       82 天前
    @mikewang #25 soga 只是为了打洞
    mikewang
        27
    mikewang  
       81 天前
    Wenpo
        28
    Wenpo  
    OP
       80 天前
    @mikewang 感谢!已使用上
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1085 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 50ms · UTC 22:19 · PVG 06:19 · LAX 14:19 · JFK 17:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.