N4:双 NAT4 网络打洞测试工具 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
mikewang
V2EX    宽带症候群

N4:双 NAT4 网络打洞测试工具

  •  2
     
  •   mikewang 2024-06-02 01:02:45 +08:00 6347 次点击
    这是一个创建于 577 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我是 Natter 的作者。我创作 Natter 的起因是:我有一条移动送的千兆宽带,没有公网,但为 NAT1 。

    创作 Natter ,也是为了证明:

    • TCP 也能打洞
    • 单端打洞是可能的(利用公共 STUN & HTTP 服务器,且对端无需打洞客户端)

    • 但是,好景不长,两年后 家庭宽带 IPv6 被停,IPv4 变为 NAT4 (/t/1044806)

      然而我发现,我这里移动 NAT4 的外部端口是递增分配的。手机流量也是。于是着手开发 N4 工具。

      N4 工具是为了证明:

      • NAT4 - NAT4 也能打洞
      • 只要最外侧 NAT 均为端口递增型,无论后面套多少层 NAT 都能成功打洞

      具体工具和实现原理见:

      https://github.com/MikeWang000000/n4


      P.S. 本质上是端口预测,递增型是最好预测的一种情形。如果不是递增,但具有某种规律,或许通过机器学习等方法预测未来的端口也是可行的...

    16 条回复    2024-06-03 22:16:56 +08:00
    w568w
        1
    w568w  
       2024-06-02 01:17:18 +08:00   1
    NAT4 无法穿透的本质是 Address&Port-Dependent Filtering ,猜测 NAT4 端口目前通用的策略就两种,假设规律(比如递增或者别的什么规律)和生日攻击。

    生日攻击的实现可以参考 https://github.com/jflyup/nat_traversal 。不过实际中运营商不会允许同一 IP 同时占用那么多表项,所以成功率很低。

    之前论坛里也有说 Frp 的 XTCP 模式会尝试猜测 nat4 端口,可以看看他们的算法: t/995966

    不过我从家宽连接教育网里的服务器(两边 NAT4 ),从来没成功过…
    icaolei
        2
    icaolei  
       2024-06-02 01:19:07 +08:00
    膜拜一下,才几天时间就搓出这个项目了。这效率太强了。
    mikewang
        3
    mikewang  
    OP
       2024-06-02 01:42:18 +08:00
    @w568w #1

    Address and Port-Dependent Filtering 对应的应该是 NAT3 ,这个还能通过 STUN 找到外部端口对应; NAT4 更严格,问题在于不知道外部端口。

    生日攻击在理论上成立,但是实际上应用有点困难(和你所说的原因一样):

    类似于 TCP 的 “最大连接数”,UDP 也存在类似限制(实质就是映射表项数量的限制)。
    在我的环境测试,UDP “连接数” 到达 100 往上时,便出现随机丢包,超过 2000 便无法向新地址发包。

    此时再怎么测都是无效的,因为实际上 UDP 包根本就没有发出去,甚至没有形成映射。

    所以 N4 只能采用不那么暴力的方式预测,每次在小范围内(默认一轮 25 个端口)尝试,这样就存在成功的可能。
    mikewang
        4
    mikewang  
    OP
       2024-06-02 02:04:15 +08:00   1
    @w568w #1
    另外感谢指路,jflyup/nat_traversal 使用小 TTL 防止触发 flooding protection 的思路很妙。
    我也参考下其他算法看看能否进一步提升成功概率。
    liuzimin
        5
    liuzimin  
       2024-06-02 07:29:08 +08:00 via Android
    前几天还看到有人说“现在哪还有没 IPv6 的”。。(反正我也没有)
    kira887
        6
    kira887  
       2024-06-02 09:18:59 +08:00 via Android
    @liuzimin 很多公司也没配置
    a33291
        7
    a33291  
       2024-06-02 10:14:51 +08:00
    @liuzimin 我们路由器直接不支持 ipv6
    liuzimin
        8
    liuzimin  
       2024-06-02 10:25:46 +08:00 via Android
    @kira887 我家里是房东的下级网络,房东不肯开,我也没辙。正所谓现代版“何不食 ipv6”
    lightionight
        9
    lightionight  
       2024-06-02 12:22:34 +08:00 via iPhone   3
    国内 ISP 致力于让每一个客户都成为网络专家
    Dk2014
        10
    Dk2014  
       2024-06-02 13:49:42 +08:00
    我虽然是 nat1 ,但是 tmd 有时候拨号完打洞,端口都不够用,只能开一个洞
    这狗电信还设置了 2000 分钟拨号上限,直接给你整掉线
    tivizi
        11
    tivizi  
       2024-06-02 18:49:29 +08:00
    深圳联通,目前还是 NAT3
    Satansickle
        12
    Satansickle  
       2024-06-03 15:29:30 +08:00
    @liuzimin 好像是我说的...orz
    Satansickle
        13
    Satansickle  
       2024-06-03 15:31:52 +08:00
    LZ 真是既有技术又有闲心啊,base64 ( 5ZkAPJNc8P )看看有没有什么能够帮到 LZ 的
    Satansickle
        14
    Satansickle  
       2024-06-03 15:51:34 +08:00
    @Satansickle 搞错了,eHN3d3BwcA==
    hexo
        15
    hexo  
       2024-06-03 17:40:03 +08:00
    佩服执行力
    mikewang
        16
    mikewang  
    OP
       2024-06-03 22:16:56 +08:00
    @Satansickle 我们有交流群组:: 657590400 / TG: https://t.me/hellonatter 欢迎加入讨论
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2938 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 36ms UTC 10:27 PVG 18:27 LAX 02:27 JFK 05:27
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86