Ubuntu 9.10下使用Network-manager 配置openvpn
简单步骤安装openvpn
- 重新安装最新版本的network-manager,默认版本有bug,无法使用VPN
- 默认情况下vpn选项卡是无效的,所以要安装network-manager-openvpn
- 配置Openvpn,将配置好的client.conf文件在vpn设置界面使用导入的方式导入
到这里已经可以通过vpn上网了。
但是,我希望能够访问国外网站时才使用vpn,访问国内网站时还是使用原始的路由,所以还需要配置路由表。
Google了一下,发现了这个项目:http://code.google.com/p/chnroutes/,
按照说明进行配置,发现network-manager没有地方自动增加路由,配置的conf文件导入后完全没有作用。
于是想是否可以在连接成功后,手动修改路由表,经过试用成功。
安装提示:
- 下载 http://chnroutes.googlecode.com/files/chnroutes_ovpn_linux
- 从终端进入下载目录, 执行python chnroutes_ovpn_linux, 执行完毕之后同一目录下将生成两个新文件'vpnup'和'vpndown'
- 在终端里运行命令 chmod a+x vpnup vpndown 把这两个文件设置为可执行
- 在vpn连接前执行./vpnup ,
- 然后连接vpn,发现已经能正常访问国外的网站了
- 断开连接,执行vpndown恢复路由数据
可是,每次都要手动设置还是麻烦,有没有办法能在连接后自动执行脚本呢?
继续Google,试了n多方法,就是不行。
使用Network-manager用起来比较方便,但却没有了Openvpn的配置文件,所以一些在Openvpn里可用的技巧都无效了。
没法子,自己研究吧!
查看日志,发现Network-manager每次创建完连接和断开连接都会调用 /etc/NetworkManager/dispatcher.d/01ifupdown 文件,看来有戏,看了下脚本,貌似连接成功后会调用/etc/network/if-post-down.d目录下的脚本,而这个目录下正好又一个openvpn文件,修改了一下,加入vpnup,重新创建连接,发现没有作用?
怎么回事,继续研究01ifupdown,结合日志,发现当openvpn连接时,发生的action名字分别是vpn-up和vpn-down,而脚本里没有处理这两种状态,哦,这下,修改01ifupdown就行了,在case语句中加入
vpn-up) exec /root/config/openvpn/vpnup ;; vpn-down) exec /root/config/openvpn/vpndown ;;
继续连接,查看路由表,发现脚本是执行了,但结果把所有国内地址都设置成了使用vpn来路由,查看vpnup,发现问题出在执行时间,vpn-up事件是在连接建立后触发的,而vpnup脚本需要在连接建立前执行。
不过问题不大,将
OLDGW=`ip route show | grep '^default' | sed -e 's/default via \([^ ]*\).*/\1/'`
修改为
OLDGW=`ip route show | grep '^[^d].*proto static'|sed -e 's/.*via \([^ ]*\) .*/\1/'`
OK,问题解决了,重新启动openvpn,上网,浏览IP138.com发现显示地址为中国本地,访问twitter.com,完全没有问题。呵呵!折腾了好半天!