[ 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
2 / 2
To page
jiutian123
deepin
2024-11-06 14:28
#21

image.png

nsz@nsz-PC:~$ ping 140.82.116.4
PING 140.82.116.4 (140.82.116.4) 56(84) bytes of data.
64 bytes from 140.82.116.4: icmp_seq=1 ttl=46 time=344 ms
64 bytes from 140.82.116.4: icmp_seq=2 ttl=46 time=367 ms
64 bytes from 140.82.116.4: icmp_seq=6 ttl=46 time=289 ms
64 bytes from 140.82.116.4: icmp_seq=7 ttl=46 time=422 ms
64 bytes from 140.82.116.4: icmp_seq=8 ttl=46 time=445 ms
64 bytes from 140.82.116.4: icmp_seq=9 ttl=46 time=468 ms
64 bytes from 140.82.116.4: icmp_seq=10 ttl=46 time=491 ms
^C
--- 140.82.116.4 ping statistics ---
10 packets transmitted, 7 received, 30% packet loss, time 9069ms
rtt min/avg/max/mdev = 289.483/403.899/491.206/67.354 ms

Reply View the author
jiutian123
deepin
2024-11-06 15:05
#22

录屏_选择区域_20240131020639.gif这个在哪里下载谢谢like

Reply View the author
2 / 2
To page