连接到 VPN 时持久的 SSH 连接

Sam*_*us_ 7 networking linux vpn ssh

我在 Intranet 上有一台 Linux 机器,我只能通过 SSH 访问,这台机器需要使用 openconnect 连接到 VPN,但是当我这样做时,由于 Intranet 的 IP 不再有效,我与 SSH 断开了连接。

我可以使用它分配的 IP 从 VPN 内重新连接到它,但是每次连接 VPN 时 IP 都会更改,我无法控制任何其他网络,只有这台机器。

有没有办法在连接到 VPN 时保持 SSH 连接有效?谢谢。


openconnect 需要一个 --script 参数,它需要一个脚本来配置路由,没有它连接成功但没有解析名称并且内网的 IP 保持有效。

我目前正在使用 Ubuntu 的默认 /etc/vpnc/vpnc-script(粘贴在这里)我很擅长 shell 脚本,但我对网络知之甚少,如果我必须修改它,我需要一些关于什么或如何的参考改变它。

EEA*_*EAA 5

有没有办法在连接 VPN 时保持 SSH 连接处于活动状态?

不会。当您连接到 VPN 时,该系统的路由会发生巨大变化,这会破坏所有已建立的 TCP 套接字。

您应该考虑在 ssh 会话中使用终端多路复用器(例如screentmux) ——这样您就可以拥有一个可以重新连接的持久 shell。


sla*_*bin 5

一般回答

您应该使用--script--script-tun选项openconnect并提供自定义 vpnc-script。一个好的起点是vpnc-script已经与您一起分发的openconnect,例如在 OSX(HomeBrewed openconnect) 上它位于/usr/local/etc/vpnc-script

注意,根据openconnect官方文档:

OpenConnect处理与VPN服务器的通信;它知道如何在其运行的所有各种操作系统上配置网络路由和名称服务。

为了设置路由和名称服务,它使用通常称为 vpnc-script 的外部脚本。


更好的解决方案

已经有一个名为 ocproxy 的好项目,充当 的代理服务器openconnect,因此名称为 ocproxy(O pen Connect Proxy)。

ocproxy是基于lwIP的OpenConnect的用户级SOCKS和端口转发代理。使用 ocproxy 时,OpenConnect 仅处理用户专门向代理请求的网络活动,因此 VPN 接口不再“劫持”主机上的所有网络流量。

OpenConnect 命令示例:

echo $1 | sudo openconnect -u $2 -d --timestamp -v --passwd-on-stdin --script-tun --script "ocproxy -D $3 -v" $4

代替:

  • $1包含:OpenConnect 密码
  • $2其中:OpenConnect 用户名
  • $3其中:所需的 Socks5 代理端口
  • $4其中:OpenConnect 服务器地址