0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

WSL2で `apt update` が固まる問題を解決した話 ― 原因はVPN環境での「HTTP(80番)ブロック」

0
Posted at

発生した現象

WSL2上のUbuntu環境で、以下のコマンドを実行したところ、途中で処理が進まなくなった。

sudo apt update && sudo apt install -y fcitx5 fcitx5-mozc

出力は以下の状態で止まったまま動かない。

Hit:1 https://download.docker.com/linux/ubuntu jammy InRelease
0% [Waiting for headers] [Waiting for headers]
Ign:2 http://archive.ubuntu.com/ubuntu jammy InRelease
Ign:3 http://security.ubuntu.com/ubuntu jammy-security InRelease
0% [Waiting for headers] [Waiting for headers]

興味深いのは、Dockerの公式リポジトリ(download.docker.com)へのアクセスは正常に完了しているのに、Ubuntu標準のアーカイブミラー(archive.ubuntu.com / security.ubuntu.com)だけが応答しない、という点だった。

切り分けの手順

1. DNS解決を疑う

まず疑ったのは名前解決の問題。WSL2は/etc/resolv.confが自動生成される仕組み上、企業VPN環境ではDNSがおかしくなることがある。

nslookup archive.ubuntu.com

→ 名前解決には問題なし。DNSはシロと判断。

2. プロキシ設定を疑う

企業ネットワークでプロキシ経由が必須なのに、aptやシェルにプロキシ設定が反映されていないケースもよくある。

env | grep -i proxy
cat /etc/apt/apt.conf.d/*proxy* 2>/dev/null

→ こちらも該当なし。

3. curl -v で実際の通信を直接観察する

名前解決やプロキシに問題がないなら、実際にどこで通信が止まっているのかを直接見るのが確実。

curl -v --connect-timeout 10 http://archive.ubuntu.com/ubuntu/

結果、以下のような出力が得られた。

*   Trying 2620:2d:4000:1::102:80...
* Immediate connect fail for 2620:2d:4000:1::102: Network is unreachable
...
*   Trying 91.189.91.81:80...
* After 4944ms connect time, move on!
* connect to 91.189.91.81 port 80 failed: Connection timed out

ここから2つのことが分かる。

  • IPv6への接続失敗(Network is unreachable)は即座にエラーが返っており、これは経路がないだけで実害はない(curlは正しくIPv4へフォールバックしている)
  • 本当の問題はIPv4アドレスへの接続が「タイムアウト」していること。これは「拒否(RST)」ではなく「パケットが黙って破棄されている」状態であり、ファイアウォールやVPNによる意図的なブロックの典型的な兆候。

4. HTTPとHTTPSでポートを比較する

Dockerのリポジトリは通っていたことから、「特定のポートだけがブロックされているのでは」という仮説を立てた。Ubuntu標準ミラーはデフォルトで**80番(HTTP)を使うのに対し、Dockerのリポジトリは443番(HTTPS)**を使っている可能性が高い。

curl -v --connect-timeout 10 https://archive.ubuntu.com/ubuntu/

→ 成功。 これで原因が確定した。

原因

社内ネットワーク/VPN環境で、80番ポート(HTTP)への外向き通信がブロックされており、443番ポート(HTTPS)は許可されていた。

Ubuntu標準のミラーはデフォルトでHTTPを使う設定になっているため、VPN環境下ではこの制限に引っかかっていた。

対処方法

/etc/apt/sources.list 内のURLを http:// から https:// に一括置換する。

sudo sed -i 's|http://archive.ubuntu.com|https://archive.ubuntu.com|; s|http://security.ubuntu.com|https://security.ubuntu.com|' /etc/apt/sources.list
sudo apt update

これで apt update が正常に完了し、当初の目的だった fcitx5 / fcitx5-mozc のインストールも問題なく進められた。

補足:他の設定ファイルも要確認

/etc/apt/sources.list 以外にも、/etc/apt/sources.list.d/ 配下に個別のリポジトリ設定(Dockerなど)が置かれていることが多い。念のため、他にhttp://のままのファイルが残っていないか確認しておくとよい。

grep -rl "^deb http://" /etc/apt/sources.list /etc/apt/sources.list.d/ 2>/dev/null

該当ファイルが見つかった場合は、同様にhttps://へ置換しておく。

教訓

  • 「特定のリポジトリだけ通らない」という現象が出たら、DNS・プロキシの確認だけでなく、curl -v で実際の通信を直接観察するのが最も早い切り分け方法。
  • IPv6のNetwork is unreachableは経路未設定によるものであることが多く、致命的な問題ではない場合が多い(IPv4へのフォールバックが正しく動いていれば無視してよい)。むしろConnection timed out(応答なしで固まる)の方が、ファイアウォール等による意図的なブロックを疑うべきサイン。
  • 「一部のホストだけ通って、一部だけ通らない」という状況では、ホスト名やIPアドレスの違いだけでなく、使用しているポート番号(80 vs 443)の違いにも着目すると原因が見えやすい。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?