分享一下我日常用的打洞回家法,不知道有没有 V 友也用这个的 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MFWT
V2EX    宽带症候群

分享一下我日常用的打洞回家法,不知道有没有 V 友也用这个的

  •  
  •   MFWT 2023-11-15 19:45:27 +08:00 6664 次点击
    这是一个创建于 694 天前的主题,其中的信息可能已经有所发展或是发生改变。

    说白了,就是利用 natter/natmap 等软件,对 FullCone 宽带(移动不给 v4 公网,只有 FullCone 了)进行端口打洞,打出来的洞 TCP 和 UDP 都可以跑,理论上可以直接用,不过为了安全和方便期间,我把他转发到了 WireGuard 上面,这样在学校的时候只需要让 WireGuard 连接这个端口,就可以访问家里的内了

    一个问题是,这样打洞打出来的端口,端口号是随机的,幸好 natter 提供了 Hook 功能,打洞成功后只需要调用 curl 把它推送到外面网站(我在博客站放了个小脚本)的一个文件上,访问端要连接的时候读取一下这个文件并写入 WireGuard 配置文件中(同样可以用 curl 和一点 bat 脚本即可办到)就能知道最新地址了

    一般来说重拨号后读一次就可以用到下次重拨号,还是不错的

    现在唯一要祈祷的就是,移动不要收回我的 NAT1 ,不然我就得走中转了

    附,网站上的脚本,请注意保护好密钥,最好再给脚本改个名,因为脚本写得很简陋,很容易被有心之人利用来写入恶意文件什么的

    <?php /* 使用方法: 1. 更新信息:GET http://your_api/<脚本名>.php?key=访问密钥&act=update&ip=新的 IP&port=新的端口 2. 获取信息:GET http://your_api/<脚本名>.php?key=访问密钥 请在这个 php 文件的同目录下面放一个 ip.txt 文件用来记录信息,需要有可读写权限,666 就行 */ $key = '在此处填写你的访问密钥'; if(empty($_GET['key']) || $_GET['key'] != $key){die('failed');} if(!empty($_GET['act']) && $_GET['act'] == 'update') { if(empty($_GET['ip']) || empty($_GET['port'])) { die('failed'); } file_put_contents('ip.txt',$_GET['ip'].':'.$_GET['port']); die('success'); } readfile('ip.txt'); ?> 
    33 条回复    2024-03-11 20:33:07 +08:00
    zhcode
        1
    zhcode  
       2023-11-15 19:58:18 +08:00
    巧了,我和你的方案一模一样,我是把打洞的端口号用 github 的接口记录到 gist 上面,路由器每周重启一次,端口号基本上也就重启路由器的时候会变
    zhcode
        2
    zhcode  
       2023-11-15 20:06:21 +08:00
    wg 支持 srv 记录就好了,就不用手动改端口了
    MFWT
        3
    MFWT  
    OP
       2023-11-15 21:59:42 +08:00
    @zhcode 主要是 WG 本体不会做这个,根据他们官方的说法是,需要上层应用去解决这个问题
    然后就陷入一个问题中了:虽然说软件是开源的,但是我不会这个语言或者别的什么原因导致没办法改,只能用一些土办法来解决了
    evalfun
        4
    evalfun  
       2023-11-15 22:55:20 +08:00
    其实 wg 的灵活性挺低的,内核态的 wg 起来之后甚至没有办法更新 ip 地址。对端 wg 的 ip 地址都变了,只要不重启本端的 wg ,本端 wg 就不会重新解析对端的 ip 地址,而是一直尝试使用旧的 ip 地址连接对端。按照作者的说法是,wg 隧道是用来静态组网的
    Akitora
        5
    Akitora  
       2023-11-15 23:08:34 +08:00
    推荐一下 GOST
    duduke
        6
    duduke  
       2023-11-16 00:27:08 +08:00 via iPhone
    我是直接生成 vmess 订阅,更新订阅就行。然后地址和端口就更新好了
    table cellpadding="0" cellspacing="0" border="0" width="100%"> faceair
        7
    faceair  
       2023-11-16 01:17:59 +08:00
    tailscale 会不会简单点?
    lovexiaofan12312
        8
    lovexiaofan12312  
       2023-11-16 01:33:56 +08:00 via iPhone
    其实用 v6+ddns 更方便………
    xwit
        9
    xwit  
       2023-11-16 02:37:47 +08:00
    @evalfun 用域名,配合脚本检测,ping 不通了,就重启接口就好了
    465456
        10
    465456  
       2023-11-16 07:55:13 +08:00
    ssh+浏览器插件代理转发
    YGBlvcAK
        11
    YGBlvcAK  
       2023-11-16 09:15:19 +08:00
    巧妙的方法,不再来个 zerotier 托底吗?如果没有干扰,zt 的速度也是很不错的
    heyeshuang
        12
    heyeshuang  
       2023-11-16 09:54:08 +08:00 via Android   2
    jwz426
        13
    jwz426  
       2023-11-16 10:24:15 +08:00
    +1 ,虽然有公网 IP ,但是我也测试过这套方案做备份。
    natmap 安卓使用 wg 的话,有一个魔改版支持 ip4p 的客户端可以用。
    https://github.com/heiher/natmap/wiki/faq#%E5%9F%9F%E5%90%8D%E8%AE%BF%E9%97%AE%E6%98%AF%E5%A6%82%E4%BD%95%E5%AE%9E%E7%8E%B0%E7%9A%84
    dude4
        14
    dude4  
       2023-11-16 11:25:28 +08:00
    @evalfun 是的,所以 op 那边自带一个保活脚本,原理就是……ping 不通对端就重新解析地址然后重启 interface……
    hanguofu
        15
    hanguofu  
       2023-11-16 12:12:31 +08:00
    谢谢分享宝贵经验。顺便问问: 你家的移动光猫不会屏蔽家里的 WireGuard 端口吗 ?
    Masoud2023
        16
    Masoud2023  
       2023-11-16 13:57:49 +08:00
    我测了几条移动宽带都是 UDP NAT3 ,这个需要路由器配置什么吗?还是分地区?


    [INFO] - Getting STUN server IP...
    [INFO] - Checking NAT Type for UDP...
    [INFO] - NAT Type for UDP: [ Port restricted (NAT 3) ]
    [WARNING] - The NAT type of your network is not full cone (NAT 1). TCP hole punching may fail.
    [INFO] - Checking NAT Type for TCP...
    [INFO] - NAT Type for TCP: [ Cone NAT ]
    [INFO] - Start punching...
    [WARNING] - TCP hole punching seems to fail. Maybe you are behind a firewall. However, you may check this address from another network: ('x.x.x.x', xxxx)
    [INFO] - TCP keep-alive...

    之后访问对应 ip 端口没有效果
    vchroc
        17
    vchroc  
       2023-11-16 17:43:10 +08:00
    @duduke 相同的方案
    lihang1329
        18
    lihang1329  
       2023-11-16 18:33:24 +08:00
    不过我用的 vmess ,每次端口号变化,写入到 cloudflare workers,
    cloudflare workers 同时生成 clash 配置,clash 客户端配置每 5 分钟更新一次配置
    lihang1329
        19
    lihang1329  
       2023-11-16 18:34:59 +08:00
    可以做到配置更新无感
    rtz
        20
    rtz  
       2023-11-16 19:34:57 +08:00
    @lihang1329 太巧了,我也是用 worker 自动生成 vmess 订阅
    MFWT
        21
    MFWT  
    OP
       2023-11-16 21:43:04 +08:00
    @duduke 主要是我需要用到三层代理,思来想去最好的解决方案当然就是三层 VPN ,主要是人家就是做这个的
    MFWT
        22
    MFWT  
    OP
       2023-11-16 21:43:36 +08:00
    @lovexiaofan12312 学校网络不支持 v6 ,只能用流量卡上,这个就不太方便了
    MFWT
        23
    MFWT  
    OP
       2023-11-16 21:44:57 +08:00
    @YGBlvcAK
    @faceair

    ZT 和 TS 我都考虑过,但是在我这边几乎无法使用,因此最后放弃了
    其实要论兜底的话,用流量卡(校园网不支持 v6 )+v6DDNS 也可以连回去,而且因为路由器能拿到公网 v6 ,所以其实问题不大,主题中的方法是拿不到公网 v4 才想出来的下策
    MFWT
        24
    MFWT  
    OP
       2023-11-16 21:45:29 +08:00
    @jwz426 感谢分享,我去看看
    MFWT
        25
    MFWT  
    OP
       2023-11-16 21:46:33 +08:00
    @hanguofu 我进去超管后台关掉了所有防火墙,交给软路由处理了
    MFWT
        26
    MFWT  
    OP
       2023-11-16 21:48:00 +08:00
    @Masoud2023
    有一个可能是你是光猫拨号,但是光猫有额外防火墙或者没有开 DMZ 给下级路由
    我是路由器拨号,然后在路由器上做 Natter 的

    当然,我目前怀疑是分地区的,因为有朋友开移动宽带只能拿到 NAT4 ,但是我开两条都能拿到 NAT1
    MFWT
        27
    MFWT  
    OP
       2023-11-16 21:49:13 +08:00
    @lihang1329 思路差不多,我主要是考虑到可以用到完整三层,因此选了 VPN
    MYDB
        28
    MYDB  
       2023-11-16 23:34:09 +08:00
    我 ss 全局连回去,然后顺便手机免流
    Masoud2023
        29
    Masoud2023  
       2023-11-17 10:46:51 +08:00
    @MFWT #26

    你的路由器是 openwrt 吗?有开防火墙的 NAT1 吗?

    我这个结果也是在路由器上跑的。
    s82kd92l
        30
    s82kd92l  
       2023-11-17 10:51:26 +08:00 via Android
    可以用 mqtt 发布端口到公共服务器某个频道上,然后订阅频道,简单免费
    Dzsss
        31
    Dzsss  
       2023-11-17 11:01:40 +08:00
    Mikrotik IP Cloud 的 BTH 了解一下。
    Masoud2023
        32
    Masoud2023  
       2023-11-17 11:05:22 +08:00
    @MFWT #26

    我打开 NAT1 了,确实是 openwrt 的问题

    https://serverfault.com/questions/441257/how-to-configure-totally-open-dmz-with-openwrt 设置了下 DMZ ,一下子就开了

    之后得抽时间自己编译下固件把 https://www.right.com.cn/forum/thread-319827-1-1.html 这个打进去
    hi543
        33
    hi543  
       2024-03-11 20:33:07 +08:00
    试一下 tailscale 吧,安装个客户端就可以了。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     870 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 21:44 PVG 05:44 LAX 14:44 JFK 17:44
    Do have faith in what you're doing.
    ubao 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