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

2023-11-15 19:45:27 +08:00
 MFWT

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

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/992226

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX