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
あれば足では、どうすれば役に立ちますか?ネットワークアドレス変換? virbr0
Virt-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
足の一部ではありません。その場合、仮想マシンはルーティングなしで外部ネットワークにブリッジされます。 (vmnic
sは異なる方法で名前が付けられている可能性があります。使用された命名規則は覚えていません...)
ifconfig
または、ip addr
ブリッジIPを表示できるようにし、iptables -t nat -vL
iptables NATルールを確認する必要があります。
今virbr0-nic
、あなたの例にあるのは、ブリッジに一定のMACアドレスを提供するように設計された仮想デバイスです。 ~によるとlibvirt-users
メーリングリストの説明:
これはカーネルのバグ/機能の回避策です。ブリッジのMACは、接続された最初のNICからコピーされます。したがって、ブリッジからすべてのインターフェイスを分離し、1つのインターフェイスのみを接続すると、ブリッジは古いMACを失い、接続されたインターフェイスと同じ新しいMACを取得します。
したがって、libvirtが仮想ブリッジにMACがあることを確認する必要がある場合は、仮想デバイスを作成し(トラフィックをルーティングしない)、それを仮想ブリッジに接続します。