現状
kvm で仮想マシン環境を構築すると、virbr0 という名前のデバイス(ブリッジ)が一つ、作られていると思います。仮想マシンはこのブリッジから IP アドレスが割り当てられて、NAT 越しで LAN(及びインターネット)に接続することができます。
仮想マシンの仮想ネットワークインターフェースは次のとおり、NAT 接続になっています。

ホスト PC のネットワークインターフェースの様子は、Ubuntu の「設定」〜「ネットワーク」では確認できませんが、NetworkManager のコマンドラインインターフェース nmcli で確認するとこんな感じです(環境によって異なります)。 Ethernet が接続されているときは「有線接続 1」で、切断時であれば Wi-Fi に自動で切り替わってインターネットに繋がります。
hoge@T14:~$ nmcli device status
DEVICE TYPE STATE CONNECTION
enp5s0 ethernet 接続済み 有線接続 1
wlp3s0 wifi 接続済み Buffalo-A
virbr0 bridge 接続済み virbr0
p2p-dev-wlp3s0 wifi-p2p 切断済み --
enp2s0f0 ethernet 利用不可 --
lo loopback 管理無し --
virbr0-nic tun 管理無し --
ところが、普段の仮想マシンは NAT 越しでも支障はありませんが、ホスト PC と同じ LAN 内の Windows10 に 仮想マシンの Ubuntu から smb プロトコルで接続するには NAT 越しではダメです。ルーターが適切に設定されている、ネットワークセグメントが異なるだけの環境なら、Windows10 側で Netlogon サービスを有効にすればいいのですが。
同様に、必要があるかどうかは別として、仮想マシンの Windows10 に、smb プロトコルでホスト PC や LAN 内の PC から NAT 越し接続することもできません。
なので、とりあえず仮想マシンをホスト PC と同じネットワークセグメントに接続するため、仮想マシン用には Ethernet 接を、ホスト PC には Wi-Fi 接続をそれぞれ専用に割り当てていました。上の enp5s0 に紐付いている「有線接続 1」は「設定」の「ネットワーク」から歯車をクリックして「プロファイルを削除」しています。
※ターミナルから「 nmcli connection delete 有線接続 1」としても削除できます。
hoge@T14:~$ nmcli device status
DEVICE TYPE STATE CONNECTION
wlp3s0 wifi 接続済み Buffalo-A
virbr0 bridge 接続済み virbr0
enp5s0 ethernet 切断済み --
p2p-dev-wlp3s0 wifi-p2p 切断済み --
enp2s0f0 ethernet 利用不可 --
lo loopback 管理無し --
macvtap0 macvlan 管理無し --
virbr0-nic tun 管理無し --
hoge@T14:~$ nmcli connection show
NAME UUID TYPE DEVICE
Buffalo-A 39f47772-76eb-4476-a485-54f365c8d8e3 wifi wlp3s0
virbr0 1a21ab0a-854f-40e1-aec6-e961dddee11e bridge virbr0
このとおり、デバイス enp5s0 はホスト PC からみると「切断済み」で、connection も紐付いていません。
仮想マシンの仮想マシンネットワークインターフェースは次の画像のとおり、ネットワークソース enp5s0:macvtap を選択しています。

ソースモードは VEPA なので、「仮想マシン 〜 enp5s0 〜 BBルーター 〜 wlp3s0(Wi-Fi) 〜 ホスト PC 」という感じで ping も通ります。
やりたいこと
Wi-Fi 接続も以前に比べれば格段に速くなっているとはいえ、スマホをはじめ多くのデバイスがつながっている環境だと Ethernet のほうが安定・高速です。特に、仮想マシンとホスト PC とで大量のファイル転送するときは、やっぱり Ethernet のほうに分があります。
そこで、普段はホスト PC も仮想マシンも Wi-Fi を使いつつ、ファイル転送を高速に行いたいときは Ethernet 接続、かつ、同じネットワークセグメントに属するように、ブリッジを設定することにします。
ブリッジの作成
いくつか方法があるのでざっと書いてみます。
nmcli
オーソドックスな方法です。作成、削除を繰り返すようなことも無いですし、これで十分かと思います。
br0 という device が、bridge-br0 という CONNECTION が紐付いて作成されます。
hoge@T14:~$ nmcli device status
DEVICE TYPE STATE CONNECTION
wlp3s0 wifi 接続済み Buffalo-A
virbr0 bridge 接続済み virbr0
br0 bridge 接続中 (IP 設定を取得中) bridge-br0
enp5s0 ethernet 切断済み --
p2p-dev-wlp3s0 wifi-p2p 切断済み --
enp2s0f0 ethernet 利用不可 --
lo loopback 管理無し --
macvtap0 macvlan 管理無し --
virbr0-nic tun 管理無し --
hoge@T14:~$ nmcli connection show
NAME UUID TYPE DEVICE
bridge-br0 3bb7dda5-4ec9-4a33-af5a-5a8c5e5f9cb7 bridge br0
Buffalo-A 39f47772-76eb-4476-a485-54f365c8d8e3 wifi wlp3s0
virbr0 1a21ab0a-854f-40e1-aec6-e961dddee11e bridge virbr0
このブリッジには、LAN に接続するためのインターフェースが無いので追加します。
Ethernet は LAN ケーブルを接続した状態です。
hoge@T14:~$ nmcli connection add type bridge-slave ifname enp5s0 master bridge-br0
接続 'bridge-slave-enp5s0' (09ef85a4-530b-471c-81bd-ffc96a2ff3fe) が正常に追加されました。
hoge@T14:~$ nmcli device status
DEVICE TYPE STATE CONNECTION
wlp3s0 wifi 接続済み Buffalo-A
virbr0 bridge 接続済み virbr0
br0 bridge 接続中 (IP 設定を取得中) bridge-br0
enp5s0 ethernet 切断済み --
p2p-dev-wlp3s0 wifi-p2p 切断済み --
enp2s0f0 ethernet 利用不可 --
lo loopback 管理無し --
macvtap0 macvlan 管理無し --
virbr0-nic tun 管理無し --
hoge@T14:~$ nmcli connection show
NAME UUID TYPE DEVICE
bridge-br0 3bb7dda5-4ec9-4a33-af5a-5a8c5e5f9cb7 bridge br0
Buffalo-A 39f47772-76eb-4476-a485-54f365c8d8e3 wifi wlp3s0
virbr0 1a21ab0a-854f-40e1-aec6-e961dddee11e bridge virbr0
bridge-slave-enp5s0 09ef85a4-530b-471c-81bd-ffc96a2ff3fe ethernet --
ブリッジの STP(スパニングツリー)は無効にします。
hoge@T14:~$ nmcli connection modify bridge-br0 bridge.stp no
ブリッジを有効化します。
hoge@T14:~$ nmcli connection up bridge-br0
接続が正常にアクティベートされました (master waiting for slaves) (D-Bus アクティブパス: /org/freedesktop/NetworkManager/ActiveConnection/18)
hoge@T14:~$ nmcli connection show
NAME UUID TYPE DEVICE
Buffalo-A 39f47772-76eb-4476-a485-54f365c8d8e3 wifi wlp3s0
bridge-br0 3bb7dda5-4ec9-4a33-af5a-5a8c5e5f9cb7 bridge br0
virbr0 1a21ab0a-854f-40e1-aec6-e961dddee11e bridge virbr0
bridge-slave-enp5s0 09ef85a4-530b-471c-81bd-ffc96a2ff3fe ethernet enp5s0
hoge@T14:~$ nmcli device status
DEVICE TYPE STATE CONNECTION
wlp3s0 wifi 接続済み Buffalo-A
br0 bridge 接続済み bridge-br0
virbr0 bridge 接続済み virbr0
enp5s0 ethernet 接続済み bridge-slave-enp5s0
p2p-dev-wlp3s0 wifi-p2p 切断済み --
enp2s0f0 ethernet 利用不可 --
lo loopback 管理無し --
virbr0-nic tun 管理無し --
PC を再起動して仮想マシンの仮想ネットワークインターフェースでブリッジを選択します。

これで、仮想マシンがブリッジ接続されました。
ちなみに、この状態で LAN ケーブルを抜いても Wi-Fi には自動で戻りません。ターミナルから「 $ nmcli connection down bridge-br0 」でブリッジを無効化すれば Wi-Fi に切り替わります。
ただし、仮想マシンの仮想ネットワークインターフェースは手動で NAT に変更する必要があります。
再度、LAN ケーブルを差し込んだら再び「 $ nmcli connection up bridge-br0 」としてブリッジを有効化すれば Ethernet に切り替わります。
nmtui
ターミナルから $ nmtui で NetworkManager の TUI を起動できます。たぶん、出番はあまり無いと思われますが、こちらからブリッジその他の追加・設定が可能です。



nm-connection-editor
こちらのイメージとしては上の nmtui を GUI にしたような感じです。画像の左下歯車ボタンで追加できます。



その他
ブリッジの作成・管理方法は複数あります。詳細は以下のサイトをご覧ください。
さいごに
仮想マシンもホスト PC もすべて、IP アドレスは DHCP で取得することを前提としています。特に仮想マシンは NAT とブリッジを行ったり来たりするのでお手軽です。
コメント