说白了,就是利用 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'); ?> 