概要
Hyper-Vの外部仮想スイッチを作成したところ、ホストOSとゲストOSの双方でGitHubに接続不能(タイムアウト)になったときの記録。
事象1: github.com に接続できない
外部仮想スイッチ | 事象 |
---|---|
あり | https://github.com/ に接続不能(ERR_TIMED_OUTが発生) |
なし | https://github.com/ に接続成功 |
事象2: Microsoft Store からアプリを入手できない
外部仮想スイッチ | 事象 |
---|---|
あり | アプリの検索・参照はできるが、入手ができない。 |
なし | アプリの検索・参照・入手ができる |
発生条件:条件(A)~(C)をすべて満たすと発生
- (A) ゲストOSが、VPN接続を行っている。
- (B) ゲストOSが、Hyper-V の外部仮想スイッチを使用している。
- (C) 参照先が TLS1.3 を要求している。
(Microsof Storeがアプリの入手に TLS1.3を要求しているかは不明)
原因: ルータのMTU < 外部仮想スイッチのMTU
【参考】VPN接続状態のWSL2内でGithubにPush/Pullをしても応答が返ってこなかった話
https://blog.adglobe.co.jp/entry/2024/07/31/100000
外部仮想スイッチの有無で TLS が変化12した為、外部仮想スイッチの TLS1.3 未対応が原因と推測したが、意外にもMTUが原因だった。
対策: 外部仮想スイッチのMTU < ルータのMTU
【参考】Windows環境でMTUの設定の方法
https://qiita.com/takish/items/f517080b3d1af478c90c
ルータのMTU が 1454 であったため、外部仮想スイッチのMTUを変更(1500 → 1400)した。3
-
「外部仮想スイッチあり」時のパケット
TLS1.2で接続しようとしている。こちら側が 192.168.51.153、GitHub側が 20.27.177.113
"Client Hello"のあとの"Server Hello"がない。(接続失敗)
↩ -
「外部仮想スイッチなし」時のパケット
TLS1.3で接続している。こちら側が 192.168.0.252、GitHub側が 20.27.177.113
"Client Hello"のあと、"Server Hello"が返ってきている。(接続成功)
↩ -
物理NIC の MTUが 1400 になっていたため、外部仮想スイッチのMTUも1400にした。
数年前、外部接続不能に陥った時、MTU=1400 に変更することで解決したことを思い出した。
恐るべし、MTU。 ↩