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

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

  •  
  •   MFWT Nov 15, 2023 7623 views
    This topic created in 911 days ago, the information mentioned may be changed or developed.

    说白了,就是利用 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'); ?> 
    34 replies    2025-10-13 10:50:39 +08:00
    zhcode
        1
    zhcode  
       Nov 15, 2023
    巧了,我和你的方案一模一样,我是把打洞的端口号用 github 的接口记录到 gist 上面,路由器每周重启一次,端口号基本上也就重启路由器的时候会变
    zhcode
        2
    zhcode  
       Nov 15, 2023
    wg 支持 srv 记录就好了,就不用手动改端口了
    MFWT
        3
    MFWT  
    OP
       Nov 15, 2023
    @zhcode 主要是 WG 本体不会做这个,根据他们官方的说法是,需要上层应用去解决这个问题
    然后就陷入一个问中了:虽然说软件是开源的,但是我不会这个语言或者别的什么原因导致没办法改,只能用一些土办法来解决了
    evalfun
        4
    evalfun  
       Nov 15, 2023
    其实 wg 的灵活性挺低的,内核态的 wg 起来之后甚至没有办法更新 ip 地址。对端 wg 的 ip 地址都变了,只要不重启本端的 wg ,本端 wg 就不会重新解析对端的 ip 地址,而是一直尝试使用旧的 ip 地址连接对端。按照作者的说法是,wg 隧道是用来静态组网的
    Akitora
        5
    Akitora  
       Nov 15, 2023
    推荐一下 GOST
    duduke
        6
    duduke  
       Nov 16, 2023 via iPhone
    我是直接生成 vmess 订阅,更新订阅就行。然后地址和端口就更新好了
    faceair
        7
    faceair  
       Nov 16, 2023
    tailscale 会不会简单点?
    lovexiaofan12312
        8
    lovexiaofan12312  
       Nov 16, 2023 via iPhone
    其实用 v6+ddns 更方便………
    xwit
        9
    xwit  
       Nov 16, 2023
    @evalfun 用域名,配合脚本检测,ping 不通了,就重启接口就好了
    465456
        10
    465456  
       Nov 16, 2023
    ssh+浏览器插件代理转发
    YGBlvcAK
        11
    YGBlvcAK  
       Nov 16, 2023
    巧妙的方法,不再来个 zerotier 托底吗?如果没有干扰,zt 的速度也是很不错的
    heyeshuang
        12
    heyeshuang  
       Nov 16, 2023 via Android   2
    jwz426
        13
    jwz426  
       Nov 16, 2023
    +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  
       Nov 16, 2023
    @evalfun 是的,所以 op 那边自带一个保活脚本,原理就是……ping 不通对端就重新解析地址然后重启 interface……
    hanguofu
        15
    hanguofu  
       Nov 16, 2023
    谢谢分享宝贵经验。顺便问问: 你家的移动光猫不会屏蔽家里的 WireGuard 端口吗 ?
    Masoud2023
        16
    Masoud2023  
       Nov 16, 2023
    我测了几条移动宽带都是 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  
       Nov 16, 2023
    @duduke 相同的方案
    lihang1329
        18
    lihang1329  
       Nov 16, 2023
    不过我用的 vmess ,每次端口号变化,写入到 cloudflare workers,
    cloudflare workers 同时生成 clash 配置,clash 客户端配置每 5 分钟更新一次配置
    lihang1329
        19
    lihang1329  
       Nov 16, 2023
    可以做到配置更新无感
    rtz
        20
    rtz  
       Nov 16, 2023
    @lihang1329 太巧了,我也是用 worker 自动生成 vmess 订阅
    MFWT
        21
    MFWT  
    OP
       Nov 16, 2023
    @duduke 主要是我需要用到三层代理,思来想去最好的解决方案当然就是三层 VPN ,主要是人家就是做这个的
    MFWT
        22
    MFWT  
    OP
       Nov 16, 2023
    @lovexiaofan12312 学校网络不支持 v6 ,只能用流量卡上,这个就不太方便了
    MFWT
        23
    MFWT  
    OP
       Nov 16, 2023
    @YGBlvcAK
    @faceair

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

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

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

    我这个结果也是在路由器上跑的。
    s82kd92l
        30
    s82kd92l  
       Nov 17, 2023 via Android
    可以用 mqtt 发布端口到公共服务器某个频道上,然后订阅频道,简单免费
    Dzsss
        31
    Dzsss  
       Nov 17, 2023
    Mikrotik IP Cloud 的 BTH 了解一下。
    Masoud2023
        32
    Masoud2023  
       Nov 17, 2023
    @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  
       Mar 11, 2024
    试一下 tailscale 吧,安装个客户端就可以了。
    molezznet
        34
    molezznet  
       Oct 13, 2025
    natter 不错, 不过支持 ip4p 的客户端太少了。 想公网访问 nas 的 webdav 就好了
    About     Help     Advertise     Blog     API     FAQ     Solana     3789 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 85ms UTC 04:58 PVG 12:58 LAX 21:58 JFK 00:58
    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