高三很忙,好久没写东西了。不过也快熬出头了。今天就写点儿啥吧。
VPN是个好东西,翻那个啥效果不错,比goagent之类的要稳定。但如果不配置路由的话,VPN就会成为默认网关,包办所有对外连接。这反而会导致访问国内网站速度变慢,而且也挺浪费流量的。我搜了一下,找到了chnroutes这个工具:
如果使用openvpn之类的命令连接VPN的话,按照其readme配置即可。但我还是偏好GUI,想用NetworkManager来管理连接。NetworkManager的VPN连接程序是自带的,并不使用命令行工具的配置文件。
Google到了这篇文章:《Ubuntu 9.10下使用Network-manager 配置openvpn 》。
简要转述 chnroutes 使用方法:
git clone git://github.com/GutenYe/chnroutes.git
python2 chnroutes.py
开头的 “
OLDGW=$(...” 那一行删掉,改为:OLDGW=$(ip route show | grep '^[^d].*proto static' | grep -v 'dev\s*tun' | awk 'NR==1' | sed -e 's/.*via \([^ ]*\) .*/\1/')
Arch 的 NetworkManager 没 Ubuntu 那个名为 01ifupdown 的 dispatcher 。简单研究一下,发现dispatcher也不是啥复杂的玩意儿。要点如下:
照葫芦画瓢写了个(请保存到 /etc/NetworkManager/dispatcher.d/10chnroutes):
#!/bin/sh -e
case "$2" in
vpn-up)
exec /etc/openvpn/vpn-up.sh
;;
vpn-down)
exit 0
;;
esac
exit 0
额,弱爆了是吧……别的发行版应该也能用。
按说vpn-down时应该执行一下vpn-down.sh的,但我发现加上了反而会导致一个(无伤大雅的)错误,而且不执行也没啥影响,VPN断开后路由表确实自动恢复了。这方面我不太懂,反正事实就是这样。
到这里,NetworkManager 连接 VPN 时就能自动配置路由了。在VPN连接后,找个国内看IP的网站测试看看吧。
另外,对 Ubuntu 用户的附注。那篇参考文章提到的 01ifupdown,在最新的Ubuntu里变复杂了,要修改成下面这样:
up|vpn-up)
export MODE="start"
export PHASE="post-up"
/etc/openvpn/vpn-up.sh
exec run-parts /etc/network/if-up.d
;;