仮想ネットワーク用語:NATまたはRoute-Bridgeは矛盾ですか?

仮想ネットワーク用語:NATまたはRoute-Bridgeは矛盾ですか?

p.によると。 166個KVM仮想化のマスターChirammal et al。(Packt、2016)によって提案された「Virtual Network」タブ仮想管理者3 種類の仮想ネットワークを作成できます。

  • NATed
  • ルーティング
  • 離れて

そのタブにリンクされているネットワーク生成の会話を見ると、おおよそこれが正しいようです。

デフォルトでは、Virt-Managerは実行中のPCからNAT仮想ネットワークを作成できます。Debian 9 「ストレッチ」sudo brctl show、結果が表示されます(個人情報保護のためにブリッジIDが変更されました)。

bridge name bridge id       STP enabled interfaces
virbr0      8000.5254009dcac5   yes     virbr0-nic

これは、次のようないくつかの質問を提示します。

  • もしvirbr0あればでは、どうすれば役に立ちますか?ネットワークアドレス変換
  • virbr0Virt-Managerが仮想ネットワークを作成できるようにすると、そのネットワークのみが生成されますか、それとも別のもの(たとえば、virbr0接続された仮想NATルータ)が作成されますか?
  • 追加の質問:ホストにLANに接続された物理(イーサネット)ネットワークカードがあり、2つのゲスト仮想マシンVM1とVM2がここに接続されていると仮定すると、virbr0ネットワークトポロジはどのように見えますか?

付録

これまでのコメントと回答に記載されているiptablesとebtablesの状態は次のとおりです。

$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     udp  --  anywhere             anywhere             udp dpt:domain
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:domain
ACCEPT     udp  --  anywhere             anywhere             udp dpt:bootps
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:bootps

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             192.168.122.0/24     ctstate RELATED,ESTABLISHED
ACCEPT     all  --  192.168.122.0/24     anywhere            
ACCEPT     all  --  anywhere             anywhere            
REJECT     all  --  anywhere             anywhere             reject-with icmp-port-unreachable
REJECT     all  --  anywhere             anywhere             reject-with icmp-port-unreachable

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     udp  --  anywhere             anywhere             udp dpt:bootpc

$ sudo iptables -t nat -vL
Chain PREROUTING (policy ACCEPT 1556 packets, 130K bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain INPUT (policy ACCEPT 726 packets, 82025 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 15148 packets, 953K bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain POSTROUTING (policy ACCEPT 15148 packets, 953K bytes)
 pkts bytes target     prot opt in     out     source               destination         
   84 11805 RETURN     all  --  any    any     192.168.122.0/24     base-address.mcast.net/24 
    0     0 RETURN     all  --  any    any     192.168.122.0/24     255.255.255.255     
  267 16020 MASQUERADE  tcp  --  any    any     192.168.122.0/24    !192.168.122.0/24     masq ports: 1024-65535
  206 15656 MASQUERADE  udp  --  any    any     192.168.122.0/24    !192.168.122.0/24     masq ports: 1024-65535
    1    84 MASQUERADE  all  --  any    any     192.168.122.0/24    !192.168.122.0/24    


$ sudo ebtables -L
Bridge table: filter

Bridge chain: INPUT, entries: 0, policy: ACCEPT

Bridge chain: FORWARD, entries: 0, policy: ACCEPT

Bridge chain: OUTPUT, entries: 0, policy: ACCEPT

ベストアンサー1

ネットワークブリッジなら、virbr0どのようにNATの役割を果たすことができますか?

まあ、そうではありません。ただし、システム自体にはブリッジにポートがあり、ブリッジにIPアドレスが設定されている場合は、ブリッジと他のインターフェイス間でルーティング/転送/ NATが可能です。

eth0たとえば、アップリンクとブリッジVMがあり、次のようvirbr0に表示されるとします。vmnic0これにより、次のような結果が得られます。

      ^
      |
    eth0 (192.0.2.111 - your external IP)
      |
[[ routing / NAT ]]
      |
   virbr0 (10.0.1.1 - this system on the VM bridge)
      |
   +--+-----+-----+-------+       (the bridging part)
   |        | ... |       |
  vmnic0               vmnicN

これはeth0足の一部ではありません。その場合、仮想マシンはルーティングなしで外部ネットワークにブリッジされます。 (vmnicsは異なる方法で名前が付けられている可能性があります。使用された命名規則は覚えていません...)

ifconfigまたは、ip addrブリッジIPを表示できるようにし、iptables -t nat -vLiptables NATルールを確認する必要があります。


virbr0-nic、あなたの例にあるのは、ブリッジに一定のMACアドレスを提供するように設計された仮想デバイスです。 ~によるとlibvirt-usersメーリングリストの説明:

これはカーネルのバグ/機能の回避策です。ブリッジのMACは、接続された最初のNICからコピーされます。したがって、ブリッジからすべてのインターフェイスを分離し、1つのインターフェイスのみを接続すると、ブリッジは古いMACを失い、接続されたインターフェイスと同じ新しいMACを取得します。

したがって、libvirtが仮想ブリッジにMACがあることを確認する必要がある場合は、仮想デバイスを作成し(トラフィックをルーティングしない)、それを仮想ブリッジに接続します。

おすすめ記事