因为国内的DNS服务器存在污染问题,用VPN后都不愿意用国内的DNS服务器;但是如果常用8.8.8.8等,又导致访问国内的cdn时候返回线路,导致访问缓慢;这个问题不好解决,相对好点的方法在连接vpn前使用isp提供的dns,而连接后替换成外国的dns。
但是OpenVPN的–dhcp-option配置,对非Win32的客户端是无效的,只能考虑执行自定义脚本来完成:
vpnup.sh
1 2 3 4 5 6 7 8 9 | #!/bin/bash RESOLVE=/etc/resolv.conf FOREIGNDNS1='4.2.2.1' FOREIGNDNS2='4.2.2.2' DNSMARK='_MK' sed "s/^nameserver/#$DNSMARK nameserver/" -i $RESOLVE echo "nameserver $FOREIGNDNS1" >> $RESOLVE echo "nameserver $FOREIGNDNS2" >> $RESOLVE |
vpndown.sh
1 2 3 4 | #!/bin/bash RESOLVE=/etc/resolv.conf DNSMARK='_MK' sed -e '/^nameserver/d' -e "s/^#$DNSMARK //" -i $RESOLVE |
很简单,就是使用sed来完成/etc/resolv.conf
文件的内容替换。
实际上我还使用了chnroutes的脚本生成的国内路由表,上面两段只是分别贴到其中的vpnup/vpndown当中。
这样都行~
有个问题, 我这里vpndown脚本总是权限不足 因为运行过程中降权到普通用户了
@Felix Yan: 为神马会降权呢?你的脚本权限没设好吧?大不了在脚本里面sudo..
@PT:
设置user/group之后 连接时是su的权限 连接稳定自动降权到nouser/nogroup, 然后down掉的时候跑vpndown就惨剧了