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

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

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

    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 条附言  ·  326 天前

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

    供大家参考。

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

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

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