在linux上使用vpnc客户端来连接ipsecvpn会出现VPN连接之后无法访问本地其他网段的服务器和互联网,这个问题是因为ipsecvpn连接之后会将默认路由指向VPN客户端的虚拟网卡,导致所有流量均从VPN隧道发出,所以无法正常访问本地网络和互联网。
问题解决思路:将需要通过VPN隧道访问的IP资源配置明细路由,将默认路由重新指向本地物理网卡,本文中介绍的步骤已ubuntu kylin操作系统为例。
步骤:
1.在没有使用vpnc客户端登录IPSECVPN之前,先查看本地正常上网的路由配置,确认记录好网关地址及网卡信息,使用route命令查看路由表得到下面的结果,其中default为正常的默认路由,网关为172.16.31.254,网卡为ens33。
root@root-virtual-machine:~$ route 内核 IP 路由表 目标 网关 子网掩码 标志 跃点 引用 使用 接口 default 172.16.31.254 0.0.0.0 UG 100 0 0 ens33 //正常上网的网关地址和网卡 link-local * 255.255.0.0 U 1000 0 0 ens33 172.16.31.0 * 255.255.255.0 U 100 0 0 ens33
2.使用vpnc客户端登录ipsecvpn,再次使用route查看路由,这时我们可以看到第4行的default默认路由已经指向了tun0的VPN虚拟网卡,本地网络和互联网已经无法正常访问,第5行的原默认路由因为优先级低于第4行其实是不生效的。
root@root-virtual-machine:~$ route 内核 IP 路由表 目标 网关 子网掩码 标志 跃点 引用 使用 接口 default * 0.0.0.0 U 0 0 0 tun0 //默认路由指向虚拟隧道 default 172.16.31.254 0.0.0.0 UG 100 0 0 ens33 link-local * 255.255.0.0 U 1000 0 0 ens33 172.16.31.0 * 255.255.255.0 U 100 0 0 ens33 172.17.68.0 * 255.255.255.0 U 0 0 0 tun0 172.17.68.0 * 255.255.255.0 U 1 0 0 tun0
3.按照解决思路我们增加一条需要通过VPN隧道访问ip地址的明细路由,假设这个ip为10.10.10.100,并将VPNC增加到虚拟网卡的默认路由删除,配置命令如下。
sudo route add -host 10.10.10.100 dev tun0 //增加VPN访问ip的明细路由 sudo route del default dev tun0 //删除到虚拟网卡的默认路由 在部分版本的linux操作系统vpnc客户端修改默认路由时会将原正常上网默认路由删除,这时候可以在以上命令的基础上添加一条默认路由。 sudo route add default gw 172.16.31.254 dev ens33 //增加一条默认路由指向本地正常上网的网管
4.再次使用route命令查看路由表,这时候默认路由已经重新指向本地网络的物理网卡及网关,访问VPN资源ip则通过虚拟网卡tun0发送,到这里就已经可以正常访问互联网并保持VPN资源可访问了。
root@root-virtual-machine:~$ route 内核 IP 路由表 目标 网关 子网掩码 标志 跃点 引用 使用 接口 default 172.16.31.254 0.0.0.0 UG 100 0 0 ens33 //原来正常上网的默认路由指向网关及网卡 link-local * 255.255.0.0 U 1000 0 0 ens33 172.16.11.0 * 255.255.255.0 U 100 0 0 ens33 10.10.10.100 * 255.255.255.255 UH 0 0 0 tun0 //需要通过VPN访问的资源单独通过虚拟网卡tun0发送 172.17.68.0 * 255.255.255.0 U 0 0 0 tun0 172.17.68.0 * 255.255.255.0 U 1 0 0 tun0