淘宝主页dns解析IP过多使用TCP传输解析数据
原文地址http://bbs.chinaunix.net/thread-1738965-1-1.html
https://bbs.et8.net/bbs/archive/index.php/t-922939.html
最近发现内网用户淘宝主页不能访问,但是旺旺可以登录;但是直接将计算机接到外网,访问淘宝主页正常;
从而判断问题肯定出在内部。
我们网络内部架有自己的dns转发服务器,如果从内部解析,发现其他域名解析正常,而唯独www.taobao.com不能正常解析;
nslookup结果(直接用外网):
Server: cache3-ec
Address: 202.102.224.68
Non-authoritative answer:
Name: www.gslb.taobao.com
Addresses: 121.14.24.251, 121.14.63.241, 121.14.63.251, 121.194.7.241
121.194.7.251, 121.207.229.241, 121.207.229.251, 122.224.194.180, 122.224.194.190
122.224.194.200, 122.224.194.210, 123.129.244.241, 123.129.244.251, 124.232.159.241
124.232.159.251, 125.39.85.241, 125.39.85.251, 125.39.87.241, 125.39.87.251
125.76.224.241, 125.76.224.251, 211.138.122.241, 211.138.122.251, 218.108.237.226
220.181.78.241, 220.181.78.251, 58.215.106.241, 58.215.106.251, 61.55.165.241
61.55.165.251, 61.158.239.241, 61.158.239.251, 61.189.3.241, 61.189.3.251
114.80.174.241, 114.80.174.251, 114.80.182.241, 114.80.182.251, 118.123.202.241
118.123.202.251, 119.97.134.241, 119.97.134.251, 119.167.235.241, 119.167.235.251
121.0.23.78, 121.0.23.86, 121.14.24.241
Aliases: www.taobao.com
直接接到外网,用网通dns解析www.taobao.com可以正常解析,用netstat -an 查看发现解析时使用了tcp53,如下:
TCP 222.22.222.222:2627 202.102.224.68:53 TIME_WAIT
防火墙规则对外只开放了udp53,没有开放tcp53,原来使用一直正常,查了一下资料,原来www.taobao.com解析出来的ip太多,导致报文过长,而UDP的报文最大长度为512字节;解析器发现后,将使用TCP重发request,TCP允许报文长度超过512字节。
修改防火墙规则,允许dns使用tcp传输即可。
DNS解析什么时候使用TCP协议
如果DNS服务器返回内容太多(例如:解析出来的ip太多),会导致UDP导致报文过长(而UDP的报文最大长度为512字节),服务器发现返回的数据用UDP装不下,会给请求方用UDP发一个数据包,提示请求方用TCP请求解析,请求方使用TCP发起DNS请求,然后服务器再用TCP回复。
详细内容可参考RFC
什么时候会用到53/TCP
http://www.sczgroup.org/network/200604121330.txt
Q: 平时用Sniffer观察到的DNS报文都在使用53/UDP,什么时候会用到53/TCP?
A: scz
对于DNS服务器,递归解析时用53/UDP,区传输因需要可靠传输,必须使用53/TCP。
DNS服务器的标准实现必须同时支持53/TCP和53/UDP。
对于DNS客户端,默认使用53/UDP进行A记录查询。nslookup进行A记录查询时,可以
强制使用53/TCP。用Sniffer观察下述操作引发的通信报文:
nslookup
> set vc
> www.netexpert.cn
RFC 1035中指出,53/UDP上的UDP数据区(不包括UDP首部)不得超过512字节,发送时
如果超过512字节,将被截断成512字节,同时DNS协议Flags字段Truncated位置位。
53/TCP上的数据区最前面是big-endian序的2字节长度域,不包括自身这2字节,指明
了后续数据长度。
更多细节参看"http://www.ietf.org/rfc/rfc1035.txt"。
网上曾经流行过这样一个说法,当DNS服务产生的响应数据大于512字节(指UDP数据区
)时会自动改用53/TCP。注意,RFC 1035从来没有给出过这种说法,即使确有其事那
也是DNS服务实现相关的,不是标准行为。
A: W. Richard Stevens 1994
参看<<TCP/IP Illustrated, Volume 1>> 14.8节。
名字解析器(DNS Client或递归解析中的DNS Server)发出UDP请求报文,名字服务器(
必然是DNS Server)产生的UDP响应数据大于512字节时,只会向名字解析器发送前512
字节,同时TC位置位。名字解析器通过TC位得知响应数据没有全部返回,一般实现会
选择用TCP重新请求,名字服务器将用TCP返回完整的响应数据。
D: scz@nsfocus 2002-11-13 21:20
何时用TCP是由名字解析器决定的,也就是说,名字解析器用TCP发送请求,名字服务
器才会用TCP发送响应,正常情况下决不会出现请求报文是UDP而响应报文是TCP的情
形。之所以强调正常情况下,是因为有一些非正常情况。
以BIND 8.3.3为例。我曾搭建过如下测试环境:
Server B(xxx.org.)
/
Client A - Server A(org.)
\
Fake Server B
Client A向Server A发送UDP请求报文进行A记录查询(1.xxx.org)。Server A进行递
归解析,向Server B发送UDP请求报文,源端口不是53/UDP。
Client A向Server A发送TCP请求报文进行A记录查询(1.xxx.org)。Server A进行递
归解析,仍然向Server B发送UDP请求报文而不是TCP请求报文,源端口不是53/UDP。
Server B收到来自Server A的UDP请求报文后,一般会发送UDP响应报文。现在用Fake
Server B换掉Server B,同样是处理来自Server A的UDP请求报文。Fake Server B可
以向Server A的53/TCP主动发起连接请求,并在此TCP连接上发送DNS响应数据,源端
口不要求是53/TCP。而Server A居然接受来自Fake Server B的异常TCP响应。
不知道正常通信中会出现此类现象否。总之,BIND 8.3.3曾经支持这种异常行为。
centos 6.2 64位安装vnc
yum groupinstall "Chinese Support"
yum groupinstall
"Desktop"
打开配置文件的目录: cd /etc/sysconfig
2)编辑配置文件: vi i18n
3)用#号把第一行(LANG="en_US.UTF-8")注释掉,其实直接在这行改也是可以的,不过保险点的做法,还是先注释掉,等成功后再删除不迟。
好像 6.0 以后VNC名字 由 vnc 改成 tigervnc
[root@xen ~]# rpm -qa|grep tigervnc
tigervnc-1.0.90-0.17.20110314svn4359.el6.x86_64
tigervnc-server-1.0.90-0.17.20110314svn4359.el6.x86_64
如果没有就安装下了
[root@xen ~]# yum install tigervnc tigervnc-server
添加启动项
[root@xen ~]# chkconfig --add vncserver
[root@xen ~]# chkconfig vncserver on
二、设置 VNC 密码
[root@xen ~]# vncserver
Creating default startup script /root/.vnc/xstartup
Starting applications specified in /root/.vnc/xstartup
Log file is /root/.vnc/xen:1.log
会在当前用户主目录下 生成 .vnc 目录和配置文件
[root@xen ~]# vncpasswd
Password:
Verify:
设置的密码保存在 /root/.vnc/passwd
三、VNC 配置
修改 xstartup 文件 把最后的 twm & 删掉 加上 gnome-session &
[root@xen ~]# cd /root/.vnc/
[root@xen .vnc]# tail -n 3 xstartup
xsetroot -solid grey
xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
gnome-session &
如果直接 启动
[root@xen .vnc]# /etc/init.d/vncserver start
正在启动 VNC 服务器:no displays configured [失败]
所以要修改 /etc/sysconfig/vncservers 文件添加以下内容
VNCSERVERS="2:root"
# 桌面号:用户 监听 590* 端口
VNCSERVERARGS[2]="-geometry 800x600"
这样修改后,就算 /etc/inittab 启动模式为 3 也可以正常进入图形界面
启动 vncserver
[root@xen ~]# /etc/init.d/vncserver start
正在启动 VNC 服务器:2:root xauth: (stdin):1: bad display name "xen:2" in "add" command
New 'xen:2 (root)' desktop is xen:2
Starting applications specified in /root/.vnc/xstartup
Log file is /root/.vnc/xen:2.log
[确定]
centos 6.2 64位安装VirtualBox
Please install the build and header files for your current Linux kernel
Please install the build and header files for your current Linux kernel
安装kernel-devel
yum install kernel-devel
注意安装的kernel-devel版本是什么,看与提示错误时的内核版本是否对应。(因为有些人在更新内核后没有重启,install的kernel-devel是与更新后一致的,所以建议在更新内核重启后操作。)
运行crontab -e提示:bash: crontab: command not found
在新装好系统的vps中运行crontab -e,
提示bash: crontab: command not
found,
按照常理来说,应该是未安装crontab。所以我运行yum install
crontab安装之,
谁知安装完crontab以后仍有此提示。上网搜了一下,找到了解决方法:
以 centos 为例,运行:
# yum
install vixie-cron crontabs
按照提示即可安装完成。
然后是检查状态,启动crond服务:
1,查看crontab服务状态:service crond
status
2,手动启动crontab服务:service crond
start
3,查看crontab服务是否已设置为开机启动,执行命令:ntsysv
4,加入开机自动启动:chkconfig –level 35
crond on
然后可以放心的去# crontab -e
吧!
crontab用法可以参照这篇教程:http://imcat.in/centos-installation-use-crontab/
Linux下网络抓包命令tcpdump详解(在wireshark中看包)
tcpdump -i eth0 -c 2000 -w eth0.cap
tcpdump采用命令行方式,它的命令格式为:
tcpdump[
-adeflnNOpqStvx ] [ -c 数量 ] [ -F 文件名 ]
[ -i 网络接口 ] [ -r 文件名] [ -s
snaplen ]
[ -T 类型 ] [ -w 文件名 ] [表达式 ]
-a 将网络地址和广播地址转变成名字;
-d
将匹配信息包的代码以人们能够理解的汇编格式给出;
-dd 将匹配信息包的代码以c语言程序段的格式给出;
-ddd
将匹配信息包的代码以十进制的形式给出;
-e 在输出行打印出数据链路层的头部信息;
-f
将外部的Internet地址以数字的形式打印出来;
-l 使标准输出变为缓冲行形式;
-n
不把网络地址转换成名字;
-t 在输出的每一行不打印时间戳;
-v
输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息;
-vv 输出详细的报文信息;
-c
在收到指定的包的数目后,tcpdump就会停止;
-F 从指定的文件中读取表达式,忽略其它的表达式;
-i
指定监听的网络接口;
-r 从指定的文件中读取包(这些包一般通过-w选项产生);
-w
直接将包写入文件中,并不分析和打印出来;
-T 将监听到的包直接解释为指定的类型的报文,常见的类型有rpc
(远程过程调用)和snmp(简单网络管理协议;)
示例:
1、如果要抓eth0的包,命令格式如下:
tcpdump -i eth0 -w /tmp/eth0.cap
2、如果要抓192.168.1.20的包,命令格式如下:
tcpdump -i etho host 192.168.1.20 -w /tmp/temp.cap
3、如果要抓192.168.1.20的ICMP包,命令格式如下:
tcpdump -i etho host 192.168.1.20 and icmp -w /tmp/icmp.cap
4、如果要抓192.168.1.20的除端口10000,10001,10002以外的其它包,命令格式如下:
tcpdump -i etho host 192.168.1.20 and ! port 10000 and ! port 10001 and ! port 10002 -w /tmp/port.cap
5、假如要抓vlan 1的包,命令格式如下:
tcpdump -i eth0 port 80 and vlan 1 -w /tmp/vlan.cap
6、假如要抓pppoe的密码,命令格式如下:
tcpdump -i eht0 pppoes -w /tmp/pppoe.cap
7、假如要抓eth0的包,抓到10000个包后退出,命令格式如下:
tcpdump -i eth0 -c 10000 -w /tmp/temp.cap
8、在后台抓eth0在80端口的包,命令格式如下:
nohup tcpdump -i eth0 port 80 -w /tmp/temp.cap &
########################
自己用的命令::tcpdump -i eth0 -w /tmp/eth0.cap -s0 否则抓的包不全,没有内容