最近因为疫情的问题,XXX 又拉起了遮羞布。
访问GitHub的时候人物头像不显示就算了,执行 raw.githubusercontent.com
( GitHub 静态文件托管域名) 上面的远程代码直接爆 443 。搞得大家工作都不太方便。
于是我收集整理了目前现行的解决方案,试图从源头解决问题。
认识问题
GitHub相关域名
HOST 里的 IP 是错的,请勿直接复制粘贴!
# GitHub Start
192.30.253.112 github.com
192.30.253.119 gist.github.com
151.101.228.133 assets-cdn.github.com
151.101.228.133 raw.githubusercontent.com
151.101.228.133 gist.githubusercontent.com
151.101.228.133 cloud.githubusercontent.com
151.101.228.133 camo.githubusercontent.com
151.101.228.133 avatars0.githubusercontent.com
151.101.228.133 avatars1.githubusercontent.com
151.101.228.133 avatars2.githubusercontent.com
151.101.228.133 avatars3.githubusercontent.com
151.101.228.133 avatars4.githubusercontent.com
151.101.228.133 avatars5.githubusercontent.com
151.101.228.133 avatars6.githubusercontent.com
151.101.228.133 avatars7.githubusercontent.com
151.101.228.133 avatars8.githubusercontent.com
192.30.253.116 api.github.com
# GitHub End
问题根源
大规模 DNS挟持污染,解析到的日本IP 151.101.228.133 丢包严重
1
2
3
4
5
ping 151.101.228.133
......
--- 151.101.228.133 ping statistics ---
2661 packets transmitted, 2309 packets received, 13.2% packet loss
round-trip min/avg/max/stddev = 69.550/117.602/230.267/21.696 ms
代理方案
自行修改 pac 文件
修改本地pac
由上可得出,GitHub 相关的域名有
1
2
3
github.com
*.github.com
*.githubusercontent.com
Windows 端的纸飞机 pac 是个本地文件;
mac 端的纸飞机 可以直接编辑,一行一个域名,原理都类似,不懂就复制粘贴 ~
V2rayU 同理
更新本地 DNS 解析
1
2
3
4
5
# MAC (OS X 10.11+ )
sudo dscacheutil -flushcache
sudo killall -HUP mDNSResponder
# window
ipconfig /flushdns
SwitchyOmega 自动切换模式 (适用于V2rayU)
用”PAC情景模式” 设置一个v2的情景模式
之后再设置自动切换模式并使用就好了
换用 V2RayX 的话就不用这么麻烦了,可以直接编辑pac,不过作者最近不怎么更新了。
无代理方案
修改 host
在 https://www.ipaddress.com/ 找到 github.com 等域名的美国的IP,然后绑定HOST就行。 这是一个体力活。
国内的不一定准,但可供参考
- https://tool.lu/dns/index.html
- http://tool.chinaz.com/dns/
window 系统文件位置在 C:/windows/system32/drivers/etc/hosts
mac 系统文件位于 /etc/hosts
建议用 SwitchHosts 管理 host 文件
进阶方案是写程序用调用web接口动态更新HOST
1
2
# raw.githubusercontent.com 是 GitHub 的静态文件托管域名
199.232.28.133 raw.githubusercontent.com
我当时是急着用raw.githubusercontent.com
上面的代码,所以我改成一个美国的IP,然后通过代理访问上了。
git 加速
参考自chuyik的解决方案
SSH协议使用 SSH 隧道进行代理(mac,Linux)
把自己的 ssh 加到海外的机器,xx.xx.xx.xx为机器的公网IP
然后把该机器的IP加到ssh配置 ~/.ssh/config
里面
1
2
Host github.com raw.githubusercontent.com
ProxyCommand ssh [email protected] nc %h %p
之后把自己客户端的公钥加到远程GitHub,克隆仓库时用ssh协议才会生效
1
git clone [email protected]:owner/git.git
http(s)协议时用本地代理 + git config
1
2
3
4
5
6
7
8
9
10
11
12
# 走 HTTP 代理
git config --global http.proxy "http://127.0.0.1:8080"
git config --global https.proxy "http://127.0.0.1:8080"
# 走 socks5 代理(如 Shadowsocks)
git config --global http.proxy "socks5://127.0.0.1:1080"
git config --global https.proxy "socks5://127.0.0.1:1080"
# 取消设置
git config --global --unset http.proxy
git config --global --unset https.proxy
# 最后检查下配置
git config --list --global
git config --list --system
1
git clone https://github.com/owner/git.git
终极解决方案
美国绿卡
最后多说一句, 最近有人还原了s协议客户端的整个攻击过程