[ Content contribution] 用魔法·缔造普通人与 github 之间的桥梁
Tofloor
poster avatar
魔法师
deepin
2024-01-31 03:32
Author

诞生之初

早些时候,魔法师在研究 linux 系统与网络相关的一些知识,也写了一些有关数据处理的可视化工具。

正则表达式可视化工具,提供一点文本信息,编写一点正则,它就会调用 findallmatchsearchsub 等所有接口进行数据结果显示,常用来对信息进行反复清洗,并测试出最佳正则方案。

iptables -S 命令输出的规则 - 可视化分析工具,对已知的参数都列出大概作用,当然,由于 iptables 命令参数组合有数千种,每种目的下使用的参数也不一样,这个工具比较难产... 而且这些信息的提取也是正则表达式


提示:我们与 github 之间仅仅只差了一个 DNS 与魔法工具

魔法的诞生
这是我在 linux 中使用 nslookup 解析域名为 ip,并用 ping 来检查对应的服务器的时候产生的想法。

在水群的时候,偶然发现包括我在内,大部分人都处在非常难以访问 github 的情况,也有大部分人觉得用梯子是很平常的选择,由于我个人没有这个习惯,所以也是与大部分人处在同一个状态下,以及在写本文章的时候。

为 DNS 解析打造一款可视化工具,或者说是基于可视化编写了一个 DNS 解析工具,提供默认已知的 DNS 服务器列表与域名列表,在不写任何命令和信息的情况下自动化处理 DNS 的解析并可视化结果。

录屏_选择区域_20240131020639.gif

在图中,以国内网络的状态进行的域名解析,并测试解析出来的 ip 是否可用,由此判断该域名的可访问性。

一开始测试的 DNS 服务器是国内知名厂商提供的,域名也只测试了三个,其中 github.com 在国内DNS的情况是可以解析出 ip 但 ip 的测试结果显示完全丢包,那么我的结论就是国内 DNS 完全污染,不管使用哪家 DNS 都无法访问 github.com。

后面我手动填写 DNS 服务器为 4.2.2.2,它解析的 github.com 域名对应的 ip 与国内解析的地址不同,并且 ip 的测试显示是0丢率,随后进行了10次立即ping,且10次结果都没有任何丢包。

如何施法?你想用在系统设置中使用手动填写的 DNS?

其实到这里,你已经可以直接使用 4.2.2.1/4.2.2.2 来配置当前的 dns 解析服务。


其它考虑因素:
因只有 github.com 域名需要解析,则设置 dns 影响本地网络的其它域名解析,直接 iptables 改 DNAT 转发,跳过用 dns。

但这种方案随时会因 gihtub.com 对应的 ip 变更而无法及时的修改 iptables 规则,导致失效

本着用魔法,缔造普通人与 github 之前的桥梁,我们使用一些涉及到比较专业的操作(注意:非专业人谨慎操作)。

iptables 的内容

总共三表五链,三表是指 nat magle filter,五链是 INPUT PREROUTE FORWARD POSTROUTE OUTPUT

其中表包含链,链包含规则

  1. 查看 iptables 的规则

    # 查看 nat 表的规则,如果不指定 -t nat 则是 filter 表
    $ iptables -t nat -S
    
  2. 添加规则

    参考:https://www.cnblogs.com/EasonJim/p/7589394.html 的第一条转发配置

    # 使用 -I 则是插入,使用 -A 则是追加,
    $ iptables -t nat -I OUTPUT -d 20.205.243.166 -j DNAT --to-destination 20.27.177.113
    
  3. 删除规则

    # 使用 -D 删除规则,其中删除的规则要与插入时写的规则一致,仅替换了 -I 或 -A 两个内容,可在查看时发现
    iptables -t nat -D OUTPUT -d 20.205.243.166 -j DNAT --to-destination 20.27.177.113
    
  4. 汇总

    # 当使用 -S 列出规则时,内容是以下结构
    -P PREROUTING ACCEPT
    -P INPUT ACCEPT
    -P OUTPUT ACCEPT
    -P POSTROUTING ACCEPT
    -A OUTPUT -d 20.205.243.166/32 -j DNAT --to-destination 20.27.177.113
    
    # 国内 dns 解析为 20.205.243.166 地址,我使用 DNAT 将其转发到可访问的 20.27.177.113 地址
    
    # 如果 github.com 的解析 ip 变了,新的可访问的 ip 是 192.30.255.113,我应该删除这条规则或在它前面插入一条规则,让旧的规则无效化
    iptables -t nat -I OUTPUT -d 20.205.243.166 -j DNAT --to-destination 192.30.255.113
    
  5. 最后用 iptables 规则可视化看看这个规则

    image.png

你已经知道如何使用了,那么来访问它吧,这是一台部署在国外的服务器,使用国内dns解析可能全是通的。
http://hk.shenmo.tech/DNS_Resolver

建议用 nslookup - 再 ping 对应的 ip 地址,无法访问则替换为 DNS_Resolver 的解析地址,ping 一次,可用就改规则。
魔法固然好,可不要心贪哦。

基于 streamlit 的可视化 DNS 解析:http://hk.shenmo.tech/DNS_Resolver

参考:使用 dnspython 来指定 dns 服务器解析域名

Reply Favorite View the author
All Replies
哦豁
deepin
2024-01-31 07:48
#1
虽然看不懂但是非常感谢分享
Reply View the author
夜行者
deepin
2024-01-31 08:46
#2
It has been deleted!
yanjuner
Super Moderator
2024-01-31 09:40
#3

牛的

Reply View the author
阿尼樱奈奈
Moderator
2024-01-31 10:05
#4

like

Reply View the author
fozei
deepin
2024-01-31 10:20
#5

对我来说,有点难以理解,努力理解中

Reply View the author
吉吉如律令
deepin
2024-01-31 10:56
#6
fozei

对我来说,有点难以理解,努力理解中

这么说吧,所有的网站都是搭建在服务器上的,而互联网上所有可以被公开访问的服务器都会被分配一个公网IP地址,顺着这个地址就能访问服务器上的网站了。但IP地址并不好记,于是就有了域名,将域名和IP地址绑定到一起,这样就可以通过域名访问对应服务器上的网站。但全世界这么多服务器和网页,而且时时刻刻都在发生变化,不可能每个人电脑上都能同步网站信息的变化,于是就有了DNS服务器,专门用来处理和记录域名和服务器IP之间的关系。就好比是你想去一个景点,只知道景点的名字,但你可以在高德地图里搜索这个名字,它就会告诉你这个景点在哪,要怎么走才能到达,DNS服务器就是网络世界的高德。

我们家庭宽带用的都是运营商提供的DNS服务器,运营商响应国家政策,在DNS服务器中做了设置,当接收到访问github网站的请求时,DNS会返回错误的回应,比如告诉你这个网页无法访问,或者指条错路,给你导航到公安的警告页面,一些违法被封禁的网站,你点进去看到警告也大多是这个原因。

因此,只要你能找到一个不受限制的可访问的DNS服务器,那么你就可以修改你电脑或手机所使用的DNS,那么你就可以正常的访问GitHub了

Reply View the author
187******07
deepin
2024-01-31 11:21
#7

这里是海 南广 电,dns改成4.2.2.2仍然不能使用,目前的办法是访问kkgithub.com

不知是我用的不对还是广 电网不行

Reply View the author
魔法师
deepin
2024-01-31 11:35
#8
187******07

这里是海 南广 电,dns改成4.2.2.2仍然不能使用,目前的办法是访问kkgithub.com

不知是我用的不对还是广 电网不行

国内网络使用 4.2.2.2 解析 kkgithub.com:

4.2.2.2 kkgithub.com 43.154.72.237 0 received 100% packet loss 1017ms
4.2.2.2 kkgithub.com 43.154.72.237 0 received 100% packet loss 1018ms
4.2.2.2 kkgithub.com 43.154.72.237 0 received 100% packet loss 1018ms
4.2.2.2 kkgithub.com 43.154.72.237 0 received 100% packet loss 1023ms
4.2.2.2 kkgithub.com 43.154.72.237 0 received 100% packet loss 1019ms
4.2.2.2 kkgithub.com 43.154.72.237 0 received 100% packet loss 1026ms
4.2.2.2 kkgithub.com 43.154.72.237 0 received 100% packet loss 1018ms
4.2.2.2 kkgithub.com 43.154.72.237 0 received 100% packet loss 1017ms
4.2.2.2 kkgithub.com 43.154.72.237 0 received 100% packet loss 1029ms
4.2.2.2 kkgithub.com 43.154.72.237 0 received 100% packet loss 1020ms

国内网络使用国内 dns 解析 kkgithub.com:

"223.5.5.5,223.6.6.6" kkgithub.com 43.153.185.251 1 received 0% packet loss 122ms
"223.5.5.5,223.6.6.6" kkgithub.com 43.159.53.68 0 received 100% packet loss 1033ms
"223.5.5.5,223.6.6.6" kkgithub.com 43.153.182.25 1 received 0% packet loss 126ms
"223.5.5.5,223.6.6.6" kkgithub.com 43.154.68.204 0 received 100% packet loss 1019ms
"223.5.5.5,223.6.6.6" kkgithub.com 43.153.185.251 1 received 0% packet loss 135ms
"223.5.5.5,223.6.6.6" kkgithub.com 43.159.53.68 0 received 100% packet loss 1019ms
"223.5.5.5,223.6.6.6" kkgithub.com 43.153.182.25 1 received 0% packet loss 129ms
"223.5.5.5,223.6.6.6" kkgithub.com 43.154.68.204 0 received 100% packet loss 1017ms
"223.5.5.5,223.6.6.6" kkgithub.com 43.153.185.251 0 received 100% packet loss 1017ms
"223.5.5.5,223.6.6.6" kkgithub.com 43.159.53.68 0 received 100% packet loss 1017ms

国内网络使用 4.2.2.2 dns 解析 github.com:

4.2.2.2 github.com 192.30.255.112 1 received 0% packet loss 173ms
4.2.2.2 github.com 192.30.255.112 1 received 0% packet loss 209ms
4.2.2.2 github.com 192.30.255.112 1 received 0% packet loss 170ms
4.2.2.2 github.com 192.30.255.112 1 received 0% packet loss 169ms
4.2.2.2 github.com 192.30.255.112 1 received 0% packet loss 169ms
4.2.2.2 github.com 192.30.255.112 1 received 0% packet loss 169ms
4.2.2.2 github.com 192.30.255.112 1 received 0% packet loss 169ms
4.2.2.2 github.com 192.30.255.112 1 received 0% packet loss 169ms
4.2.2.2 github.com 192.30.255.112 1 received 0% packet loss 169ms

国内网络使用国内 dns 解析 github.com:

"223.5.5.5,223.6.6.6" github.com 20.205.243.166 0 received 100% packet loss 1018ms
"223.5.5.5,223.6.6.6" github.com 20.205.243.166 0 received 100% packet loss 1017ms
"223.5.5.5,223.6.6.6" github.com 20.205.243.166 0 received 100% packet loss 1020ms
"223.5.5.5,223.6.6.6" github.com 20.205.243.166 0 received 100% packet loss 1012ms
"223.5.5.5,223.6.6.6" github.com 20.205.243.166 0 received 100% packet loss 1020ms
"223.5.5.5,223.6.6.6" github.com 20.205.243.166 0 received 100% packet loss 1018ms
"223.5.5.5,223.6.6.6" github.com 20.205.243.166 0 received 100% packet loss 1021ms
"223.5.5.5,223.6.6.6" github.com 20.205.243.166 0 received 100% packet loss 1030ms
"223.5.5.5,223.6.6.6" github.com 20.205.243.166 0 received 100% packet loss 1017ms
Reply View the author
出售星辰之书的书商
Moderator
2024-01-31 11:38
#9
牛牛牛
Reply View the author
187******07
deepin
2024-01-31 12:20
#10

感谢,我这里nslookup github.com 4.2.2.2总是超时,没法解析,但用楼主提供的网站,可以解析出192.30.255.112,然后把这个地址加入hosts文件,确实可以直接访问github了

想知道iptable转发里目标地址是怎么来的,楼主是可以通过nslookup github.com 4.2.2.2获取吗,我这里永远超时,想自动化好像只能网抓,然后写脚本修改hosts文件,虽然很蠢,但也能用,多谢

Reply View the author
132******79
deepin
2024-01-31 13:09
#11

写了那么多字,我只挑关键点:……直接使用 4.2.2.1/4.2.2.2 来配置当前的 dns 解析服务……

Reply View the author
187******07
deepin
2024-01-31 13:20
#12
132******79

写了那么多字,我只挑关键点:……直接使用 4.2.2.1/4.2.2.2 来配置当前的 dns 解析服务……

不行的,起码我这里4.2.2.2一样不能解析,现在写了个脚本,不能用本地dns解析,只能从网站抓取dns解析的结果,然后无论是用iptables转发,还是改hosts,实现访问

curl -s 'https://www.nslookup.io/api/v1/records' -X POST --data-raw '{"domain":"github.com","dnsServer":"cloudflare"}' | jq -r '.records.a.response.answer[0].record.raw' | tr -d '\r' | xargs -i sed -E -i '/github\.com/s/^.* /{} /' /etc/hosts

Reply View the author
魔法师
deepin
2024-01-31 13:37
#13
187******07

不行的,起码我这里4.2.2.2一样不能解析,现在写了个脚本,不能用本地dns解析,只能从网站抓取dns解析的结果,然后无论是用iptables转发,还是改hosts,实现访问

curl -s 'https://www.nslookup.io/api/v1/records' -X POST --data-raw '{"domain":"github.com","dnsServer":"cloudflare"}' | jq -r '.records.a.response.answer[0].record.raw' | tr -d '\r' | xargs -i sed -E -i '/github\.com/s/^.* /{} /' /etc/hosts

我大概是这样测试:与你的结果可能有些差别

image.png

Reply View the author
187******07
deepin
2024-01-31 13:40
#14
魔法师

我大概是这样测试:与你的结果可能有些差别

image.png

是的,我这里的问题就在于nslookup那里用4.2.2.2一直超时没有结果,所以只能用curl从网上得到解析的结果

Reply View the author
魔法师
deepin
2024-01-31 16:43
#15
132******79

写了那么多字,我只挑关键点:……直接使用 4.2.2.1/4.2.2.2 来配置当前的 dns 解析服务……

真有你的applaud

Reply View the author
兆兆嘟嘟嘟
deepin
2024-01-31 20:32
#16

是不是得访问githubfast.com?

Reply View the author
魔法师
deepin
2024-02-01 11:11
#17
兆兆嘟嘟嘟

是不是得访问githubfast.com?

但是,它... 的ip无法访问

image.png

Reply View the author