![如何在没有第三台计算机的情况下通过 NAT 和防火墙连接两台计算机](https://linux22.com/image/1325048/%E5%A6%82%E4%BD%95%E5%9C%A8%E6%B2%A1%E6%9C%89%E7%AC%AC%E4%B8%89%E5%8F%B0%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%9A%84%E6%83%85%E5%86%B5%E4%B8%8B%E9%80%9A%E8%BF%87%20NAT%20%E5%92%8C%E9%98%B2%E7%81%AB%E5%A2%99%E8%BF%9E%E6%8E%A5%E4%B8%A4%E5%8F%B0%E8%AE%A1%E7%AE%97%E6%9C%BA.png)
我正在尝试通过 ssh 进入我家里的 Linux 机器。我的家是宿舍式环境 - NAT 和防火墙,个人笔记本电脑运行 Arch Linux。我的工作是企业式 Windows 7 - NAT 和代理防火墙,没有管理员权限。
我可以连接两个运行 Team Viewer 便携式软件的设备。但是,这并不符合我的真正需求。我希望简单地通过 SSH 进入我家里的 Linux 机器,让我的 Linux 机器完全退出登录 - 当我不在家时,基本上就是无头的。
我已经阅读了有关隧道的资料,但如果我理解正确,我需要一台两台计算机都可以连接的第三方服务器。我没有这样的服务器,也不想为这样的东西付费。
有什么简单而安全的解决方案可以在工作时通过 SSH 连接我的笔记本电脑?有没有免费且安全的“第三台服务器”?我在 Google 上搜索了好几遍,但似乎越来越困惑了。
答案1
普纳特是一个开源工具,据说可以解决这个问题。它说:
pwnat 是一个允许 NAT 后面任意数量的客户端与单独的 NAT 后面的服务器进行通信的工具,不端口转发和不在任何路由器上设置 DMZ 以便直接相互通信。服务器不需要知道有关尝试连接的客户端的任何信息。
没有中间人,没有代理,没有第三方,不需要 UPnP/STUN/ICE,没有欺骗,也没有 DNS 技巧。
更重要的是,客户端可以连接到任何远程主机上的任何主机或端口,或者连接到服务器决定的固定主机和端口。
pwnat 建立了这种连接:
机器 A(IP:192.168.1.3)-> NAT A(IP:122.xxx)-> Internet -> NAT B(IP:59.xxx)-> 机器 B(192.168.2.10)
pwnat 仅适用于 Linux,但本文 PWNAT:Windows 编译版本包含Windows 版本. 另请参阅同一作者PWNAT:示例。
pwnat 使用的方法非常巧妙,但不能保证它适用于您的环境。
答案2
答案3
如果可以的话,最好的选择是设置端口转发,但如果您的校园有防火墙,而您自己无法进行任何端口转发,那么请使用此建议。
是的,有免费的第三台服务器,而且您已经在使用它了,TeamViewer。确保您已将 TeamViewer 安装为服务(或适用于 Linux 的任何等效服务,我只使用 Windows 版本)。然后在工作和家中安装 VPN 驱动程序。然后,您将能够使用 VPN 从工作地点进行连接,并且您的家用机器将具有 7.xxx IP 地址。然后,如果您想进入终端会话,请通过 VPN 链接运行 SSH。
安装 VPN 选项位于高级设置下。
这将为您可以进行的连接类型添加“VPN”选项。
答案4
您可以使用公共 XMPP/Tox 服务器作为“第三台服务器”。也就是说,有以下项目通托克斯和点对点链路(PPP over Any Transport),使用这些即时通讯协议作为传输层。
我尝试过支持 XMPP 的 PPPoAT,与 PWNAT 不同,这种机制确实对我来说有效。
要使用它,您需要在任何公共服务器上拥有两个 XMPP 帐户 - 一个用于您要登录的服务器,另一个用于您的客户端。pppoat
在服务器上启动后,然后在客户端上启动(两者都具有适当的配置参数),您可以立即开始连接,例如
ssh [email protected]
当然,它会比直接连接慢,并且速度很可能取决于您选择的 XMPP 服务器,但对于正常的控制台活动来说它已经足够了。
至于安全性,SSH 可以在完全不安全的网络中工作,因为它已经实现了自己的加密,所以当您使用 SSH 时,基于 XMPP 的连接是否安全实际上并不重要。