「OS」タグアーカイブ
DHCPの冗長構成を考える~その4~
セキュリティで保護された動的更新
DNSの動的更新のセキュリティは3つあります
- なし
- 非セキュリティ保護およびセキュリティ保護
- セキュリティ保護のみ
ここで通常はセキュリティ保護のみに設定します。こうすれば、ADに登録されたオブジェクトからしか動的更新を受け付けることはありません。
最も端的な例としては、外部のユーザーがドメインネットワーク接続しても動的更新によってDNSにアドレスの登録は行うことができないということです。
では動的更新のセキュリティ設定が「セキュリティ保護のみ」に設定されていてDHCPの冗長構成を考えます。ふ~、やっと本題に入れます。
同一セグメントに複数台のDHCPがあると仮定します。ここではDHCP1とDHCP2があります。そしてDHCPの動的更新も行います。ここでDHCP1で登録されたクライアントのレコードがあります。これをClient1とします。このClient1はDHCP1によって登録されたので、このレコードの所有者はDHCP1ということになります。ここで、DHCP1がダウンしてDHCP2のみでの運用となります。ここでClient1が更新を行います。DHCP2はDNSに登録されているClient1の更新をかけますが、所有者がDHCP1のためエラーとなります。
これは問題ですね~
まあ、通常ではDHCPが登録するのはPTRレコードになるので気にすることはないかもしれませんが、DHCPがA,PTRレコード両方を登録する設定になっていたらこれは大問題になります。
そこでADのグループには「DNSUpdateProxy」というグループが用意されています。
この「DNSUpdateProxy」に各DHCPサーバーのコンピューターオブジェクトを登録することにより所有者の問題は解決されます。が、DNSの設定で動的更新のセキュリティ設定が「セキュリティ保護のみ」だと登録がうまくいきません。
それはDHCP サーバーが DnsUpdateProxy グループのメンバである場合、DHCP サーバーによって登録される DNS ドメイン名はセキュリティで保護されないからです。
そのためにはどうするか?
DNSの動的更新専用アカウントを作成して、DHCPサーバーに設定すれば解決できます。
このページの資格情報をクリックして設定します。
まとめ
DHCPの冗長構成を行う場合は
- DNSUpdateProxyというグループにDHCPのコンピューターオブジェクトを登録する
- DNSの動的更新専用アカウントを作成して、DHCPサーバーに設定する
ということになりますね。
DHCPの冗長構成を考える~その3~
DHCPサーバーからDNSの動的更新を行う場合考慮しなくてはいけないポイントがあります。
まずは、DNSの動的更新とはどのような動作なのかを理解する必要があります。
以前はDNSのレコードは管理者が登録するものでした。しかし、昨今の環境ではクライアントの名前解決においてもDNSを使用することが一般的になることによって管理者がクライアントのレコードを登録するというのは難しくなってきました。またDHCPを使用している場合動的にIPアドレスが変更されるため尚更難しいということになります。
そこで考え出されたのがDNSの動的更新になります。
まず、クライアントの一般的な動作から考えます。
前提としてTCP/IPの詳細設定において「□この接続のアドレスをDNSに登録する」にチェックが入っていることになります。デフォルトではチェックが入っているので通常は気にしませんね。
ここで2つのパターンがあります。それは静的IPアドレスと動的IPアドレスの場合です。
静的IPアドレスの場合はクライアントが直接DNSサーバーにAレコードとPTRレコードの登録を行います。
動的IPアドレスの場合(DHCPからIPアドレスを取得した場合)
ここの動作はちょっと解説が必要になります。まず、前提としてDHCPのDNSタブの設定が絡んでくるんです。
デフォルトの状態では「以下の設定に基づいて、DNS動的更新を有効にする」にチェックが入っています。そして「DHCPクライアントから要求があったときのみDNSのAレコードおよびPTRレコードを動的に更新する」にチェックが入っています。
さて、ここでDHCPクライアントから要求~とありますがどういうことかというと、DHCP オプションであるクライアント FQDN オプション (オプション 81) を考慮する必要があるんです。
Windows Server 2003 で DNS 動的更新を構成する方法
以下参考リンクより抜粋~~
このオプションを使用すると、クライアントから FQDN を DHCPREQUEST パケットで DHCP サーバーに送信することができます。これで、クライアントは必要なサービス レベルを DHCP サーバーに通知できます。
FQDN オプションには、次の 6 つのフィールドがあります。
- Code
このオプションのコード (81) を指定します。 - Len
このオプションの長さ (4 以上) を指定します。 - Flags
サービスの種類を指定します。- 0
クライアントが “A” (ホスト) レコードを登録します。 - 1
クライアントが DHCP に “A” (ホスト) レコードを登録させます。 - 3
クライアントの要求にかかわらず、DHCP が “A” (ホスト) レコードを登録します。
- 0
- RCODE1
サーバーがクライアントに送信する応答コードを指定します。 - RCODE2
RCODE1 の追加記述を指定します。 - Domain Name
クライアントの FQDN を指定します。
クライアントがリソース レコードを DNS に登録するよう要求した場合、クライアントは、RFC (Request for Comments) 2136 に従って、動的 UPDATE 要求を生成します。すると、DHCP サーバーが PTR (ポインタ) レコードを登録します。
このオプション 81 が、Windows Server 2003、Microsoft Windows 2000、または Microsoft Windows XP を実行する DHCP が利用できるコンピュータなどの有効な DHCP クライアントによって発行されたものであるとします。この場合、Windows Server 2003 ベースの DHCP サーバーによってオプションが処理および解釈されて、サーバーがクライアントのために更新をどのように開始するかが判断されます。
ここまで~~
ここで重要なのはクライアントからのオプション81のデフォルトはFlagsが0ということです。通常この設定を変えることはありません。
では話は戻って、DHCPサーバーの設定は「DHCPクライアントから要求があったときのみDNSのAレコードおよびPTRレコードを動的に更新する」になっています。そしてクライアントはFlagsが0なのでクライアントが “A” (ホスト) レコードを登録します。
ということで、デフォルトの動作ではクライアントがAレコード、DHCPサーバーがPTRレコードを登録するということになります。
そして、DHCPサーバーの設定を「DNSのAおよびPTRレコードを常に動的に更新する」にチェックを入れると、DHCPサーバーがクライアントのA、PTRレコードを登録するという動作になります。
ここで冗長構成の動作を考えると問題になることがあります。
それは次回に・・・
DHCPの冗長構成を考える~その2~
前回は同一セグメントにDHCPサーバーを複数台おいて冗長構成するお話をしましたが、こんな構成もありますね~
1台は同一セグメントにDHCPサーバーをたてて、それがダウンしたらリレーエージェントで別セグメントにあるDHCPサーバーに飛ばす方法。別セグメントには元のセグメントと同じアドレス範囲のスコープを設定しておく。クライアントがDHCPに問い合わせする際にアドレス情報を持っているので適切なスコープからアドレスをもらうことができます。
他にはこんな感じ
クライアントが存在するセグメントにはDHCPサーバーはなく、リレーエージェントを設置するか、ルーターにDHCPパケットを転送させるかしてDHCPサーバーが存在するセグメントにパケットを飛ばす方法。
なんか、こっちのほうがいいかも
そもそも、ネットワーク設計をする際にはセグメントは小さいほうが効率よくネットワークを使用することができます。ですのでL3スイッチを使用して社内ネットワークを分割している企業は多いはず。その際に各セグメントにDHCPサーバーを置くのは大変だし非効率的になります。この構成を使えば複数のセグメントのDHCPとして使用できるし、冗長化にもなる。
ということで、私の考える冗長構成のベストプラクティスは後者になります。
DHCPの冗長構成を考える
さて、かなり枯れた技術としてDHCPサービスがあります。このDHCPサービスですが、私の今までの経験ではDHCPデータベースが壊れるという事態に遭遇したことはありません。かなり安定しているサービスではないでしょうか?
そうはいってもDHCPサーバーを提供しているサーバーがダウンすることはあります。
そのような事態に対応するにはDHCPの冗長構成を考慮する必要があります。
ではDHCPの冗長構成を考える場合どのような構成があるのでしょうか?思い浮かぶ所で3つの方法があります。
- スコープの分割
- DHCPのクラスタ構成
- コールドサーバーの用意
でしょうか?
DHCPのクラスタ構成ですが、コストが高すぎてあまり現実的ではありませんね。そして、コールドサーバーの用意ですが運用中のDHCPサーバーがダウンしたら用意しておいたサーバーにDHCPサービスをインストールして運用する。これはこれでありですが、若干の問題を抱えます。それは今まで配布していたアドレス情報を持っていないのでIPアドレスのバッティングが発生する可能性があるということです。しかし、これはDHCPサーバーの設定画面で「検出の試行回数」の項目を2あたりにすることによって回避は可能になります。
この「検出の試行回数」を入力する数字によって、DHCPサーバーがクライアントにIPアドレスをリースする前に、そのアドレスでpingを使用して既存端末が存在するかを確認します。この数字は2を超えない値が推奨されています。
そして最も現実的な冗長構成としてはスコープの分割があります。
これは複数のサーバーをDHCPサーバーとして構成します。その際のスコープ構成として除外範囲を利用します。
アドレス範囲は同じですがそれぞれ除外範囲はことなるのでバッティングすることはありません。
ただし注意点としては予約をしている際にはすべてのDHCPサーバーで同じ設定をする必要があります。
次回はDHCPとDNSとの連携について考えてみます。
DNSのフォワーダ
DNS設定でフォワーダの構成を行う際の注意点があります。
ではそもそも、フォワーダの動作はどのようになるのか?
通常DNSの動作としては、クライアントから再帰クエリとしてDNSサーバーが受け取ります。そして、DNSサーバーは目的のホストが見つかるまで反復クエリを繰り返して、最終的に権限のある応答として目的のホストアドレスを受け取ります。そしてクライアントへの応答してアドレスを返答します。
フォワーダの設定を行うと、DNSがクライアントと同じ動作を行います。よって、クライアントから再帰クエリを受け取り、それを再度DNSサーバーに再帰クエリとして送信します。
これは外部DNSと内部DNSを分離して、内部DNSにフォワーダの設定をするシナリオによく使用されます。
では設定画面を確認します。
ここで着目してほしい場所があります。それは「フォワーダが利用可能な場合にルートヒントを使用する」というチェックボックスになります。では、ここで英語版の設定画面を見ます。
原文では「Use root hints if no forwarders are available」になっています。
ん!これは・・・本当なら「フォワーダが利用不能な場合にルートヒントを使用する」が正しい翻訳になるぞ
ということで、日本語の意味が全く逆になります。
では、このチェックの利用方法は?
そもそも、これはDNSの排他モードと非排他モードの設定になります。
- 排他モード
フォワーダがDNSクエリを解決できない場合、フォワーダーを利用する側のDNSサーバーは元のDNSクエリの発行者にクエリの失敗を返します。その際、DNSサーバーは自分でDNSクエリを解決しようとはしません - 非排他モード
フォワーダがDNSクエリを解決できない場合、フォワーダを利用する側のDNSサーバーがDNSクエリを解決しようとします。
ということで、正しい翻訳を元に考えると「排他モード」はチェックオフで、「非排他モード」はチェックオンになります。
2009年2月4日追記
実機検証した結果、どうやらチェックオンが「排他モード」になりました。ということは英文が間違っているということになるようです。実際には、[Don’t use root hints if no forwarders are available]になり、[フォワーダが利用不能な場合でもルートヒントは使用しない]になりますね~
この結果を踏まえて現在マイクロソフトに問い合わせ中ですので詳細が分かり次第追記します。
2009年2月25日追記
マイクロソフトからの正式回答が来ました。
ここから~
– 動作について
「フォワーダが利用可能な場合にルートヒントを使用する」および、「Use root hints if no forwarders are available」 共にチェックの ON、OFF では下記の動作となります。
※ 結果として、Windows Server 2008 においても、Windows Server 2003 と同様の動作となります。
– チェックが有効 (ON) な場合
フォワーダのみでルートヒントは利用しない (排他モード)
– チェックが無効 (OFF) な場合
フォワーダに問い合わせて応答が無いとルートヒントに問い合わせる (非排他モード)
上記動作について、弊社上位部署に確認させていただきましたところ、今回の現象は、2 重の問題が関係していることが判明致しました。
1. 英語版の UI の表記が実際の動作とは、反対の動作になっている
2. 日本語版の UI の表記が英語版の UI を誤訳している
本件につきましては、上位部署に報告させていただいており、公開情報の作成を検討しております。
しかしながら、現時点では具体的な公開日については、明確となっておらず、公開日についてご案内することができません。
ここまで~
どうやらKB化されるようです。
まとめ
フォワーダの設定を行う場合は、一般的な環境では「フォワーダが利用可能な場合にルートヒントを使用する」チェックボックスをオフ「オン」にする「排他モード」にします。なぜ排他モードにするかというと、フォワーダによるDNSクエリが失敗した際に、フォワーダを利用する側のDNSサーバーが反復クエリを行い「再帰の処理」を実行したところで、結果はフォワーダと同様に失敗すると考えられるからになります。
所属グループを調べる
ユーザーが所属しているグループを調べることがありますが、一般的な方法として「ADユーザーとコンピュータ」スナップインを使用して、対象ユーザーのプロパティから「所属するグループ」をみて確認すると思われます。
しかし、この方法ではビルトインのグループや、ネストして参加しているグループは解りません。
その際に便利なコマンドがあります。
whoami /groups
になります。
このコマンドを使用すると、現在ログインしているユーザーが所属している直接、間接的なグループが表示されます。他にもスイッチがあり意外と便利なコマンドになります。
ただし、テストしてみるとなぜか「Domain Users」は表示されませんでした・・・なぜだろう?仕様かな~
ちなみにXPにはこのコマンドはありません。
デフォルトではWindows Server 2003,2008,Vistaで使えます。
WINSの罠
Windows Server 2008にも以前と変わらずにWINSが搭載されています。まあ、役割ではなく機能に入っているのは愛嬌ですけどね(笑)
さて、昔からある資源を活用するために(NTの環境を使う)WINSサーバーを活用する企業もあるでしょう。そこで注意しなくてはいけないことがあります。
Windows Server 2008上でWINSを導入してサーバーの「プロパティ」の「間隔」タブを確認すると以下のようになっています。
ここでWINSの管理をしている方は、ピンとくるかもしれません。
実はTechnetなどで確認するとWindows Server 2008のWINSに関するドキュメントはなくWindows Server 2003のドキュメントにリンクされています。ということは、テクノロジの変化はないということになります。
ここで問題になるのは規定値が想定されているものと異なるということです。
参考
ここで設定されているのは以下の通り
- 更新間隔 : 40 分
- 廃棄期間 : 40 分
- 廃棄タイムアウト : 1 日
このときの該当するレジストリを見ると、値は、0 となっています。
ただ、プロパティを [OK] で閉じると、相当するレジストリが反映されます。
また、”既定値の戻す” をクリックすると、以下になり、レジストリも反映される。
- 更新間隔 : 6 日
- 廃棄期間 : 4 日
- 廃棄タイムアウト : 6 日
これが本来想定される規定値になります。
さて、ここで疑問になるのが一体どの値が採用されて動作するのかということです。
さすがに解らなかったのでマイククロソフトのサポートに連絡して調べてもらいました。
ということでマイクロソフトからの回答がこちら
– 見解
本現象について、エスカレーション部隊とともに調査しました結果、弊社製品の不具合で発生している現象であることがわかりました。
さらに、初期設定されている、[更新間隔] 等の期間においても実際にメモリ上に存在し、動作に依存する値であることがわかりました。
恐れ入りますが、Windows Server 2008 にて WINS サービスを実行する際にはプロパティ画面より、[既定値に戻す] ボタンをクリックし、Windows Server 2003 と同様の初期値に設定いただきますようお願いいたします。
– ここまで
この数値で運用を行うと、クライアントからのトラフィックが頻発することになりますね~
ということで、Windows Server 2008でWINSを使用する場合は必ず、[既定値に戻す] ボタンをクリックして数値を適切な値にしてから使用することが必要になります。
まあ、次回のサービスパックで直っていると良いですね。
2011年4月18日 追記
残念なことにWindows Server 2008 R2 でも症状は同じでした・・・
IPv6の無効化(Win2008 or Vista)
企業ネットワークではIPv6を使用しているというのは、現状ではあまりないのではないでしょうか?しかし、Windows Server 2008やVistaはデフォルトでIPv6が使用されています。
ここで考えなくてはいけないのが、使用していないものを使用できる状態にしておくのはいいのか?ということです。
もし、使用していないのであれば無効にするのがセキュリティ的な考え方になります。
しかし、Windows Server 2008やVistaではIPv6が優先のプロトコルとなりシステム上削除することはできません。それではどうするか?
<IPv6の無効化>
IPv6を使用しないなら、無効化することができる。
設定手順は、下記の通り。
① ネットワーク接続(通常、「ローカル エリア接続」)のプロパティ
> [TCP/IPv6]のチェックボックスをオフ。
② %Systemroot%System32Driversetcフォルダ
HOSTSファイルから「::1 localhost」の行を削除。
③ レジストリで次の設定を行う。
HKLMSystemCCSServicesTcpip6Parametersキー
値の名前:DisabledComponents (REG_DWORD)
設定値:0xFFFFFFFF
④ コンピュータを再起動。
解説
Windows Server 2008ではIPv6を削除することはできませんが無効にすることはできます。ネットワーク接続のプロパティよりInternet Protocol version 6 (TCP/IPv6)のチェックを外すことにより無効にできます。
しかし、IPv6のトンネルインターフェイスとループバックインターフェイスは無効になりません。
そこでレジストリを修正することによって目的のIPv6コンポーネントを無効にすることができます。
レジストリキー
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicestcpip6ParametersDisabledComponents(REG_DWORD)
DisabledComponentsキーは自分で作成する必要があります。
デフォルトの値は「0」です。
この値は6ビットの2進数で構成されています。
「000000」
右側からビット0、1、2、3、4、5と構成されます。
ビット 0 を「1」にすることにより全てのIPv6トンネルインターフェイス(ISATAP、6to4、Teredo)を無効にします。デフォルトは「0」です。
ビット 1 を「1」にすることにより「6to4」のトンネルインターフェイスを無効にします。デフォルトは「0」です。
ビット 2 を「1」にすることにより「ISATAP」のトンネルインターフェイスを無効にします。デフォルトは「0」です。
ビット 3 を「1」にすることにより「Teredo」のトンネルインターフェイスを無効にします。デフォルトは「0」です。
ビット 4 を「1」にすることによりIPv6のトンネルインターフェイス以外(LAN、PPP)を無効にします。デフォルトは「0」です。
ビット 5 を「1」にするとIPv6よりIPv4を選択するようにデフォルトプレフィックスポリシーテーブルを変更します。デフォルトは「0」です。
ここでは設定値:0xFFFFFFFFを設定しているが、意味のある設定は6ビットのみ。
ということで、もしIPv6を社内で使用していないのであれば、これらの設定は必須作業になると考えられます。