





















上篇成功让 mosh 走 UDP 洞,连接上了在 NAT 后边的主机。然而,很多有用的协议都是走 TCP 的,比如能传文件的 ssh、访问我的 MediaWiki 的 HTTP。TCP 洞难打,于是在想,OpenVPN 可以使用 UDP 协议,那么把双方用 OpenVPN 连起来,不是可以想用什么传输层的协议都可以了吗!于是,有了新的脚本。
与 mosh 相比,打洞部分主要的不同有:
在实验过程中也遇到了一些坑:
connect的 UDP socket 恢复到初始时可接收任意地址数据的状态。原本以为connect(('0.0.0.0', 0))可以的,结果客户端这边始终收不到服务端发送的 OpenVPN 配置信息。Wireshark 抓包看到内核收到数据后发了 ICMP Port Unreachable 错误之后才明白过来。mssfix 1400配置解决。(其实这个 OpenVPN man 手册里有写。)keepalive的警告,结果连接空闲几分钟之后,「洞」就失效了。加上keepalive 10 60解决。配置中没有加默认路由,所以连接上之后唯一的效果就是,两个主机分别多出了同一网段的两个 IP 地址,相互间可以进行 TCP 通信了~~
对了,客户端连接时需要一个包含 OpenVPN 证书信息的文件,其格式为:
<ca> # ca.crt 文件内容 </ca> <cert> # crt 文件内容(只需要 BEGIN 和 END 标记的那部分) </cert> <key> # key 文件内容 </key>
PS: 有这个想法后不久,发现 None 已经做过类似的事情了。不过脚本有点多,是使用第三方服务器而不是像我这样手工交换地址的。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。