V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lovelylain
V2EX  ›  宽带症候群

端口受限 NAT 与对称 NAT 有办法打洞吗?

  •  
  •   lovelylain · 2022-05-21 09:08:52 +08:00 via Android · 5000 次点击
    这是一个创建于 945 天前的主题,其中的信息可能已经有所发展或是发生改变。

    家宽之前在手机上测试显示 full cone ,但与对称 nat 一直无法打洞成功,昨天换了一种方式测试,应该是那个测试 app 有 bug ,实际上应该是端口受限 nat 。手机流量的对称 nat 也测试了一下,虽然目标 ip 确定的情况下端口递增,但是访问不同 ip 可能映射到不同公网 ip ,所以端口猜测也没法搞了吧?还有可能打洞成功吗?

    17 条回复    2022-05-30 23:34:57 +08:00
    delpo
        1
    delpo  
       2022-05-21 09:23:07 +08:00   ❤️ 1
    如果一边端口受限另一边对称 nat,并且对称 nat 是端口递增的, 那么可以通过手动发包的方法打洞
    比如说对称 nat 一侧,和打洞服务器通信时,防火墙映射的外网端口为 n,那么真正打洞时,防火墙映射的外网端口就是 n+x(x 不一定为 1,因为内网可能还有其他客户端),这时候端口受限 nat 一侧的客户端就可以手动发包访问 n+x 号端口,就可以用该端口完成打洞.
    至于 x,一般比较小,可以通过遍历的方式进行发包
    missdeer
        2
    missdeer  
       2022-05-21 11:54:55 +08:00
    我觉得你可以考虑试试在家宽打开 upnp ,我之前遇到了跟你一样的问题,现在通过 upnp 能满足我绝大多数需求
    v2tudnew
        3
    v2tudnew  
       2022-05-21 12:01:25 +08:00
    有,要公网 IP ,普通路由器拨号😂。或者上 IPv6 。
    CGNAT 就算给 Full Cone NAT 也是端口不对称的残废版本,没用。
    yaott2020
        4
    yaott2020  
       2022-05-21 13:04:39 +08:00 via Android
    目前好像没有办法,可以试试预测
    lovelylain
        5
    lovelylain  
    OP
       2022-05-21 15:42:01 +08:00 via Android
    @yaott2020 主要是对称 nat 不一样的目的 ip 连出口 ip 都可能不一样,好像没什么办法能确定出口 ip ,所以端口猜测也搞不了。
    lovelylain
        6
    lovelylain  
    OP
       2022-05-21 15:46:57 +08:00 via Android
    @missdeer 你的意思是局端可能开启了 upnp ,可以在路由器上走 upnp 协议端口映射?这个要怎么操作呀?
    huyujievip
        7
    huyujievip  
       2022-05-21 16:53:28 +08:00
    别打了,用 Wireguard 组网吧
    missdeer
        8
    missdeer  
       2022-05-21 17:45:47 +08:00
    @jobmailcn 在光猫上 enable upnp (这步用光猫的手机 app 就能做到),然后光猫后的设备可以自己用程序(比如 miniupnp )映射端口,具体命令参数上网搜一下吧,很简单的,映射成功的话光猫 app 上能查到。我现在家宽和外面都是对称型,在家宽开了 udp 端口后,从外面就能连上来了。
    anbobi
        9
    anbobi  
       2022-05-21 21:33:25 +08:00
    话说打洞是啥意思
    i3x
        10
    i3x  
       2022-05-22 02:05:26 +08:00 via Android
    不是靠猜测。靠第三方服务器判定。
    stun 。
    fullcone 状态的话端口虽然不一致但是对应关系可以通过 stun 或者其他的外部服务器方式取得。

    你是需要两个地方通过 udp 打洞实现两端直接通信吧。搜索 site2site udp hole punching wireguard 。。。如果没有洁癖不担心商业产品依赖问题,tail scale 或者国产的 oray 蒲公英随便用。蒲公英组网也是优先穿透实在没办法才会用服务器转发。


    @anbobi 没有公网 ip ,且网关不提供 upnp ,端口映射之类的。但是仍然能保持让其他设备访问的端口。。。。基本上只能 udp 。因为 tcp 有来路问题。
    yaott2020
        11
    yaott2020  
       2022-05-22 11:39:03 +08:00 via Android
    @jobmailcn 那基本无解,除非运气好刚好能撞上,。还是买台 nat 鸡上中转吧。

    好奇问一句是什么网络环境,长城宽带吗
    lovelylain
        12
    lovelylain  
    OP
       2022-05-22 14:11:52 +08:00
    @missdeer 试了一下,No IGD UPnP Device found on the network !应该是没有 upnp 的。

    之前拨号成功虽然能获取到 ipv6 地址,但没有分发前缀,而且也 ping 不通 ipv6 网站,刚才又折腾了一番,终于发现是联通给我改的桥接有问题,调整了一下后 ipv6 就能用了,困扰近 2 年的 ipv6 不能用问题终于解决了。
    i3x
        13
    i3x  
       2022-05-22 20:02:56 +08:00 via Android
    @jobmailcn 桥接还有区别?啥问题?很好奇。
    lovelylain
        14
    lovelylain  
    OP
       2022-05-23 08:13:41 +08:00 via Android
    @i3x 光猫桥接配置里有个 ip 类型选项,v4 v6 或 双栈,之前是 v4 ,于是 v6 收发包都被屏蔽了,改成双栈后就有分发前缀了,v6 也正常了。
    anbobi
        15
    anbobi  
       2022-05-23 13:22:42 +08:00
    @i3x 你当真了,我这就是纯粹是揶揄楼主没有公网 IP 而已
    openp2p
        16
    openp2p  
       2022-05-29 16:14:30 +08:00
    这个实现其实非常简单,就是靠端口碰撞,大概发送 800 个包就超过 99%的概率打洞成功。
    可以先试用下行不行 https://openp2p.cn
    可行再看看代码 https://github.com/openp2p-cn/openp2p/blob/master/holepunch.go 核心部分就几十行代码的事
    flynaj
        17
    flynaj  
       2022-05-30 23:34:57 +08:00 via Android
    路由器拨号,路由器开 UPnP
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2692 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 14:47 · PVG 22:47 · LAX 06:47 · JFK 09:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.