2つの仮想ネットワークにおけるLibvirtd/Qemuルーティングネットワークモードの問題

2つの仮想ネットワークにおけるLibvirtd/Qemuルーティングネットワークモードの問題

仮想マシンのホストに問題が発生しました。ホストが最近再起動した後、2つの仮想ネットワークのうちの1つが動作を停止しました。私のネットワークトポロジは、アドレス145.120.88.64/26のクラスBネットワークの/ 26スライスです。ルータはアドレス 0.126 にあり、サーバにはアドレス 0.65 が割り当てられます。サーバーコンピュータはCentOS 7 Linux上で動作します。次のように、/ 28マスクを使用して2つの仮想ネットワークを定義しました。

<network>
  <name>vmpublic</name>
  <uuid>065450c0-0429-48ba-9200-e4712cbe7283</uuid>
  <forward dev='em2' mode='route'>
    <interface dev='em2'/>
  </forward>
  <bridge name='virbr1' stp='on' delay='1'/>
  <mac address='52:54:00:e1:01:2a'/>
  <domain name='vmpublic'/>
  <ip address='145.120.88.81' netmask='255.255.255.240'>
    <dhcp>
      <range start='145.120.88.82' end='145.120.88.94'/>
      <host mac='52:54:00:67:03:83' name='vm1' ip='145.120.88.93'/>
    </dhcp>
  </ip>
</network>

2番目のネットワークは次のように定義されます。

<network>
  <name>vmpublicb</name>
  <uuid>05115dea-24a6-4b6d-9c39-38e852d71196</uuid>
  <forward dev='em2' mode='route'>
    <interface dev='em2'/>
  </forward>
  <bridge name='virbr2' stp='on' delay='0'/>
  <mac address='52:54:00:33:4a:81'/>
  <domain name='vmpublicb'/>
  <ip address='145.120.88.97' netmask='255.255.255.240'>
    <dhcp>
      <range start='145.120.88.98' end='145.120.88.110'/>
      <host mac='52:54:00:81:b5:0b' name='vm2' ip='145.120.88.100'/>
    </dhcp>
  </ip>
</network>

その後、ルーティングテーブルは次のようになります。

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         145.120.88.126       0.0.0.0         UG    0      0        0 em2
145.120.88.64        0.0.0.0         255.255.255.192 U     0      0        0 em2
145.120.88.80        0.0.0.0         255.255.255.240 U     0      0        0 virbr1
145.120.88.96        0.0.0.0         255.255.255.240 U     0      0        0 virbr2
169.254.0.0     0.0.0.0         255.255.0.0     U     1003   0        0 em2
169.254.0.0     0.0.0.0         255.255.0.0     U     1006   0        0 virbr2
169.254.0.0     0.0.0.0         255.255.0.0     U     1009   0        0 virbr1

ファイアウォールのルールは次のとおりです。

Chain INPUT (policy ACCEPT 842 packets, 76357 bytes)
 pkts bytes target     prot opt in     out     source               destination         
15505 1222K ACCEPT     udp  --  virbr1 any     anywhere             anywhere             udp dpt:domain
    0     0 ACCEPT     tcp  --  virbr1 any     anywhere             anywhere             tcp dpt:domain
    6  1884 ACCEPT     udp  --  virbr1 any     anywhere             anywhere             udp dpt:bootps
    0     0 ACCEPT     tcp  --  virbr1 any     anywhere             anywhere             tcp dpt:bootps
 208K   16M ACCEPT     udp  --  virbr2 any     anywhere             anywhere             udp dpt:domain
    0     0 ACCEPT     tcp  --  virbr2 any     anywhere             anywhere             tcp dpt:domain
   18  5673 ACCEPT     udp  --  virbr2 any     anywhere             anywhere             udp dpt:bootps
    0     0 ACCEPT     tcp  --  virbr2 any     anywhere             anywhere             tcp dpt:bootps

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     all  --  em2    virbr1  anywhere             145.120.88.80/28   
 2508  191K ACCEPT     all  --  virbr1 em2     145.120.88.80/28          anywhere            
    0     0 ACCEPT     all  --  virbr1 virbr1  anywhere             anywhere            
    0     0 REJECT     all  --  any    virbr1  anywhere             anywhere             reject-with icmp-port-unreachable
    0     0 REJECT     all  --  virbr1 any     anywhere             anywhere             reject-with icmp-port-unreachable
14902 2099K ACCEPT     all  --  em2    virbr2  anywhere             145.120.88.96/28   
14782 2490K ACCEPT     all  --  virbr2 em2     145.120.88.96/28          anywhere            
    0     0 ACCEPT     all  --  virbr2 virbr2  anywhere             anywhere            
    0     0 REJECT     all  --  any    virbr2  anywhere             anywhere             reject-with icmp-port-unreachable
    0     0 REJECT     all  --  virbr2 any     anywhere             anywhere             reject-with icmp-port-unreachable

Chain OUTPUT (policy ACCEPT 206K packets, 14M bytes)
 pkts bytes target     prot opt in     out     source               destination         
    6  2022 ACCEPT     udp  --  any    virbr1  anywhere             anywhere             udp dpt:bootpc
   18  6135 ACCEPT     udp  --  any    virbr2  anywhere             anywhere             udp dpt:bootpc

なぜ1つのネットワーク(vmpublicb)しか機能しないのかわかりません。両方のネットワークはまったく同じ方法で定義されます。外部ネットワークはvm2からアクセスでき、vm2は外部からアクセスできますが、vm1はアクセスできません。ご覧のとおり、vm1からパケットが出ていますが、パケットはvm1に転送されません。これを確認するために、別のコンピュータのvm1から送信されたICMPパケットを記録し、間違いなくパケットは受信しましたが、応答パケットは受信できませんでした。私が見つけることができる問題の唯一のヒントはARPテーブルに関連しています。

[root@localhost ~]# arp -a
? (145.120.88.100) at 52:54:00:81:b5:0b [ether] on virbr2
? (145.120.88.93) at 52:54:00:67:03:83 [ether] on virbr1
gateway (145.120.88.126) at e8:eb:34:b0:ad:01 [ether] on em2
localhost.localdomain (145.120.88.81) at <incomplete> on em2

最後の行が奇妙に見えます。なぜlocalhostのIPアドレスがあるのですか?これはvmpublic virbr1インターフェイスのIPアドレスでもあるため、この問題に関連している可能性がありますが、何ですか?

問題を正確に見つけるためにさらにデバッグする方法がわかりません。どんな提案でもいただければ幸いです。

ベストアンサー1

問題に対する解決策が見つかりました。私は/proc/sys/net/ipv4/conf/em2/ファイルシステム上のすべてのファイルを動作しているインストールと比較してこれを行いました(幸運にも動作するファイルシステムがありました)。そこで/proc/sys/net/ipv4/conf/em2/proxy_arpがfalse(または0)に設定されていることがわかりましたが、作業システムではtrue(または1)に設定されました。したがって、これをtrueに設定して問題を解決してください。

echo 1 > /proc/sys/net/ipv4/conf/em2/proxy_arp

もちろん、これは持続可能なソリューションではありません。これを継続するには、ネットワークインターフェイスの設定を変更する必要があります。この問題が1つの仮想ネットワークでのみ発生し、別の仮想ネットワークでは発生しない理由は私にとって完全に謎です。原因と解決策を完全に理解していない場合は、このような問題や他の問題が引き続き発生する可能性があるという心配があります。

おすすめ記事