本文最后更新于 2025-06-20,文章内容可能已经过时。

一、问题背景与原理

由于DNS污染导致的GitHub访问障碍表现为:

  • 代码仓库克隆失败(错误代码128)

  • API响应超时(HTTP 502)

  • Releases下载速度低于10KB/s

解决方案核心: 通过Cron定时拉取最新IP-host映射,绕过被污染的DNS解析

Fetch GitHub Hosts:官网

下载使用及部署方式移步官网

二、Linux系统实施方案(适合国内VPS)

Ubuntu 系统中自带Cron服务,通过cron服务我们可以很方便的编写一些计划任务,让它定时的为我们执行

  • 首先编写一个sh脚本

# 创建一个文件夹 可自定义
mkdir /data/crontab_task
mkdir /data/crontab_task/log
# 创建一个sh脚本
vim set_github_hosts.sh
  • 接着写入内容

#!/bin/bash
start_text="Start update github hosts. Current time: "
current_time=$(date "+%Y-%m-%d %H:%M:%S")
starting=$start_text$current_time
echo "-----------------------------------------------------------------"
echo $starting
sed -i "/# fetch-github-hosts begin/Q" /etc/hosts && curl https://hosts.gitcdn.top/hosts.txt >> /etc/hosts
echo "Down."
  • 按下esc并输入wq保存

  • 赋予sh可执行权限

chmod u+x set_github_hosts.sh
  • 编写cron表达式

crontab -e
  • 此时在文件的最后添加以下内容:

*/60 * * * * /data/crontab_task/set_github_hosts.sh >> /data/crontab_task/log/set_github_hosts.log 2>&1
  • 保存后,重启cron服务即可,service cron restart

一段时间后就可以去log目录下查看执行的日志,正确执行的情况下是一直会更新日志的

三、Windows系统方案

对于Windows系统,我们可以直接下载fetch-github-hosts客户端的方式很方便的对hosts进行更新,也可以通过手动的方式修改hosts,只需要将:https://hosts.gitcdn.top/hosts.txt 中的内容复制到hosts文件中即可

四、效果验证

优化前后对比数据:

指标优化前优化后克隆速度15KB/s2.1MB/sAPI成功率32%99.2%Pages构建时间8分钟90秒

五、注意事项

  1. 建议使用多个Hosts源互为备份

  2. 企业环境需通过Ansible等工具批量部署

  3. 更新后需重启网络相关服务