私の目標は、ホストのブリッジインターフェイスを使用していくつかのQEMU / libvirtベースのゲストを設定し、各ゲストVMが自分のLANネットワークにDHCP割り当てIPアドレスを持つようにすることです。私はあまり複雑ではない仮想マシン構成を正常に設定して使用し、ハードウェアが仮想化をサポートしていることを知っているので、言えば本論に入ろうとします。
トポロジー
各ノードは1Gbpsイーサネットを介して接続されています(したがってワイヤレスインターフェイスはありません)。
[ルーター]---[スイッチ1]---[スイッチ2]---[ホスト]
所有者
- Ubuntu 16.04.5 実行
- 管理アクティビティ用にdhcpとして設定された1x 1Gbps NIC(em1)
- 静的IPアドレス(br0 / eth1スレーブ)を持つブリッジで構成された1x 1Gbps NIC
- ブリッジ接続は、同じLANネットワーク上の他のホストのSSHとpingを使用して正常にテストされました。インターフェイスファイルでスパニングツリープロトコルを明示的に無効にし、brctl showコマンドはeth1が唯一のインターフェイスであるブリッジを正しく表示します。
ゲストのインストールにvirt-installを試してください
インストールコマンド
virt-install --name={guest-name} --vcpus=2 --memory=4096 --network bridge=br0
--cdrom={.iso-img-path} --disk size=20,path={diskimg-path} --os-variant=debian8
--graphics vnc,password={pass},listen=0.0.0.0 --noautoconsole
これまでに観察された動作とトラブルシューティング
インストールを成功させるためにゲストVM VNCに接続
Debian 9グラフィックインストーラは、ホストブリッジインターフェイスを介してDHCP用にゲストネットワークインターフェイスを自動的に設定できないことを報告します。
注文する」sudo tcpdump -i br0 |マウサーsudo tcpdump -i br0 |マウサー'(以下の出力)は、ブロードキャストされた要求のみを表示し、応答は表示しません。
10:08:57.833669 IP 0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, 52:54:00:8a:9e:69 で要求 (oui 不明), 長さ 300
技術的な背景知識がありますが、低レベルの詳細とDHCPの問題を正しく解決する方法に精通していません。
アップデート1
Ubuntuホストでtsharkを設定し、Wiresharkを実行しているラップトップをイーサネット経由でルーターのスイッチポートに接続しました。
注:私が知っている限り、私のルータはポートミラーリングまたはポート監視をサポートしていません。
新しいトポロジ
[ルーター]---[スイッチ1]---[スイッチ2]---[ホスト-Tshark]
|
[Deb9.5-Wireshark]
Tsharkのコマンドと結果
[]$ tshark -w out.pcap -f "udp port 68 or port 67" -i any
[]$ tshark -r out.pcap -V | grep -e Frame -e Bootstrap -e User\ Datagram\ Protocol -e Bootp\ flags -e "Internet Protocol Version 4"
Frame 295: 344 bytes on wire (2752 bits), 344 bytes captured (2752 bits) on interface 0
Frame Number: 295
Frame Length: 344 bytes (2752 bits)
[Frame is marked: False]
[Frame is ignored: False]
Internet Protocol Version 4, Src: 0.0.0.0, Dst: 255.255.255.255
User Datagram Protocol, Src Port: 68, Dst Port: 67
Bootstrap Protocol (Discover)
Bootp flags: 0x0000 (Unicast)
- 上記でキャプチャコマンドを起動し、すぐにDebian 9インストールVNCに移動し、DHCP自動設定を再試行してから、キャプチャをすばやく停止しました。
- キャプチャの開始後にキャプチャの数が増え始めましたが、グラフィカルインストールにDHCP設定を再試行するように指示するまで、すべてのパケットは上記の出力と同じに見えました。 (一部のパケットが転送ループにかかっている可能性がありますか?)
- ホストでTsharkを使用する前に、ラップトップでWiresharkを使用して家に帰っていくつかのフィルタを試しましたが、Wiresharkでテストしている間にDHCP / BOOTP(検索)パケットが入ってくるのを見ませんでした。
- Bootpフラグはユニキャストとしてマークされていますが、IP src / dstはDiscoverパケットをブロードキャストし、応答を待つように見えます。 DHCPについてもっと知っている人なら誰でもこの問題を理解するのに役立ちます。
アップデート2 – 解像度を上げる
それで、次に試したことは、DHCPを使用してパケットからMACアドレスを取得し、ルータGUIで静的IPを設定することでした。インストーラのネットワーク構成部分を通過できたため、うまくいきましたが、ミラーサーバーに接続してパッケージマネージャを設定する必要があるポイントに達したときに失敗しました。
ARP確認は私になじみがあるので、DHCP検索パケットと同様に、ブリッジから送信されたARPパケットが応答しないことがわかりました。 LAN上の他のホストからブリッジインターフェイスにpingを送信するパケットを調べると、応答の送信元フィールドにあるMACアドレスが間違っていることが確認されました。 Linuxカーネルは、疎結合システムでIPアドレスを「システムオブジェクト」として扱うため、複数のインタフェースを同じネットワーク(192.168.1.0/24)に接続しても、特定のIPを持つパケットを処理するためにどの物理インタフェースが使用されるかを保証できません。ではありません。関連。
この問題を解決するために、システムのすべての物理インターフェイスをブリッジインターフェイス定義に追加し、再起動後にすべてが正常に機能しました。これは理想的な設定ではありませんが、動作し、DHCPは期待どおりに機能します。