Natter 更新了:更稳定的 TCP 打洞, Docker 支持... - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
mikewang
V2EX    宽带症候群

Natter 更新了:更稳定的 TCP 打洞, Docker 支持...

  •  1
     
  •   mikewang 2023-12-31 15:07:51 +08:00 9520 次点击
    这是一个创建于 655 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Natter

    GitHub: https://github.com/MikeWang000000/Natter

    Natter 是一个 “TCP 打洞” 工具。它可以 NAT 1 网络下的 TCP 端口直接暴露至公网,达到公网 IP 相似效果。
    详细介绍在这里:/t/879549


    今年比较忙,先前规划的新版 Natter ,今天终于发布了第一版候选版本:v2.0.0-rc1
    Natter v2 完全重写了之前的代码,改动也比较大,主要目的是适配 Docker 。

    Natter v2 取消了配置文件的设计,并且重新设计了命令行参数,单个实例仅负责单个端口。
    这样仅通过 docker-compose.yml 就能调整所有配置,无需再去改 Natter 的配置文件。


    快速开始:

    1. 光猫设置桥接;
    2. 路由器设置 DMZ 主机为服务器(软路由上直接用 docker 则跳过);
    3. 服务器上运行:
      docker run --net=host --rm nattertool/natter 

    打洞成功,则可以访问公网端口打开测试页面。


    快速启动一个 Nginx + Natter 的服务:

    git clone 'https://github.com/MikeWang000000/Natter' cd Natter/natter-docker/nginx docker compose up 

    快速启动一个 qBittorrent + Natter 的服务(与公网同等体验,qB 显示公网绿色标识):

    git clone 'https://github.com/MikeWang000000/Natter' cd Natter/natter-docker/qbittorrent docker compose up 

    Docker 中使用 Natter 的详细文档:

    https://github.com/MikeWang000000/Natter/blob/master/natter-docker/README.md

    欢迎大家测试找 bug ~

    第 1 条附言    2023-12-31 15:51:30 +08:00

    同时感谢以下项目使用不同语言实现了 Natter 相似的功能:

    供大家参考。

    35 条回复    2024-01-28 13:48:19 +08:00
    super5xy
        1
    super5xy  
       2023-12-31 15:26:14 +08:00   1
    好东西
    nullptrexp
        2
    nullptrexp  
       2023-12-31 16:38:13 +08:00   1
    好东西
    heiher
        3
    heiher  
       2023-12-31 17:47:55 +08:00 via Android   1
    好东西,感谢作者
    cy18
        4
    cy18  
       2023-12-31 20:01:15 +08:00   1
    如果有办法在 dns 记录里面把端口信息加进去,或者弄个 url 跳转之类的,那用起来就方便了。
    mikewang
        5
    mikewang  
    OP
       2023-12-31 20:08:14 +0800
    chenqh
        6
    chenqh  
       2023-12-31 20:22:05 +08:00   3
    比我强多了,py 网络我只会用 requests..
    GoodRui
        7
    GoodRui  
       2023-12-31 22:05:47 +08:00 via Android   1
    看起来不错啊!支持大佬~
    SenLief
        8
    SenLief  
       2023-12-31 22:13:19 +08:00   1
    没有公网的能不能用?好像也不是 NAT1
    mikewang
        9
    mikewang  
    OP
       2023-12-31 22:32:24 +08:00
    @SenLief 这个就是给没有公网的宽带用的。不是 NAT1 应该不行了,不过试试才知道~
    zhcode
        10
    zhcode  
       2024-01-01 00:30:35 +08:00   1
    感谢大佬,一直在用
    jqtmviyu
        11
    jqtmviyu  
       2024-01-01 04:15:41 +08:00   1
    话说有了 v6 后是不是对这类打洞软件没那么大需求了.
    Zy143L
        12
    Zy143L  
       2024-01-01 08:36:13 +08:00 via Android   1
    没考虑加入 upnp 吗?
    可以跳过 dmz
    zhengrt
        13
    zhengrt  
       2024-01-01 10:36:38 +08:00   1
    好东西,支持一下
    mikewang
        14
    mikewang  
    OP
       2024-01-01 12:04:43 +08:00
    #11 @jqtmviyu 是的,不过像 BT 等有 v4 端口效果还是更好一些。v6 全球普及之后就用不着打洞了。
    iijboom
        15
    iijboom  
       2024-01-01 12:15:17 +08:00   1
    看起来 nat4 不支持么,不太确定
    mikewang
        16
    mikewang  
    OP
       2024-01-01 12:18:34 +08:00
    #12 @Zy143L DMZ 是懒人做法(作为示例),实际可以用 -b 选项绑定端口,然后路由器进行单个转发。

    加上 UPnP 支持之前考虑过,不过 UPnP 不一定可靠,会导致一些问题难以排查;
    另一点考虑,就是实现协议并且维护状态,会使得 Natter 代码膨胀的比较厉害。( Natter 的理念是不引入第三方包,各种协议全部自己实现)
    mikewang
        17
    mikewang  
    OP
       2024-01-01 12:30:14 +08:00   1
    #15 @iijboom NAT 4 不支持。
    原理上,NAT 4 意味着传出连接对特定 IP 映射特定端口,因此没法反过来从其他 IP 接受传入连接。

    所以需要通过桥接/DMZ 方式提升 NAT 等级为 NAT 1 。如果运营商提供的网络就是 NAT 4 ,那就没有办法了。
    flynaj
        18
    flynaj  
       2024-01-01 13:32:00 +08:00 via Android   1
    @cy18 natmap 可以,openwrt 系统集成有
    rtz
        19
    rtz  
       2024-01-01 19:26:46 +08:00   1
    建议添加一个功能:主动上报端口和 IP
    在命令行指定一个 http(s)链接,每次 IP 或者端口变化都向这个链接提交最新变化
    这个功能是我之前在老的 Natter 上自己加的,配合 CF Worker 自动生成 QuantimultX 的订阅信息
    mikewang
        20
    mikewang  
    OP
       2024-01-01 19:48:57 +08:00
    @rtz 当前版本支持 -e /path/to/script.sh 调用通知脚本,通知脚本可以自己定制,比如使用 curl 请求。
    不知到这样是否能满足需求。
    相关文档: https://github.com/MikeWang000000/Natter/blob/master/docs/script.md
    rtz
        21
    rtz  
       2024-01-01 21:09:18 +08:00   1
    @mikewang 好吧是我没有仔细阅读,楼主考虑的非常详细
    sunnysab
        22
    sunnysab  
       2024-01-02 10:28:36 +08:00   1
    @jqtmviyu 校园网环境,openwrt 发现 IPV6 中继总是配不好,到头来还得打洞。op 上的 upnpd 貌似又不支持 v6 ,头疼着呢。。
    D2h0VL89HMAU417B
        23
    D2h0VL89HMAU417B  
       2024-01-02 13:41:56 +08:00   1
    先收藏
    Misakax
        24
    Misakax  
       2024-01-02 14:58:50 +08:00   1
    一个 docker 能转发多个端口吗
    24en
        25
    24en  
       2024-01-02 17:43:57 +08:00   1
    好东西,感谢作者
    MFWT
        26
    MFWT  
       2024-01-02 21:45:12 +08:00   1
    用了很久 natter 了,继续支持!
    Ipsum
        27
    Ipsum  
       2024-01-02 23:26:52 +08:00   1
    现在运营商这么大方了?直接 tcp 全锥了?
    mikewang
        28
    mikewang  
    OP
       2024-01-03 00:45:40 +08:00
    #24 @Misakax 可以啊,目前单个容器对应单个端口。多个容器就对应多个。
    mikewang
        29
    mikewang  
    OP
       2024-01-03 00:46:00 +08:00
    #27 @thank243577 目前还是挺常见的,除了某些地区因为治理 PCDN 的原因故意改成 NAT 4 除外。
    MFWT
        30
    MFWT  
       2024-01-03 09:28:37 +08:00   1
    @thank243577 广东移动,不论是新增还是存量,都能拿到 FullCone v4 + /60 v6
    HandSonic
        31
    HandSonic  
       2024-01-20 02:03:04 +08:00 via iPhone
    udp 无法使用,所有 STUN 服务器都超时
    mikewang
        32
    mikewang  
    OP
       2024-01-20 03:21:59 +08:00
    @HandSonic Windows 下特有问题,请等待修复。
    HandSonic
        33
    HandSonic  
       2024-01-20 09:07:54 +08:00 via iPhone
    @mikewang 大概要等多久呀?
    mikewang
        34
    mikewang  
    OP
       2024-01-21 02:51:35 +08:00
    @HandSonic 我在 dev 分支进行了一个简单的修复,请拉取最新代码验证~
    lzy2998157572
        35
    lzy2998157572  
       2024-01-28 13:48:19 +08:00
    @MFWT #30 广州移动是/64 v6
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1006 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 23:01 PVG 07:01 LAX 16:01 JFK 19:01
    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