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

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

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

    我是 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  
       172 天前   ❤️ 1
    NAT4 无法穿透的本质是 Address&Port-Dependent Filtering ,猜测 NAT4 端口目前通用的策略就两种,假设规律(比如递增或者别的什么规律)和生日攻击。

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

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

    不过我从家宽连接教育网里的服务器(两边 NAT4 ),从来没成功过…
    icaolei
        2
    icaolei  
       172 天前
    膜拜一下,才几天时间就搓出这个项目了。这效率太强了。👍
    mikewang
        3
    mikewang  
    OP
       172 天前
    @w568w #1

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

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

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

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

    所以 N4 只能采用不那么暴力的方式预测,每次在小范围内(默认一轮 25 个端口)尝试,这样就存在成功的可能。
    mikewang
        4
    mikewang  
    OP
       172 天前   ❤️ 1
    @w568w #1
    另外感谢指路,jflyup/nat_traversal 使用小 TTL 防止触发 flooding protection 的思路很妙。
    我也参考下其他算法看看能否进一步提升成功概率。
    liuzimin
        5
    liuzimin  
       172 天前 via Android
    前几天还看到有人说“现在哪还有没 IPv6 的”。。(反正我也没有)
    kira887
        6
    kira887  
       172 天前 via Android
    @liuzimin 很多公司也没配置
    a33291
        7
    a33291  
       172 天前
    @liuzimin 我们路由器直接不支持 ipv6😂
    liuzimin
        8
    liuzimin  
       172 天前 via Android
    @kira887 我家里是房东的下级网络,房东不肯开,我也没辙。正所谓现代版“何不食 ipv6”
    lightionight
        9
    lightionight  
       172 天前 via iPhone   ❤️ 1
    国内 ISP 致力于让每一个客户都成为网络专家
    Dk2014
        10
    Dk2014  
       172 天前
    我虽然是 nat1 ,但是 tmd 有时候拨号完打洞,端口都不够用,只能开一个洞😅
    这狗电信还设置了 2000 分钟拨号上限,直接给你整掉线
    tivizi
        11
    tivizi  
       172 天前
    深圳联通,目前还是 NAT3
    Satansickle
        12
    Satansickle  
       171 天前
    @liuzimin 好像是我说的...orz
    Satansickle
        13
    Satansickle  
       171 天前
    LZ 真是既有技术又有闲心啊,base64 ( 5ZkAPJNc8P )看看有没有什么能够帮到 LZ 的
    Satansickle
        14
    Satansickle  
       171 天前
    @Satansickle 搞错了,eHN3d3BwcA==
    hexo
        15
    hexo  
       171 天前
    佩服执行力
    mikewang
        16
    mikewang  
    OP
       171 天前
    @Satansickle 我们有交流群组:🐧: 657590400 / TG: https://t.me/hellonatter 欢迎加入讨论👏
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3017 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 14:17 · PVG 22:17 · LAX 06:17 · JFK 09:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.