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

写了个自动更新内网打洞 IP 和端口服务,没有公网 IP 的宽带用户也可以全自动全速连回家

  •  
  •   richchang · 15 天前 · 4034 次点击
    自从换了移动宽带,就告别了公网 IP 。试过很多连回家的方法,包括:IPV6 ,ZeroTier ,Wireguard……全都因为要么是 IPV6 ,要么是 UDP ,而导致高峰期 QoS 严重。遇到跨网(比如用联通手机访问)或者晚间,基本没法用。

    最后终于找到了一个可以像公网 IP 时代一样速度连回家的方法:Lucky 提供的内网 STUN 打洞,配合基于 TCP 的 SS 服务。然而由于打洞得到的 IP 和端口都会经常变化,所以隔三差五就要手动修改。

    写了个小服务,自动根据 Lucky 的 Webhook 上报的最新 IP 和端口,更新订阅 URL ,利用 SS 的订阅功能,自动更新手机代理 APP (比如小火箭)里的服务器地址和端口。

    功能特点

    ✅ 适合没有公网 IP 的家庭宽带用户,远程访问家庭局域网
    ✅ 支持 Lucky Webhook 自动更新 SS 订阅
    ✅ 支持动态配置 SS method (加密方式)和 password (密码)
    ✅ 基于 Cloudflare Workers + KV ,无需自建服务器
    ✅ 支持 API Key 认证,确保数据安全
    ✅ 支持 Cloudflare 自有域名访问,绕过 workers.dev 的屏蔽

    详细方法见这里: https://github.com/kanshurichard/GoHomeEasy/tree/main

    欢迎 Star 和在 Github 上报 Issues
    41 条回复    2025-03-29 13:01:08 +08:00
    wtks1
        1
    wtks1  
       15 天前
    这个打洞是不是要求 nat1 ?
    richchang
        2
    richchang  
    OP
       15 天前
    @wtks1 理论上只要不是 NAT4 (全对称),应该都可以。反正测试了好几条移动宽带都没有问题。
    MeiJiayun
        3
    MeiJiayun  
       14 天前 via iPhone
    这个是需要路由器或者设备安装 Lucky ,配合 Lucky 使用的吧
    richchang
        4
    richchang  
    OP
       14 天前
    @MeiJiayun 是的
    muhahaha
        5
    muhahaha  
       14 天前
    非常棒,之前一直想有没有类似的功能,一直没有找到,最后无奈用了 Frp 内网穿透
    muhahaha
        6
    muhahaha  
       14 天前
    请教个问题,如果是安卓的 Clash 客户端,应该如何配合使用呢?
    richchang
        7
    richchang  
    OP
       14 天前
    @muhahaha 我没有试过,但理论上只要能接受 Shadowsocket 订阅格式的 app 都可以。

    另外,Clash 也有自己的 YAML 订阅格式,你可以简单改一下代码,让输出格式为 Clash 的 YAML 就行。
    richchang
        8
    richchang  
    OP
       14 天前
    @muhahaha 写了个对应 Clash YAML 格式订阅的代码,传到 Github 了
    w7938940
        9
    w7938940  
       14 天前
    要求有点高,需要支持 stun tcp 打洞
    muhahaha
        10
    muhahaha  
       14 天前
    @w7938940 我这陕西联通,也是支持的,感觉好多地区的都支持 Fullcone Nat ,这样的话是没有问题的,可以用软路由拨号测试一下。
    muhahaha
        11
    muhahaha  
       14 天前
    @richchang 谢谢,回头有空测试
    SenLief
        12
    SenLief  
       14 天前
    有 ipv6 还是 ipv6 好用,stun 的打洞要频繁的更新。
    richchang
        13
    richchang  
    OP
       14 天前
    @SenLief 我这个代码解决的就是 stun 打洞频繁更新的问题。

    ipv6 并非理想的连回家的方式。即使不考虑很多地方没有 ipv6 的问题,经我的测试,ipv6 起码在移动宽带跨网访问的时候,QoS 非常严重,跟 v4 完全不一样。
    SenLief
        14
    SenLief  
       14 天前 via iPhone
    @richchang 我这联通没有 TCP Qos , 一直 ipv6 挺稳定的。stun 有时候更新的很频繁,客户端就需要频繁的请求更新,另外更新了地址不出意外也需要重连。
    huguadao
        15
    huguadao  
       14 天前 via iPhone
    可以在群晖上部署么?目前用的 frp 到一个 vps 上这么用的
    richchang
        16
    richchang  
    OP
       14 天前
    @huguadao Lucky 有群晖的套件,没问题
    wanderNeng
        17
    wanderNeng  
       14 天前
    可以直接用 tailscale
    qingshengwen
        18
    qingshengwen  
       14 天前
    @richchang #2 还真是可以的,我之前用其他工具测试过显示是 NAT3 ,移动的,但是 lucky 能内网穿透成功
    guoguobaba
        19
    guoguobaba  
       14 天前
    lucky 持续报告“STUN 穿透获取的公网地址有效性检测失败",是不是说明我这个是 nat4 的

    但是我用 python stu 检测说是 nat3 的。
    richchang
        20
    richchang  
    OP
       14 天前
    @guoguobaba 你是不是给装 lucky 的机器开个全局梯子?那样会导致获取的公网地址是梯子的地址。

    另外需要打开路由器的 UPNP ,以及去掉其他可能影响连接的防火墙
    guoguobaba
        21
    guoguobaba  
       14 天前
    @richchang 我的光猫是路由模式,需要在光猫上把路由器设置为 dmz
    richchang
        22
    richchang  
    OP
       14 天前 via iPhone
    @guoguobaba 建议尽量改桥接。如果改不了桥接,就光猫拨号,路由器只当交换机。家里两层 NAT 可能有未知影响。
    MoeDisk
        23
    MoeDisk  
       14 天前
    码住,下班回家有空试一下~
    shane511
        24
    shane511  
       14 天前
    starred ,晚上回去试试
    latteczy
        25
    latteczy  
       14 天前
    请教一下,你是如何测试得出移动宽带 IPv6 被 QoS 严重的结论的?
    richchang
        26
    richchang  
    OP
       14 天前
    @latteczy 之前用过一阵子。在( 1 )联通手机/宽带访问;( 2 )外地移动访问;( 3 )晚高峰访问,都遇到了严重的降速和延迟爆炸,连 300kb/s 的家庭监控都看不了。
    dreamage
        27
    dreamage  
       14 天前
    之前想过这个事 奈何有公网 IP 一直没搞 没想到被大佬实现了 哈哈哈
    Awes0me
        28
    Awes0me  
       14 天前
    能不能用 wireguard
    XuanYuan
        29
    XuanYuan  
       14 天前
    是不是可以替代 WG 了?
    xuromky
        30
    xuromky  
       14 天前
    能跑满家宽的上传速度?
    richchang
        31
    richchang  
    OP
       14 天前
    @xuromky 目前测试是可以的
    richchang
        32
    richchang  
    OP
       14 天前
    @xuromky 这个方法可以用于任何需要暴露端口的 tcp/udp 服务。但我不建议用 wg ,是因为 udp 协议在我这里测试 QoS 严重。尽可能用基于 TCP 的协议,比如 SS 。
    Remawater
        33
    Remawater  
       14 天前
    从市里搬到县里 都是联通直接变 nat4 魔改了一下用上了 ipv6 也挺好 能跑满上行 不过我这 ipv6 的延迟巨高 100ms+ 跟中转差不多了
    mc97
        34
    mc97  
       12 天前
    @wtks1 实测 nat3 可以
    Ahiok
        35
    Ahiok  
       11 天前
    请问旁路由配置需要注意什么吗
    xtzhwei
        36
    xtzhwei  
       10 天前
    特来感谢,针对 RDP 无法使用代理的问题,我的方法是使用 Parallels RDP client ,https://www.parallels.com/products/ras/capabilities/rdp-client/

    该软件可以支持 http(s), socks5 代理

    目前使用该 stun 穿透+SS 代理,在公司环境下可正常使用,且延迟只有 10ms 。
    公司环境下没 ipv6 ,不允许 zerotier ,WG 等远程穿透工具,但我使用 OP 这种方法并不违规。
    Ahiok
        37
    Ahiok  
       8 天前
    请问教程中 js 文件中 your_secure_api_key 需要在哪里获取呢?指的是 cloudflare 的 api 令牌里的 api 密钥吗?
    richchang
        38
    richchang  
    OP
       8 天前
    @Ahiok 自己设置的密码
    Ahiok
        39
    Ahiok  
       8 天前
    @Ahiok #35
    qweink
        40
    qweink  
       3 天前
    已用上,非常好,订阅地址鉴权那里改改,换成动态的,更好防泄漏
    richchang
        41
    richchang  
    OP
       2 天前
    @qweink 只要保证每次都是用 https 访问,那就不会泄漏,不用担心
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5244 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 05:52 · PVG 13:52 · LAX 22:52 · JFK 01:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.