2009年8月22日土曜日

VPN、ルータ越えでADのGPOを適応する方法

VPN、またはセグメントを分けたLANでADを構築している場合、VPNやルーターを越えた先にあるクライアントにグループポリシーが届かないという現象がある。

クライアント側のアプリケーションLogに
---------------------------------------------------------------
イベントID:1054
コンピュータネットワークのためのドメインコントローラ名を取得できません。
(指定されたドメインがないか、またはアクセスできません。)
グループポリシーの処理は中止されました。
---------------------------------------------------------------
というログがLogIn時からだいたい5分毎に記録される。

原因はWindowsのデフォルトでのICPMのバッファがでかすぎる事。

クライアントがDCからGPOを取得する場合次のようなステップを踏む。
1.GPOを適応する際には、クライアントはまず0バイトでpingをDCに飛ばす。
2.DCがReplyする
3.ドメインコントローラに対して、2048バイトpingを打つ(MFフラグ付)
ここでDCからReplyがあればGPOを複製して適応となるんだけど、この2048バイトのpingが曲者。

WindowsのデフォルトではICMPは2048という最大長で発信される。
これはTCP/IPのMAX値なので、ベタに同一セグメント内にDCがある場合は、pingはDCは届きDCからReplyが来てなんの問題も無くGPOが適応させる。

しかしVPN等でルーターを超える場合、ほとんどのルーターは2048バイトというICMPを通過させれない。
ましてやインターネットを介してIP-sec等でVPNを構築している場合、インターネットの最大バッファは1500、VPNなら暗号化を掛けているので1300~1400程度がMAXのはず。
そりゃ2048なんてでかいバッファのICMPが通るわけがない。
で、DCからのReplyが無いって事で上記エラーを記録することになる。

解決策はレジストリでICMPの最大値を区切ってやること。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
に新規DWORDを作り名前を「PingBufferSize」にする。
値を10進で500以上で自分のネットワーク環境に合わせた値(ルーターの許可最大値なりVPNの最大値)を入れるだけ。
うちは1024で統一した。

テストをする場合はVPNまたはルーター越しの端末にレジストリーを設定し
gpupdateコマンドを実行する。
あとはポリシーの確認をするだけ。

もしGPOが適応されないならPingBufferSizeの値を調整してリトライ
この値はあくまでICMPの最大値なので数値の大小でネットワークの速度に影響が無いので、最小値500を最初から設定しておくもの有りかもしれない。

テストがうまくいったら設定変更をbatファイルにして配布して終了。
ただし配布をGPOで行っても意味が無いので注意


おまけ[batの中身]
(
@echo Windows Registry Editor Version 5.00
@echo [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon]
@echo "PingBufferSize"=dword:00000400

) > startup.reg

@regedit /s .\startup.reg
@del startup.reg

1 件のコメント:

匿名 さんのコメント...

PlayBaccarat online for free | Online casino 2021 | Vermantia
PlayBaccarat 바카라 is one of septcasino the best variations of the 메리트 카지노 card game played for years. Its simplicity and elegance appeal to players. As a  Rating: 5 · ‎Review by welife