resolv.conf的疑惑

包含网卡/无线网的网络问题和ADSL/校园网/宽带拨号支持及代理/共享等网络使用问题
回复
rikhtdss
帖子: 115
注册时间: 2006-09-08 18:57
联系:

resolv.conf的疑惑

#1

帖子 rikhtdss »

我的网络环境是电信ADSL开路由。很久以前就用IPV6爬墙了,以前用gogoc,速度太慢,现在用着he的隧道。我并没有按照大多数人的做法修改hosts,主要是一些IP经常变动,不经常更新的话会有一些网站打不开,另一方面,我总觉得靠人工收集的方式,可能不太全面。我是直接把IPV6的DNS服务器写在resolv.conf里面,然后再sudo chattr +i /etc/resolv.conf,防止networking manager修改该文件。在修改该文件的过程中,我发现里面的DNS服务器有优先级的区别,写在最前面的地址优先级最高,所以,为了使用DNS服务器优先返回IPV6地址,需要把支持IPV6的DNS写在前面,比如:

nameserver 2001:470:20::2
nameserver 8.8.8.8

以前我这样写没有一点问题,不过现在却不行了。原因是he的隧道需要客户端的IPV4地址进行配置,因为是ADSL,所以,路由器每一次断电重启后得到的IPV4地址都会变,解决的办法是用一个脚本取得本机的IPV4地址,然后再通过一个URL(https://ipv4.tunnelbroker.net/ipv4_end.php)提交到he的服务器,这样就能成功连上了(我把这个脚本丢到/etc/network/if-up.d/里面,以便在开机的时候自动运行)。不过在成功连上IPV6之前至少需要向DNS服务器提交一次查询,解析出ipv4.tunnelbroker.net这个域名的IPV4地址。
在以前,我象上面那样写resolv.conf是没问题的,一开始的时候,没有连上IPV6时,2001:470:20::2这个DNS不能用,但是系统会通过后面的8.8.8.8解析ipv4.tunnelbroker.net,然后提交变更后的客户端IPV4地址,连上IPV6隧道后,写在resolv.conf前面的2001:470:20::2就起作用了,它会优先返回待查询域名的IPV6地址,这样就不用改hosts了。

不过在重装系统后,我发现一个莫名其妙的问题:写在resolv.conf里的DNS服务器,只有第一个起作用,后面的根本就不起作用。后果就是,在刚开始开机的时候,eth0激活,ipv6脚本运行,它会向https://ipv4.tunnelbroker.net/ipv4_end.php提交客户端当前的IP地址,此时IPV6隧道还没有建立,resolv.conf中的2001:470:20::2这个DNS服务器是访问不了的,问题就出在,这时候系统不会自动使用第二个DNS服务器时行查询,脚本运行失败。开机后所有网站打不开,但是外网IP能ping通,可见resolv.conf中的第二个DNS服务器:8.8.8.8压根就没起作用。

希望达人能详细讲讲resolv.conf中的多个DNS服务器是怎么起作用的。
rikhtdss
帖子: 115
注册时间: 2006-09-08 18:57
联系:

Re: resolv.conf的疑惑

#2

帖子 rikhtdss »

这是建立隧道的脚本

代码: 全选

#!/bin/sh
USER_ID='填入User ID'
TUNNEL_ID='填入Tunnel ID'
PASS='填入密码'
#将密码转换成MD5值
PASS_MD5=$(echo -n $PASS | md5sum | cut -f1 -d ' ')
IPV4_SERVER='填入Server IPv4 Address'
IPV6_SERVER='填入Server IPv6 Address'
URL='https://ipv4.tunnelbroker.net/ipv4_end.php'
#获取外网IP
IPV4_WAN=$(curl ifconfig.me/ip)
#内网IP
IPv4_LAN='填入你的内网IP'
IPV6_LOCAL='填入Client IPv6 Address'
#等待15秒,以完成ADSL拨号
sleep 15
wget -nv -4 --spider --no-check-certificate "${URL}?ip=$IPV4_WAN&pass=${PASS_MD5}&apikey=${USER_ID}&tid=${TUNNEL_ID}"
#这是he.net网站给出的配置命令
modprobe ipv6
ip tunnel add he-ipv6 mode sit remote $IPV4_SERVER local $IPV4_LAN ttl 255
ip link set he-ipv6 up
ip addr add $IPV6_LOCAL/64 dev he-ipv6
ip route add ::/0 dev he-ipv6
ip -f inet6 addr
exit
rikhtdss
帖子: 115
注册时间: 2006-09-08 18:57
联系:

Re: resolv.conf的疑惑

#3

帖子 rikhtdss »

好怀念以前在YouTube上看视频的日子,he.net的隧道,用香港的服务器,比国内看优酷还要快。装一个firefox插件,想下载就下载。现在即便是连上隧道,Firefox也打不开YouTube了(Konqueror可以打开页面,但是放不了视频),不知道是he.net抽疯,还是firefox抽疯,还是GFW发功。
rikhtdss
帖子: 115
注册时间: 2006-09-08 18:57
联系:

Re: resolv.conf的疑惑

#4

帖子 rikhtdss »

优化 resolv.conf

2010年05月5日 | 标签: dns | 作者:vpsee

DNS lookup 在把域名解析成 IP 过程中耽误了不少时间,尤其是访问比较复杂的网站的时候,比如某个页面包含多个 url,一次请求需要做多次 DNS 解析,并且从用户浏览器到 DNS server,以及 DNS server 和 DNS server 之间都会产生延迟或有可能发生的错误,Google 意识到了这点,作为 Google 雄心勃勃 make the web faster 计划的一部分,Google 去年年底发布了自己的 Google Public DNS,对于一些在我们的 VPS 上使用 vpn 浏览网页的用户,在自己 VPS 里面加入 Google Public DNS 可以加快访问网站的速度(虽然作为用户来说速度差异感觉不明显)。打开 Linux 的 inlcude/resolv.h 文件可以发现里面定义了可以追踪的 DNS server 数目:

$ vi /usr/include/resolv.h

/*
* Global defines and variables for resolver stub.
*/
# define MAXNS 3 /* max # name servers we'll track */

所以 /etc/resolv.conf 定义了3个 name server,option rotate 选项指在这3个 dns server 之间轮回查询,option timeout:1 选项设定 lookup timeout 的时间为1秒(默认为5秒),下面是 VPSee 使用的 DNS server 和 resolv.conf 配置:

$ cat /etc/resolv.conf

nameserver 8.8.8.8
nameserver 8.8.4.4
nameserver 4.2.2.2
option rotate
option timeout:1

http://www.vpsee.com/2010/05/optimize-resolv-conf/
回复