![使用 VPN 时 SSH 挂起](https://linux22.com/image/1153581/%E4%BD%BF%E7%94%A8%20VPN%20%E6%97%B6%20SSH%20%E6%8C%82%E8%B5%B7.png)
我通过连接到大学 VPN 并使用 SSH 登录来连接到大学共享计算机设施。这在我使用 Cygwin 的 Windows 安装上没有问题。但是,在我的 Ubuntu 安装上,SSH 挂起了。
最初 VPN 根本无法访问互联网,但我通过dns=dnsmasq
从 /etc/NetworkManager/NetworkManager.conf 中删除解决了这个问题,但这并不能解决 SSH 错误。
另外提前警告一下,我是 Ubuntu 新手。
答案1
这听起来像是 DNS 的问题,更具体地说是与 VPN 一起使用时的 DNS 。使用NetworkManager 与 VPNdnsmasq
时存在一个已知问题,这将破坏 内的 DNS 解析。上游有dnsmasq
dnsmasq
承认但是也什么也没做解决这个问题。这个问题从 16.04 开始就存在了,而且似乎很快就会出现在他们的雷达上进行修复。我的猜测是他们根本不知道问题出在哪里。(LP 错误 #1588018,以及同一问题的许多其他错误)
解决办法是不是根本无法使用dnsmasq
,而是默认使用不同的 DNS 系统或 DNS 服务器集,通常是通过强制覆盖resolvconf
服务设置。
然而,这是一个重大的、不平凡的变化,可能会导致其他问题。因此,没有真实的目前可以解决这个问题。
警告:这是我针对此问题的解决方案,是一种非标准的、非平凡的 DNS 问题解决方案。使用时风险自负。
我的解决方法很痛苦,而且不简单。我安装并配置bind9
为转发 DNS 解析器,以便它将所有 DNS 查询转发到 Google DNS(8.8.8.8
和8.8.4.4
),然后一旦它工作正常,我就去编辑我的/etc/resolvconf/resolv.conf.d/head
文件以查询本地 DNS。请注意,我必须添加本地 DNS 绑定127.0.2.1
,为了使其正常工作,我必须在我的lo
适配器中滚动自定义 IP 范围,方法是将这些行添加到我的/etc/network/interfaces
文件(我包含了默认的lo
自动/环回声明以供参考):
auto lo
iface lo inet loopback
up ip -4 addr add 127.0.2.1/8 dev lo
down ip -4 addr del 127.0.2.1/8 dev lo
...并通过在文件夹bind9
中进行设置/etc/bind/named.conf.options
,以便现在位于选项配置块中:
listen-on { 127.0.2.1; };
当我在进行这些更改后重新启动系统时,系统开始默认使用我的本地bind9
解析器。
然而,这会阻止具有 Intranet 和内部 DNS 解析以及内部域的 VPN 正确解析;这引发了其他问题,但我(作为高级用户和系统管理员)可以解决这些问题。
答案2
为了提供有意义的答案,我们需要更多信息。我假设 VPN 是 Cisco Openconnect VPN。对吗?如果没有更多信息,我猜你的问题出在 VPN 的设置上。
如果是这样,思科有一个专有客户端,效果很好,但不是必需的。你的大学应该提供下载链接和安装该客户端的说明。
如果您更喜欢开源解决方案,有一个名为 openconnect 的程序。其使用说明如下这里。
尝试以下选项之一。如果您不关心开源,老实说,Cisco 客户端最容易使用。如果您关心,那么请尝试 openconnect。
祝你好运!