说白了,就是利用 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');
?>
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.