ADドメイン ネットワークに属するWindows PCが Chrome ブラウザの場合にのみ、ある特定の サイト を 開けない 不具合が発生。調べてゆくと IPv6 が関連することが分かったので、グループポリシーを使いクライアントPCのIPv6を無効化して解決しました。
Chromeブラウザだけ開けないサイト
Windows Server 2016をDCとした、小規模なActive Directoryネットワークに属しているWindows PCユーザから、香港Yahooの検索だけが使えないと言う、不思議な不具合が報告されました(米Yahooでも同様)。
ページトップのテキストボックスに何か入れて検索すると、
しばらくして ERR_TIMED_OUT という結果に。
この現象はChromeでのみ発生し、Firefoxやサーバ機に残っていたInternet Explorerでは問題なく利用することができます。
ヤフートップの検索ボックスは、この search.yahoo.com へ投げる仕組みになっており、Chromeではここがタイムアウトに終わっていました。
また、DOSプロンプトで名前解決を確認してみますが、こちらにも特に問題はありません。
その問題が解決できないまま数日後、今度は香港政府機関である公司註冊處のサイトがChromeで開けなくなりました。
これも発生条件は全く同じでChrome以外のブラウザでは問題はなく、更に言うと同じネットワーク内の非ドメイン参加デバイス(PCやスマートフォン)のChromeでは発生しません。
Chromeの内部DNSツールを使って名前解決を確認したり、キャッシュクリアも試してみるのですが、解消には至らず。
1 |
chrome://net-internal/#dns |
IPv6を無効にすると解消
ここでふとした思いつきで、ネットワークインターフェイスのIPv6プロトコルを無効にしてみると、
今までタイムアウトエラーしていたサイトが、いずれもChromeで開けるようになりました。
IPv6よりIPv4を優先させてみる
調べてみるとIPv6をひとまとめに無効にせずとも、IPv4の優先順位をIPv6よりも高く設定することで、同様の現象を回避できることがあるようなので、 netsh コマンドを使って試してみます(こちらの記事を参考させていただきました)。
まず、現在の優先順位を確認します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
C:\Users\Administrator>netsh netsh>int ipv6 netsh interface ipv6>show prefixpolicies Querying active state... Precedence Label Prefix ---------- ----- -------------------------------- 50 0 ::1/128 IPv6ループバック 40 1 ::/0 全IPv6アドレス範囲 35 4 ::ffff:0:0/96 IPv4-mapped IPv6アドレス ←←←【コレ!!】 30 2 2002::/16 6to4トンネル 5 5 2001::/32 Teredoトンネル 3 13 fc00::/7 ユニークローカルアドレス 1 11 fec0::/10 サイトローカルエニキャストアドレス(廃止) 1 12 3ffe::/16 6boneアドレス(廃止) 1 3 ::/96 IPv4互換(廃止) |
現在の順位で3番手の IPv4-mapped IPv6アドレス がIPv4なので、これを1番上に昇格させたいのですが、それ以外の項目の順位も明示的に設定する必要があるので、実行するコマンドは以下のように。
1 2 3 4 5 6 7 8 9 10 |
netsh interface ipv6>set prefixpolicy ::ffff:0:0/96 50 0 Ok. netsh interface ipv6>set prefixpolicy ::1/128 40 1 Ok. netsh interface ipv6>set prefixpolicy ::/0 30 2 Ok. netsh interface ipv6>set prefixpolicy 2002::/16 20 3 Ok. netsh interface ipv6>set prefixpolicy ::/96 10 4 Ok. |
再び優先順位を確認すると、 IPv4-mapped IPv6アドレス が最優先になっていました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
netsh interface ipv6>show prefixpolicies Querying active state... Precedence Label Prefix ---------- ----- -------------------------------- 50 0 ::ffff:0:0/96 40 1 ::1/128 30 2 ::/0 20 3 2002::/16 10 4 ::/96 5 5 2001::/32 3 13 fc00::/7 1 12 3ffe::/16 1 11 fec0::/10 netsh interface ipv6>exit |
この状態で再びChromeで問題のサイトを開いてみるも、残念ながら相変わらずのエラーで正常に開けず。やはり優先順位ではなく、IPv6を無効にさせる必要がありそうです。
ちなみにこの優先順位はシステム再起動後も活きているので、デフォルトに戻したい場合は次のnetshコマンドで初期化の上、システム再起動が必要です。
1 2 3 4 5 6 7 8 |
C:\Windows\system32>netsh interface ipv6 reset Resetting Neighbor, OK! Resetting Path, OK! Resetting Prefix Policy, OK! Resetting , failed. Access is denied. Restart the computer to complete this action. |
レジストリでIPv6を無効にする
レジストリを変更してIPv6を無効にする手段が分かれば、それをグループポリシーでドメイン参加PCへ一括適用させることが可能になり、現場で一台一台PCを設定して回る手間が省けます。
IPv6を無効にするレジストリのパスとキーはこちら。
1 2 3 |
Path: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters\ Name: DisabledComponents Type: REG_DWORD |
ここへ代入する値については、Microsoft Learnに詳しい解説があります(既定値は 0x00 有効)。
様々な値を試してみましたが、まず次の値ではIPv6アドレスがインターフェイスに付与されており、Chromeでの当該サイトアクセスはエラーでした。
1 2 3 4 |
#Decimal #Description 2 : Disable 6to4 32 : Prefer IPv4 over IPv6 1 : Disable all tunnel interfaces |
一方、IPv4アドレスのみが付与され、Chromeでも問題無く当該ウェブサイトを開くことができたのは、こちらの2つの設定のみでした。
1 2 3 |
#Decimal #Description 255 : Disable all IPv6 components 16 : Disable all LAN and PPP interfaces ←採用 |
以上より、設定値 16 (10進数)にてレジストリキーを設定します。
システム再起動後、インターフェイスのIPv6はアクセスなしとなるも、プロトコル一覧のIPv6はチェックの入ったままになっており、この辺りは上述のMicrosoft Learnの記述通りです。
グループポリシーでレジストリ一括反映
設定するレジストリキーの詳細はわかったので、早速ドメインコントローラのグループポリシー管理コンソールを開いて、新規グループポリシーオブジェクトを作成します。
次にエディタを開き、 コンピュータの構成→基本設定→Windowsの設定→レジストリ
と辿り、以下の要領でレジストリキーの更新アクションを設定します。
1 2 3 4 5 6 7 |
Action : Update Hive : HKEY_LOCAL_MACHINE Key Path : SYSTEM\CurrentControlSet\services\TCPIP6\Parameters Value Name : DisabledComponents Value Type : REG_DWORD Value Data : 16 Base : Decimal |
そして作成したグループポリシーオブジェクトを、ユーザグループではなく、コンピュータグループへリンクさせれば、仕込みは完了です。
当該コンピュータグループに属するPC上では、DOSコマンドでグループポリシーの手動更新適用を実施の上、再起動するか、単にユーザへ「PCを2度、再起動して」とお願いしても結果は同じことでしょう。
1 2 3 4 5 |
C:\Users\user>gpupdate /force Updating policy... Computer Policy update has completed successfully. User Policy update has completed successfully. |