彻底解决vpn分流问题

先说一点背景。我在家里连自己办公室电脑得要通过学校的vpn。我自己写了一个小script调用vpnc能搞定连接。vpnc这玩意不管dns,所以我得加上学校的内部dns server才能解析校内机器的域名。

从前几天起我就发现这个组合不好使了。仔细研究了一下原来问题出在这个地方:我用的主dns server是opendns (用它还得拜回国的时候领教了流氓中国电信搞的强制DNS劫持所赐,这个说起来我就气不打一处出来,回头有时间再专门写个故事),它当然解析不了我们学校内部的域名,所以正常情况下fall back就到我设置的第二个dns server,也就是校内的dns server。但从前些时候开始,opendns就把所有它找不到的地址都解析到它自家的搜索引擎上去了。这样一来下面那个学校的dns server就永无用武之地了。

解决办法:实现internet和校内网的彻底分流。需要使用的工具如下:

route, resolvconf, dnsmasq或者bind

原理:在自己机器上装一个dns server,让它根据域名来判断用哪个外部dns服务器。同样的原理,通过route来实现网络分流,该走vpn管道的才走,一般的网络浏览就用不着再去学校绕个大圈了。

攻略:

  1. 安装dnsmasq或者bind。dnsmasq比较简单,就拿这个来说事吧。装完之后配置一下:

    /etc/dnsmasq
    
    no-resolv # to disable /etc/resolv.conf.  
    server=/university.edu/123.456.789 # university dns server 
    server=208.67.222.222 # opendns
    
  2. 下一步,通知自己电脑,让它使用自己的dns server。如果你用Ubuntu的图形化界面,那就通过图形化界面(其实是一个叫做network-manager的gnome配件)配置好了。如果你和我一样用openbox之类的轻型桌面没有这个工具,那么你可以直接改配置文件:

    /etc/resolvconf/resolv.conf.d/base
    search university.edu nameserver 127.0.0.1
    

    这里要说明一下,你们去google怎么改Linux的dns配置,保证出来的是让你去改/etc/resolv.conf. 这个方法可以说已经过时了。因为现在电脑和以前不一样,大部分时候都不是静态IP连接上网。所以,很多神仙们都能去改那个配置文件。现代一点的办法是装一个叫做resolvconf的包,通过配置它来间接配置/etc/resolv.conf。<li> 关于route。这个就在那个vpnc的script里头实现了(你自己得去改改你的gateway和一些参数):

#!/bin/bash

function connect-to-university() { 
vpnc university && \ 
route add default gw 192.168.1.1 && \
route add -net 172.0.0.0 netmask 255.0.0.0 dev tun0 && \ 
route add -net 123.456.0.0 netmask 255.255.0.0 dev tun0

if [ "$(pidof vpnc)" ]; then
    echo "vpnc already running. I'll simply pass."
    exit 0
else connect-to-university && exit 0
fi

至于怎么配置vpnc,你可以google之,那个不难。

Author: qiuxing

Date: 2009-09-26 22:26:53 EDT

HTML generated by org-mode 6.30c in emacs 23

,

  1. 发表评论

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s

%d 博主赞过: