我通过 SSH 从 Linux Mint 21.2 PC 连接到 Raspberry Pi 4b。但是,当连接到 ProtonVPN CLI 时,我无法通过 SSH 连接,收到错误消息ssh: Could not resolve hostname raspberrypi: Name or service not known
如何在连接 VPN 的同时通过 SSH 进行连接?
另外,我该如何做相反的事情。我想在 Pi 上安装 ProtonVPN然后仍然可以通过 SSH 连接。
谢谢!
答案1
您需要两台主机之间的静态路由以及避免主机名的全局 DNS 查找的方法。
您看到的直接错误 ( Could not resolve hostname rapsberrypi
) 来自 Proton 的 DNS 服务器,因为它们不知道您的 Raspberry Pi 的 IP 地址 - 并且不应该知道,它不是完全限定的域名 (FQDN)。您可以通过尝试通过 SSH 连接到 Raspberry Pi 的 IP 地址来绕过该错误,但这可能会产生新错误 ( No route to host
),因为它可能有一个私有 IP 地址 (RFC 1918)。在这种情况下,为了在两台主机之间建立网络路由,您需要通过定义从 SSH 客户端到 SSH 服务器的静态路由来确保不使用 VPN 连接。
如果没有定义任何静态路由,所有网络流量都将使用默认路由。当您建立 VPN 连接时,您的默认路由将从本地路由器更新到 VPN 路由器。此外,VPN 连接正在更新用于查找主机名的 DNS 服务器。因此,在建立 VPN 连接后,通常使用本地路由器上的 DNS 服务器和通过本地路由器的默认路由的连接将变为使用 VPN DNS 服务器和通过 VPN 路由器的默认路由的连接。
但是,您可以通过为该 IP 地址定义静态路由来告诉本地主机在连接到特定 IP 地址时使用哪个路由器。因此,如果您在 Linux Mint 主机上定义静态路由,为 Raspberry Pi 的 IP 地址指定本地路由器,那么您可以通过 SSH 连接到 Raspberry Pi 的 IP 地址,并且连接将保留在本地网络上,而不是使用VPN。
如果您使用 OpenVPN 连接到 Proton,您可以使用如下选项为特定主机配置静态路由(请务必替换192.168.1.101
为 Raspberry Pi 的 IP):
route 192.168.1.101 255.255.255.255 net_gateway
或者,您可以使用此选项为整个本地网络配置静态路由(假设您的本地网络是192.168.1.0/24
):
route 192.168.1.0 255.255.255.0 net_gateway
route
此配置选项是具有特殊值的命令的包装器net_gateway
该值引用建立 VPN 连接之前存在的默认路由,记录在这里。
如果您直接连接到 IP 地址,则该静态路由仅允许 SSH 连接(或任何其他连接)。为了使用友好的名称进行连接,我们需要将该名称转换为 IP 地址,而不使用 VPN。执行此操作的一个简单方法是在 SSH 客户端配置 ( ) 中使用主机条目,~/.ssh/config
以便名称查找根本不需要 DNS:
Host raspberrypi
HostName 192.168.1.101
使用这种方法,如果/当 Raspberry Pi 上的 IP 地址发生更改时,您将需要更新配置文件,因此您可能需要在本地路由器上配置 DHCP 服务器以始终为其提供相同的 IP 地址。
另一种方法可能是安装本地 DNS 服务器,例如dnsmasq
在 Linux Mint 主机上安装,以智能地将一些 DNS 查询定向到本地路由器,同时将其余查询发送到 VPN DNS 服务器;但运行本地 DNS 服务器来支持单个 SSH 连接可能会导致鲨鱼袭击。