连接到VPN时持续的SSH连接

我在内部网上有一台Linux机器,我只能通过SSH访问,但是这台机器需要使用openconnect连接到一个VPN,但是当我这样做时,我从SSH断开连接,因为内部networking的IP不再有效。

我可以使用分配的IP从VPN内部重新连接,但每次VPN连接时都会更改IP,我无法控制其他任何networking。

有没有办法让SSH连接保持连接到VPN? 谢谢。


openconnect需要一个脚本来configuration路由的–script参数,没有它的话连接成功,但是没有名字被parsing并且内部网的IP保持有效。

我正在使用Ubuntu的默认/ etc / vpnc / vpnc脚本( 在这里粘贴 )我很好的shell脚本,但我知道很less关于networking,如果我不得不修改,我需要一些参考什么或如何改变它。

有没有办法让SSH连接保持连接到VPN?

不可以。当您连接到VPN时,系统的路由会发生显着变化,这会中断所有已build立的TCP套接字。

您应该考虑在您的ssh会话中使用terminal多路复用器(如屏幕或tmux) – 这样您就可以拥有一个可以重新连接的持久性shell。

您可能需要查看iptables ,它处理内核中的数据包过滤。 我从另一个方向使用openconnect ,默认设置是删除对标准接口的访问,以支持新创build的VPN接口。 首先要做的是找出VPN连接正在创build什么路由。 然后你可以编写一个脚本来处理网关和路由,然后刷新iptables并清除vpn“链”(在iptables中使用的术语)。 我有一个脚本,看起来像这样:

 IPADDR=NN.NN.NN.N DESIREDNET1=MM.MM.MM.MM GATEWAY_LINE=$(netstat -rn | grep ${IPADDR}) GATEWAY=$(echo "$GATEWAY_LINE" | awk '{print $2}') GATEWAY_DEV=gw if [ "$GATEWAY" = "*" ]; then GATEWAY=$(echo "$GATEWAY_LINE" | awk '{print $8}') GATEWAY_DEV='' fi # add custom routes route add -net $DESIREDNET1 netmask 255.255.0.0 dev cscotun0 ... # reset the default route route del default route add default $GATEWAY_DEV $GATEWAY # flush iptables to clear the ciscovpn chain iptables --flush iptables --delete-chain # Add out own nameservers back if [ -f /etc/resolv.conf.vpnbackup ] then cat /etc/resolf.conf /etc/resolv.conf.vpnbackup > /etc/resolv.conf echo "nameserver $GATEWAY" >> /etc/resolv.conf fi 

您需要将/etc/resolv.conf复制到/etc/resolf.conf同时closuresVPN以便能够添加“正常”设置。

祝你好运。

我认为原因是当你的linux服务器build立VPN连接时,它通过远程networking中的网关路由所有通信量。 如果您configuration您的VPN客户端只使用远程网关与远程networking通信,您可以使您的SSH活着。

我不使用openconnect,但是在openvpn中,您可以use this connection only for resources on its network打勾use this connection only for resources on its network在VPNconfiguration中的use this connection only for resources on its network

解决此问题的方法是连接到terminal连接所涉及的两台计算机上的相同VPN服务器。

这个对我有用。

一般答案

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

请注意,根据openconnect官方文档:

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

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


更好的scheme

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

ocproxy是基于lwIP的用于OpenConnect的用户级SOCKS和端口转发代理。 当使用ocproxy时,OpenConnect只处理用户专门从代理服务器上请求的networking活动,所以VPN接口不再“劫持”主机上的所有networking通信。

示例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服务器地址