VPN下如何使用SSH连接(greenVPN)
环境:ubunut14.04
一直用greenVPN做代理,但是有一个问题,就是green把SSH给封了,导致连接VPN的时候,SSH无法连接远程服务器,那可如何是好,恐怕只有一条路了,就是让这些IP绕过VPN。
绕之前我们先route
一下,看看使用VPN前后的网络变化:
before
Destination | Gateway | Genmask | Flags | Metric | Ref | Use | Iface |
---|---|---|---|---|---|---|---|
default | localhost | 0.0.0.0 | UG | 0 | 0 | 0 | wlan0 |
192.168.1.0 | * | 255.255.255.0 | U | 9 | 0 | 0 | wlan0 |
连接VPN前默认路由均由wlan0接管
after
Destination | Gateway | Genmask | Flags | Metric | Ref | Use | Iface |
---|---|---|---|---|---|---|---|
default | * | 0.0.0.0 | U | 0 | 0 | 0 | ppp0 |
10.0.6.4 | * | 255.255.255.255 | UH | 0 | 0 | 0 | ppp0 |
119.81.158.84-s | 192.168.1.1 | 255.255.255.255 | UGH | 0 | 0 | 0 | wlan0 |
119.81.158.84-s | 192.168.1.1 | 255.255.255.255 | UGH | 0 | 0 | 0 | wlan0 |
192.168.1.0 | * | 255.255.255.0 | U | 9 | 0 | 0 | wlan0 |
连接VPN后默认路由均由ppp0(VPN网络)接管,但是指定规则静态路由不走VPN,且路由规则里静态路由优先级高于默认路由
所以,我们可以通过设置一条静态路由,来使SSH连接的IP通过指定网络转发:
sudo route add -net *.*.*.* netmask 255.255.255.255 gw 192.168.1.1 dev wlan0
dev wlan 0
可以不写,程序会自动匹配正在是用的非VPN网路
上面的路由规则只是临时生效,重启电脑或者重启网络,甚至断开VPN都会被清除。当然你可以说通过配置永久路有的方式,来避免重启电脑造成的路由配置丢失(具体参考搜索引擎),但是我在实际操作中却发现,当断开VPN时,会刷新路由,依然会造成配置的永久路由丢失。
于是,我就采取了另一种方式,就是监控VPN连接,一旦VPN连接,即触发如下代码,将代码置于/etc/ppp/ip-up.d/setStaticRoute
内,我的文件名是 setStaticRoute
,自己随便取:1
2
3
4
5
6#!/bin/sh
if [ "$IFNAME" = "ppp0" ]
then
route add -net *.*.*.* netmask 255.255.255.255 gw 192.168.1.1
route add -net *.*.*.* netmask 255.255.255.255 gw 192.168.1.1
fi
最后路由结果是这样(*.*.*.*
部分是SSH要连接的服务器地址):
Destination | Gateway | Genmask | Flags | Metric | Ref | Use | Iface |
---|---|---|---|---|---|---|---|
default | * | 0.0.0.0 | U | 0 | 0 | 0 | ppp0 |
10.0.6.4 | * | 255.255.255.255 | UH | 0 | 0 | 0 | ppp0 |
*.*.*.* | 192.168.1.1 | 255.255.255.255 | UGH | 0 | 0 | 0 | wlan0 |
119.81.158.84-s | 192.168.1.1 | 255.255.255.255 | UGH | 0 | 0 | 0 | wlan0 |
119.81.158.84-s | 192.168.1.1 | 255.255.255.255 | UGH | 0 | 0 | 0 | wlan0 |
*.*.*.* | 192.168.1.1 | 255.255.255.255 | UGH | 0 | 0 | 0 | wlan0 |
192.168.1.0 | * | 255.255.255.0 | U | 9 | 0 | 0 | wlan0 |