GitHub がときどき開けなくなったとき、まず切り分けるようにしている。名前解決の問題なのか、そもそもネットワークが届いていないのか。hosts を書き換えて効く可能性があるのは前者だけで、プロキシの代わりにはならないし、ファイアウォールをすり抜けたり TLS 接続を直したりするものでもない。
hosts はどこから持ってくるか
使っているのは maxiaof/github-hosts。GitHub と関連リソースのドメインの解決レコードが置かれていて、更新先はhosts ファイルだ。
IP アドレスは変わるので、固定のリストをそのまま真似するとかえって混乱する。プロジェクトで最新のファイルを直接見て、ドメインと更新日を確認してから、自分が追加した部分だけを差し替える。

説明図:hosts が変えるのは名前解決で、ネットワークの経路ではない
図のとおり、hosts と DNS は名前解決の経路で、その先のネットワーク接続はまた別の話。IP が手に入ったからといって、必ずつながるとは限らない。
書き換える前にバックアップ
Windows なら C:\Windows\System32\drivers\etc\hosts、macOS と Linux なら /etc/hosts。まずコピーしてバックアップを取ってから、管理者権限で編集する。ファイルもとの localhost、開発環境のドメイン、その他の業務設定は上書きしないこと。
自分が追加する内容には、# GitHub hosts begin と # GitHub hosts end のような分かりやすいコメントを一組付けておく。次に更新するときは、この2行の間のレコードだけを差し替える。ダウンロードしたファイルを毎回まるごと追記していかないように。
キャッシュの更新と確認
Windows は管理者のターミナルで実行する。
ipconfig /flushdns
macOS はターミナルでこう。
sudo dscacheutil -flushcache
sudo killall -HUP mDNSResponder
Linux には、すべてのディストリビューションで使えるキャッシュ更新コマンドというものがない。systemd-resolved を使っているなら、次を実行する。
sudo resolvectl flush-caches
nscd を使っているマシンだけ nscd の再起動が必要になる。これらのサービスを有効にしていなければ、そのまま真似する必要はない。sudo nscd restart は一般的なサービス管理の書き方ではない。
そのうえでブラウザを開き直し、GitHub のページ、画像、リポジトリのファイルがそれぞれ読み込めるか確認する。Linux なら getent hosts github.com でシステムの名前解決結果を見ることもできる。nslookup は通常 DNS に直接問い合わせるので、これだけで hosts が効いているかどうかを判断することはできない。
トップページは開くのに raw ファイルやアイコンが読み込めないなら、そのドメインがプロジェクトの管理範囲に入っているか確認する。接続がずっとタイムアウトするなら、追加したばかりのレコードを元に戻し、ネットワーク、プロキシのポリシー、ファイアウォールを引き続き調べる。証明書の検証を切って問題を覆い隠すようなことはしない。