Ubuntu14.04とLXCを使用して仮想化環境を構築しています。 12.04から14.04へのアップグレードでは、下位互換性が保証されていないことが示されているため、独自のテンプレートを作成したくありません。
したがって、デフォルトのUbuntuテンプレートを使用して、lxc-createを介して仮想マシンをデプロイしています。サーバーのDNSはAmazonRoute 53によって提供されるため、ローカルDNSサーバーは必要ありません。
また、Puppetを使用してサーバーを構成しているので、展開の手作業を最小限に抑えたいと思います。
現在、デフォルトのUbuntuテンプレートはDHCPを介してIPアドレスを割り当てます。したがって、ノードにIPアドレスを割り当てるためのローカルDHCPサーバーが必要です。これにより、ノードにSSHで接続して、Puppetを実行できます。 Puppetには適切なDNS設定が必要であるため、一時IPアドレスを割り当てることはできません。クライアントは、最初から正しいホスト名とIPアドレスを取得する必要があります。
どのDHCPサーバーを使用し、そのホスト名でDNSルックアップを実行することにより、ホスト名DHCPオプションのみに基づいてIPアドレスを割り当てるにはどうすればよいですか?
ISC DHCPサーバーを使用して動作させようとしましたが、マニュアルには次のように明記されています。
ホスト宣言、またはDHCPv6サーバーのホスト識別子オプションパラメータとの照合に使用できるのは、dhcp-client-identifierオプションとハードウェアアドレスのみであることに注意してください。たとえば、Host宣言をHost-nameオプションに一致させることはできません。これは、ホスト名オプションが特定のクライアントに対して一意であることが保証されないのに対し、ハードウェアアドレスとdhcp-client-identifierオプションの両方が、少なくとも理論的には特定のクライアントに対して一意であることが保証されるためです。
また、次のようにホスト名に一致するクラスを作成しようとしました。
class "my-client-name" {
match if option Host-name = "my-client-name";
fixed-address my-client-name.my-domain.com;
}
残念ながら、fixed-addressオプションはクラスステートメントでは許可されていません。期待どおりに機能する1サイズのプールに置き換えることができます。
subnet 10.103.0.0 netmask 255.255.0.0 {
option routers 10.103.1.1;
class "my-client-name" {
match if option Host-name = "my-client-name";
}
pool {
allow members of "my-client-name";
range 10.103.1.2 10.103.1.2;
}
}
ただし、これには2つの場所(Amazon Route53とDHCPサーバー)でIPアドレスを管理する必要があります私はしたくない。
これは内部ネットワークのブートストラップフェーズでのみ使用され、Puppetによる静的ネットワーク構成に置き換えられるため、セキュリティの観点からは問題になりません。ただし、仮想マシンが「ubuntu:ubuntu」資格情報でブートストラップすることは承知しています。これは、実行されたら修正する予定です。
うまくいけば、仮想イーサネットインターフェイスのハードウェアMACアドレスを制御できます。
その場合、私は同様の問題を抱えており、ISCバインドは私の構成作業と同様に協力していませんでした。私が何年も確実に使用している最善の解決策は、 リースファイル を編集して、目的のIPアドレスが対応するハードウェアMACに割り当てられるようにすることです。
まず、クライアントを起動してリースファイルにデータを入力します。次に、クライアントを停止してバインドし、リースファイルを編集します。
友人が指摘したように、私はPuppetを使用して、LXC構成ファイルで自動生成されたMACアドレスを置き換えることができました。これにより、DNS名でfixed-addressディレクティブを使用できるようになります。