前段时间我的公网 IP 掉了,也引起了大伙的讨论。我懒得跟运营商继续扯皮,所以想自己折腾折腾,用打洞的方式连回家。
首先要感谢 @mikewang @heiher @gdy666 几位大佬提供的 TCP 打洞的程序,不然我可能就只能选择 frp 之类中转的方案了,个人还是比较倾向于直连。
家里 HTTP 的服务通过 302 跳转访问,基本没什么痛点。SSH 连接借鉴的的是 natmap 项目中提出的方案——使用 NATMap 在 NAT-1 私网 IP 宽带上部署 SSH 服务,但是我选择将端口信息保存到 TXT 记录中,个人觉得更方便一点。
唯一比较难受的是,以前有公网 IP 的时候,可以直接用 VPN 连回家里,这样干活(摸鱼)能方便点,但是公网 IP 掉了以后,我就没办法连回家里内网了。
一开始我是想找有没有类似实现的 VPN ,但似乎没找到,因为我原来用的就是 OpenVPN ,服务端是 Mikrotik 自带的,索性就尝试魔改了一下 OpenVPN 客户端,调研后我选择魔改 OpenVPN 3 这个库,看起来挺多 UI 客户端都依赖这个库。
我修改的方法大概是这样的,需要 ovpn 配置文件中添加一行记录
remote-srv _openvpn._tcp.yourdomain.com
OpenVPN 3 启动时需要读取 ovpn 配置,如果发现有remote-srv
字段的配置,就会尝试解析 SRV 记录,获取到对应的端口号后,自动覆盖掉端口号的配置。
由于要解析 SRV 记录,所以引入了 ldns 库,现在想想,可能利用 IP4P 格式的记录做解析可能更方便,还不用引入其他库,不过我都写完了才想起来,就懒得改了
本身这是一个核心库,但是它本身带了一个 cli 程序,编译完后用 cli 命令连接即可,我偷懒就没弄 GUI 了(我是废物
这个图是我在公司网络用 cli 连回 Mikrotik 管理页面的截图
仓库地址在这,欢迎大佬尝试使用,如果 readme 写的不清晰或者有问题,也欢迎提 issue: https://github.com/jdjingdian/openvpn3_srv
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.