说说 ip 地址被墙和 DNS 污染

本贴最后更新于 704 天前,其中的信息可能已经渤澥桑田

为啥我会突然写这个呢?因为我买的国外服务器两台都连接不上,起初我是想买一台服务器作为代理,就不用使用 vpn 了。结果刚买了一直连接不上服务器,我就查了到底是啥原因。

经过查询,我知道可能是 ip 被墙了。我通过第三方网站 ping 试了试

屏幕截图 20230425222029.png

就是这样国外可以 ping 通,但是国内 ping 不通。可以判断一定是 ip 地址被墙了。

ip 到底怎么被墙?我提出了这个疑问。

我继续查询资料,查找了 GFW 的主要功能:

连接重置:

当检测到某个 TCP 连接的 IP 包中包含非法关键词时,伪造 RST 包发给 TCP 连接两端,导致连接断开。缺点是只对非加密的 TCP 数据有效。优点是维护方便。

对策很简答,使用加密数据传输就可以了。VPN,shadowsocks,SSH 全部是基于这个原理翻墙的。如果没有其他的手段做辅助,单单使用 https 就可以绕过。

IP/端口封锁

就是 IP 封锁,简单暴力。缺点是 IP 封锁需要部署在骨干路由器上,能够封锁的 IP 数量有限制。优点是封锁很彻底。对策是代理服务器,不需要对数据加密就可以绕过 IP 封锁。但是由于连接重置的存在,显然还是需要加密。

DNS 污染 :

在用户进行某些特定网站的 DNS 查询时,抢先发送伪造的 DNS 结果,导致 DNS 解析到虚假的 IP 地址从而阻止用户访问非法资源。

优缺点不明。

对策是使用境外的代理服务器进行远程 DNS 查询,从而获取到正确的 IP。单纯把 DNS 设置为境外的 DNS 服务器是无效的,因为只要是符合条件的 DNS 查询 UDP 包都会被投毒

Amazon 的云,linode,digitalocean 等国人喜欢用的 VPS,已经被重点照顾,大量 IP 被封。这些 IP 应该是被重点照顾的,有时自己新搭建的 VPN 服务器,几天就会被封,期间并没有怎么用。(我使用的就是其中一家)

为啥 ping 不通油管?

屏幕截图 20230425230414.png

我用 nslookup 命令去解析发现 github 给出的 ip 地址是正确的,给出的油管 ip 地址是错误的

屏幕截图 20230425234934.png

我换了两个其他的 DNS 域名解析器来

屏幕截图 20230426000209.png

发现给出两个 ip 地址还是错误的。说明 DNS 污染确实存在。

这里复习一下 DNS 域名解析的过程

什么是 DNS 域名解析

  • 我们首先要了解域名和 IP 地址的区别。IP 地址是互联网上计算机唯一的逻辑地址,通过 IP 地址实现不同计算机之间的相互通信,每台联网计算机都需要通过 IP 地址来互相联系和分别。
  • 但由于 IP 地址是由一串容易混淆的数字串构成,人们很难记忆所有计算机的 IP 地址,这样对于我们日常工作生活访问不同网站是很困难的。基于这种背景,人们在 IP 地址的基础上又发展出了一种更易识别的符号化标识,这种标识由人们自行选择的字母和数字构成,相比 IP 地址更易被识别和记忆,逐渐代替 IP 地址成为互联网用户进行访问互联的主要入口。这种符号化标识就是域名。
  • 域名虽然更易被用户所接受和使用,但计算机只能识别纯数字构成的 IP 地址,不能直接读取域名。因此要想达到访问效果,就需要将域名翻译成 IP 地址。而 DNS 域名解析承担的就是这种翻译效果。例如:把 www.baidu.com 这个域名翻译成对应 IP 220.181.38.251

DNS 域名解析过程

  • 当我们在浏览器地址栏中输入 www.baidu.com 时,DNS 解析将会有将近 10 个步骤,这个过程大体大体由一张图可以表示:

屏幕截图 20230426000817.png

屏幕截图 20230426000757.png

域名解析流程

  • 整个过程大体描述如下,其中前两个步骤是在本地电脑内完成的,后 8 个步骤涉及到真正的域名解析服务器:
    1. 浏览器先检查自身缓存中有没有被解析过的这个域名对应的 ip 地址,如果缓存中有,这个解析过程就结束。
    2. 如果浏览器缓存中没有数据,浏览器会查找操作系统缓存中是否有这个域名对应的 DNS 解析结果。其实操作系统也有一个域名解析的过程,在 windows 中可以通过配置 C:\Windows\System32\drivers\etc\hosts 文件来设置,用户可以将任何域名解析到任何能够访问的 IP 地址。
    3. 前两个过程无法解析时,就要用到我们网络配置中的"DNS 服务器地址"了。客户端通过浏览器访问域名为 www.baidu.com (http://www.baidu.com) 的网站,发起查询该域名的 IP 地址的 DNS 请求。该请求发送到了本地 DNS 服务器上。本地 DNS 服务器会首先查询它的缓存记录,如果缓存中有此条记录,就可以直接返回结果。如果没有,本地 DNS 服务器还要向 DNS 根服务器进行查询。每个完整的内网通常都会配置本地 DNS 服务器(例如你是通过学校连接互联网的一般是你学校的 DNS 服务器,如果你是在小区连接互联网的一般是网络提供商比如电信,联通的 DNS 服务器,DNS 服务器通常不会太远)大约 80% 的域名解析到这里就完成了。
    4. 本地 DNS 服务器向根服务器发送 DNS 请求,请求域名为 www.baidu.com (http://www.baidu.com) 的 IP 地址。
    5. 根服务器经过查询,没有记录该域名及 IP 地址的对应关系。但是会告诉本地 DNS 服务器,可以到顶级域名服务器上继续查询,并给出顶级域名服务器的地址。如.com、.cn、.org 等,全球只有 13 台
    6. 本地 DNS 服务器向 顶级 DNS 服务器发送 DNS 请求,请求域名 www.baidu.com (http://www.baidu.com) 的 IP 地址。
    7. 顶级 DNS 服务器收到请求后,不会直接返回域名和 IP 地址的对应关系,而是告诉本地 DNS 服务器,该域名可以在 baidu.com 域名服务器(Name Server 服务器)上进行解析获取 IP 地址,并告诉 baidu.com 域名服务器的地址。
    8. 本地 DNS 服务器向 baidu.com 域名服务器发送 DNS 请求,请求域名 www.baidu.com (http://www.baidu.com) 的 IP 地址。
    9. baidu.com 服务器收到请求后,在自己的缓存表中发现了该域名和 IP 地址的对应映射关系表,并将 IP 地址返回给本地 DNS 服务器。
    10. 本地 DNS 服务器将获取到与域名对应的 IP 地址返回给客户端,并且将域名和 IP 地址的对应关系保存在缓存中,以备下次别的用户查询时使用。

参考资料:

**nslookup 命令模拟 DNS 域名解析过程 Quick Start

  • 网络
    140 引用 • 184 回帖 • 4 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • 印象笔记
    3 引用 • 16 回帖
  • MySQL

    MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是最流行的关系型数据库管理系统之一。

    693 引用 • 537 回帖
  • 七牛云

    七牛云是国内领先的企业级公有云服务商,致力于打造以数据为核心的场景化 PaaS 服务。围绕富媒体场景,七牛先后推出了对象存储,融合 CDN 加速,数据通用处理,内容反垃圾服务,以及直播云服务等。

    28 引用 • 226 回帖 • 135 关注
  • VirtualBox

    VirtualBox 是一款开源虚拟机软件,最早由德国 Innotek 公司开发,由 Sun Microsystems 公司出品的软件,使用 Qt 编写,在 Sun 被 Oracle 收购后正式更名成 Oracle VM VirtualBox。

    10 引用 • 2 回帖 • 13 关注
  • 以太坊

    以太坊(Ethereum)并不是一个机构,而是一款能够在区块链上实现智能合约、开源的底层系统。以太坊是一个平台和一种编程语言 Solidity,使开发人员能够建立和发布下一代去中心化应用。 以太坊可以用来编程、分散、担保和交易任何事物:投票、域名、金融交易所、众筹、公司管理、合同和知识产权等等。

    34 引用 • 367 回帖 • 1 关注
  • Eclipse

    Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。

    76 引用 • 258 回帖 • 630 关注
  • Python

    Python 是一种面向对象、直译式电脑编程语言,具有近二十年的发展历史,成熟且稳定。它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务。它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用缩进来定义语句块。

    556 引用 • 674 回帖
  • Scala

    Scala 是一门多范式的编程语言,集成面向对象编程和函数式编程的各种特性。

    13 引用 • 11 回帖 • 157 关注
  • WiFiDog

    WiFiDog 是一套开源的无线热点认证管理工具,主要功能包括:位置相关的内容递送;用户认证和授权;集中式网络监控。

    1 引用 • 7 回帖 • 610 关注
  • Quicker

    Quicker 您的指尖工具箱!操作更少,收获更多!

    36 引用 • 155 回帖
  • 30Seconds

    📙 前端知识精选集,包含 HTML、CSS、JavaScript、React、Node、安全等方面,每天仅需 30 秒。

    • 精选常见面试题,帮助您准备下一次面试
    • 精选常见交互,帮助您拥有简洁酷炫的站点
    • 精选有用的 React 片段,帮助你获取最佳实践
    • 精选常见代码集,帮助您提高打码效率
    • 整理前端界的最新资讯,邀您一同探索新世界
    488 引用 • 384 回帖 • 5 关注
  • FreeMarker

    FreeMarker 是一款好用且功能强大的 Java 模版引擎。

    23 引用 • 20 回帖 • 459 关注
  • 百度

    百度(Nasdaq:BIDU)是全球最大的中文搜索引擎、最大的中文网站。2000 年 1 月由李彦宏创立于北京中关村,致力于向人们提供“简单,可依赖”的信息获取方式。“百度”二字源于中国宋朝词人辛弃疾的《青玉案·元夕》词句“众里寻他千百度”,象征着百度对中文信息检索技术的执著追求。

    63 引用 • 785 回帖 • 109 关注
  • Word
    13 引用 • 40 回帖 • 1 关注
  • CSDN

    CSDN (Chinese Software Developer Network) 创立于 1999 年,是中国的 IT 社区和服务平台,为中国的软件开发者和 IT 从业者提供知识传播、职业发展、软件开发等全生命周期服务,满足他们在职业发展中学习及共享知识和信息、建立职业发展社交圈、通过软件开发实现技术商业化等刚性需求。

    14 引用 • 155 回帖
  • Pipe

    Pipe 是一款小而美的开源博客平台。Pipe 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    132 引用 • 1115 回帖 • 120 关注
  • GAE

    Google App Engine(GAE)是 Google 管理的数据中心中用于 WEB 应用程序的开发和托管的平台。2008 年 4 月 发布第一个测试版本。目前支持 Python、Java 和 Go 开发部署。全球已有数十万的开发者在其上开发了众多的应用。

    14 引用 • 42 回帖 • 805 关注
  • 服务

    提供一个服务绝不仅仅是简单的把硬件和软件累加在一起,它包括了服务的可靠性、服务的标准化、以及对服务的监控、维护、技术支持等。

    41 引用 • 24 回帖
  • Visio
    1 引用 • 2 回帖
  • 倾城之链
    23 引用 • 66 回帖 • 158 关注
  • OkHttp

    OkHttp 是一款 HTTP & HTTP/2 客户端库,专为 Android 和 Java 应用打造。

    16 引用 • 6 回帖 • 83 关注
  • 机器学习

    机器学习(Machine Learning)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。

    83 引用 • 37 回帖
  • Solidity

    Solidity 是一种智能合约高级语言,运行在 [以太坊] 虚拟机(EVM)之上。它的语法接近于 JavaScript,是一种面向对象的语言。

    3 引用 • 18 回帖 • 431 关注
  • 心情

    心是产生任何想法的源泉,心本体会陷入到对自己本体不能理解的状态中,因为心能产生任何想法,不能分出对错,不能分出自己。

    59 引用 • 369 回帖
  • 游戏

    沉迷游戏伤身,强撸灰飞烟灭。

    180 引用 • 821 回帖
  • JetBrains

    JetBrains 是一家捷克的软件开发公司,该公司位于捷克的布拉格,并在俄国的圣彼得堡及美国麻州波士顿都设有办公室,该公司最为人所熟知的产品是 Java 编程语言开发撰写时所用的集成开发环境:IntelliJ IDEA

    18 引用 • 54 回帖 • 1 关注
  • V2Ray
    1 引用 • 15 回帖 • 1 关注