OpenVPN连接后自动替换DNS服务器

因为国内的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当中。

文章分类 Shell, Unix/Linux 标签: , , , , ,
4 comments on “OpenVPN连接后自动替换DNS服务器
  1. icyomik说道:

    这样都行~

  2. Felix Yan说道:

    有个问题, 我这里vpndown脚本总是权限不足 因为运行过程中降权到普通用户了

  3. Felix Yan说道:

    @PT:
    设置user/group之后 连接时是su的权限 连接稳定自动降权到nouser/nogroup, 然后down掉的时候跑vpndown就惨剧了

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*