我有一台 Linux 机器,我希望能够通过 SSH、FTP、HTTP 等远程访问它。我通过 No-IP.com 注册了动态 DNS,但这还不够,因为我位于大学校园网络中,位于 NAT 后面,并且无权访问路由器来设置端口转发。我不知道校园路由器是否支持UPnP或NAT-PMP,但我对此表示怀疑。
无论如何,我想知道是否有办法使用 VPN 来解决这个问题。例如,我知道如果我在两台机器上都安装了 VPN 软件,VPN 将允许我从我的笔记本电脑访问我的 Linux 盒子。但我希望能够从任何计算机访问我的 Linux 盒子,而无需安装软件。或者至少能够以这种方式访问 HTTP 部分。虽然我知道许多 VPN 服务提供用于文件传输等的 Web 界面,但我宁愿能够使用常规 FTP 和 SSH 客户端软件访问我的 Linux 盒子。
不管怎样,这是你可以用 VPN 做的事情吗?或者有没有办法以某种方式将 VPN 与动态 DNS 链接起来?我查看了 Hamachi VPN 的网站,但它以非技术术语描述了所有功能,因此我无法弄清楚这些问题,我希望在创建帐户之前了解一下。
答案1
从表面上看,您的校园防火墙不允许从校园外部向您的计算机发起任何连接。因此,为了连接到您的计算机,您必须从内部启动连接。
因此,您必须在宿舍计算机 D 和校园外的某些外部计算机 E 之间建立某种连接。然后,当您想从某个客户端 C 连接到宿舍计算机时,请改为连接到 E 并设置 E 以便它中继连接。
对于 D→E 连接,您可以使用 VPN。这需要 D 和 E 上的根级访问。VPN 在 D 和 E 之间提供 IP 连接,因此从 C 您将能够访问 D 上 E 愿意在 C 和 D 之间路由的任何网络服务。
更轻量级的解决方案是从 D 和 E 建立 SSH 连接,只需要双方都有 shell 帐户(当然,E 必须允许 SSH)。从 D 开始,运行
ssh -R 2242:localhost:22 E sleep 999999999
这将创建从 E 到 D 的端口转发:在端口 2242 上与 E 建立的任何连接都会在端口 22 上中继到 D。端口 22 是 ssh 端口,因此当您运行 时ssh -p 2242 E
,这会将您连接到 D,您可以在其中登录。要自动执行此操作,您可以定义一个别名,~/.ssh/config
如下所示(PuTTY 有类似的设置,请参阅其手册):
Host dorm
UserName bob
HostName E
Port 2242
您可以通过这种方式路由多个端口。例如,要将 E 上的端口 8042 也中继到 D 上的端口 80:
ssh -R 2242:localhost:22 -R 8042:localhost:80 E sleep 999999999
每次在 D 上启动网络连接时,您都需要重新运行该命令。
答案2
如果您的计算机不在 NAT 后面(即可以从互联网自由访问),您可以ssh
进入它从校园内的计算机,并通过该 ssh 会话将任意远程端口转发到适当的本地(校园计算机上)端口 - OpenSSH 的选项是-R
。然后,您将连接到非 NAT 计算机上的转发端口,并且来自校园计算机的 ssh 将通过校园 NAT 传输数据。有点笨拙,但确实有效。
答案3
VPN 可以解决这个问题,是的。
具体来说,您需要一个允许端口转发的 VPN。我只有经验穆尔瓦德他们这样做,但我确信许多其他 VPN 也提供这种服务。
对于大多数服务,您可能无法期望转发任意端口(例如 ssh 的 22),因此您必须使用一些“随机”高编号端口。但为此配置 ssh/ftp 应该非常简单。