当小明遇上DNS污染
(本文是对 /t/7462 所述问题的一个简单概括)
小明:我要去白宫上访
小明:(在浏览器输入whitehouse.gov)
浏览器:好的,我看看啊
浏览器:操作系统(Windows),我这里有个地址whitehouse.gov你帮我查一下
Windows:是根据文字地址(域名)查找IP地址吗?
浏览器:是的
Windows:我先看一下网络设置,根据小明的网络设置,“DNS服务器”填写的是上海电信DNS的IP地址, 202.96.209.133
浏览器:所以小明是上海人
Windows:应该只是来上海打工的
浏览器:为什么这么说
Windows:因为他是盗版软件的受害者
Windows:喂,那个,是上海电信吗?
202.96.209.133:上海电信DNS,请问有什么能帮您的
Windows:我需要查一下whitehouse.gov
202.96.209.133:查到了,whitehouse.gov的IP地址是104.85.218.48
Windows:好的谢谢
202.96.209.133:请对本次服务作出评价,满意请按1
Windows:1
Windows:查到了,你看一下
浏览器:可以,就用这个IP
浏览器:(向Windows提出TCP连接请求)
Windows:你要连哪里
浏览器:连104.85.218.48
Windows:根据小明的网络设置,“网关”填写的是路由器IP 192.168.1.1,那我就先把连接丢给路由器
小明的华为路由器:收到,根据上海电信的网络设置,我应该把这个连接丢给上海电信0123号路由器
上海电信路由器0123:收到,根据上海电信的网络设置,我应该把这个连接丢给上海电信0456号路由器
上海电信路由器0456:收到,根据上海电信的网络设置,我应该把这个连接丢给上海电信0789号路由器
(经过几番周折)
香港电信路由器9527:收到,根据香港电信的网络设置,我应该把这个连接丢给104.85.218.48
香港Akamai节点(104.85.218.48):收到,根据Akamai的网络设置,以及目标主机名whitehouse.gov,我应该把这个连接丢给洛杉矶Akamai节点
洛杉矶Akamai节点:收到,根据Akamai的网络设置,我应该把这个连接丢给亚马逊机房的【地址被隐去】服务器
亚马逊【被隐去】服务器:收到,即将返回whitehouse.gov主页,请稍等
亚马逊【被隐去】服务器:主页已经准备好,请帮我发回去
洛杉矶Akamai节点:这就发回去
香港Akamai节点:这就发回去
(经过几番周折)
Windows:收到了另一端的回复
浏览器:让我看看
浏览器:嗯没问题,这就是白宫主页
小明:(看到了白宫主页)
重点是,如果上海电信DNS故意给小明发一个错误的IP地址,小明的连接就到不了香港Akamai,当然也就到不了亚马逊,小明也就看不到亚马逊发回来的网页了。
这种故意发一个错误的IP地址的做法,就是所谓的 DNS污染(DNS poisoning) 。国内DNS服务商受政府控制,政府要求污染DNS的时候,服务商只能同意。而国外的DNS服务器(比如google DNS),要么直接被中国政府屏蔽,要么DNS请求在返回过程中被中国政府篡改,令用户最终收到错误的IP地址。