0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

複数のネットワーク機器に仮想マシンを自由に接続する

0
Posted at

みなさんこんばんは。

ついに自宅のクローゼットに検証環境が入りきらなくなったので、サーバールーム兼事務所を借りました。
サーバは最近2回ほど入れ替えましたが、ネットワーク機器は安定していたので特に設定変更は行っていませんでした。
また以前購入して忘れていたNETGEARのGS308Eという機器も見つけました。
検証環境の構成図は以下の通りでした。

architect_Server01.png

構成図内のServerと書いてあるZ640は仮想化ホストです。
Serverには省略していますがオンボードのNIC以外に追加で2枚のNICを接続しています。
この構成図で伸びている2本の線が追加したNIC2枚です。
この構成だと仮想化ホスト内のVMはYAMAHA RTX1300かFortiGate 60Fの2系統のネットワークにしか接続できません。
普段仮想化ホスト上のVMはほとんどRTX1300から通信させています。
Windows Updateを複数台同時にかけることを想定した場合最も早い回線に接続している方が良いためこうしていて、次に検証する機会の多いFortiGateにもう1枚のNICに接続しています。
でもこの構成だとIX2106配下やSRX300配下に接続したい場合、少し困りますよね。
毎回接続しているLANケーブルを接続しなおさないといけません。
面倒ですね。
そこで引っ越し中に掘り出したNETGEAR GS308EのL2Switchを接続しようと思いました。

思い付いた設計

とても単純ですが、GS308Eのポートを各機器のVLAN単位で設定して接続し、ネットワークを分離して管理する、というものです。
実際のGS308Eの具体的な設定は
image.png
こうなっています。
このGS308Eの図を見て貰ったらわかる通り6番ポートがVLAN1、11、21、31、41、51です。
各VLANを一覧にすると

VLAN ID ネットワーク機器
1 各ネットワーク機器の管理VLAN
11 YAMAHAのLAN1
21 SRX300のTrust
31 FortiGate 60FのInternal
41 Cisco 841MのLAN側ネットワーク
51 IX2106のLAN側ネットワーク

こうなっています。
今回みたいな構成をするにはCiscoのL2Switchが必要(既存のYAMAHA SWX2110-16GはRTX1300配下のネットワークで使用しているため、今回は各メーカーの検証用ネットワークを独立して集約するL2スイッチを別途用意しなければならないな、知っている機器ではCiscoのL2Switchか?)だと考えていたので、元々こういう設計にしていました。
そしてこの設計はGS308EがこのCiscoのL2Switchの代わりにできるかな、と思いつきました。
GS308Eは簡単でした。

仮想化ホスト側の設定

仮想化ホストのネットワークはlibvirtのNAT型仮想ネットワークを使用せず、物理NICをBridgeにしています。
ですので今回はこのBridgeインターフェースにVLAN Filtering設定を行います。

YAMAHA RTX1300に接続しているBridgeはbr0で、FortiGate 60Fに接続しているBridgeはbr1です。
このbr1をGS308Eの6番ポートに接続し、仮想化ホストの機能(Ubuntu+KVMの機能)でVLAN IDを受け取れるようにします。
これができればbr1に接続したVMの仮想NICに任意のVLAN IDを割り当て、接続先のネットワーク機器を変更できるようになります。
例えばVLAN 21ならJuniper SRX300、VLAN 31ならFortiGate 60Fの配下に接続できます。
しかもVMを停止する必要はありません。

実際に設定した内容

仮想化ホストのUbuntuに設定した項目です。
今回のUbuntu 24.04ではNetplanを利用しています。br1とens4はsystemd-networkdで管理されているため、Netplanが生成した設定ファイルに対してDrop-in設定を追加します。
私の環境で設定対象となるBridge名がbr1なので、読者の皆様の環境に合わせてbr1の部分は変更してください。

sudo mkdir -p /etc/systemd/network/10-netplan-br1.netdev.d/

sudo tee /etc/systemd/network/10-netplan-br1.netdev.d/override.conf > /dev/null <<'EOF'
[Bridge]
VLANFiltering=yes
DefaultPVID=none
EOF

このコマンドでVLAN Filteringを有効化します。
このコマンド結果、設定ファイルが正しく作成されたかは以下のコマンドで確認します。

sudo cat /etc/systemd/network/10-netplan-br1.netdev.d/override.conf

実行結果が

[Bridge]
VLANFiltering=yes
DefaultPVID=none

となっていればOKです。

VLAN設定

物理NICに通すVLANを設定します。
私の環境で設定対象となる物理NIC名がens4なので、読者の皆様の環境に合わせてens4の部分は変更してください。

sudo mkdir -p /etc/systemd/network/10-netplan-ens4.network.d/

sudo tee /etc/systemd/network/10-netplan-ens4.network.d/override.conf > /dev/null <<'EOF'
[BridgeVLAN]
VLAN=11
VLAN=21
VLAN=31
VLAN=41
VLAN=51
EOF

このコマンドでこの物理NICに通したいVLANを設定します。
このコマンド結果、設定ファイルが正しく作成されたかは以下のコマンドで確認します。

sudo cat /etc/systemd/network/10-netplan-ens4.network.d/override.conf

実行結果が

[BridgeVLAN]
VLAN=11
VLAN=21
VLAN=31
VLAN=41
VLAN=51

となっていればOKです。

くれぐれも仮想化ホストの管理用NICに設定変更を行わないように注意してください。

これらの設定が終わればsudo rebootで再起動しましょう。

設定反映確認

再起動が終わったらここまでの設定変更の結果が反映されているか確認します。
以下のコマンドを実行してください。

ip -d link show br1

実行結果に

vlan_filtering 1
vlan_default_pvid 0

と出てくればOKです。
続いて以下のコマンドも実行します。

bridge vlan show

実行結果のens4にVLAN11、21、31、41、51が登録されていることを確認します。

動作確認

Bridge NICであるbr1を接続した仮想マシンがDevTestVm01だったとします。
その場合以下のコマンドでDevTestVm01が接続されている仮想NICを確認します。

virsh domiflist DevTestVm01

virsh domiflistを実行すると、VMに接続されている仮想NICの情報が表示されます。
以下のような表示になります。

Interface   Type     Source   Model
------------------------------------
vnet0       bridge   br0      virtio
vnet1       bridge   br1      virtio

このうち、Sourceがbr1になっている仮想NICを確認します。
今回はvnet1が該当するため、このインターフェースに以下のコマンドでVLAN IDを割り当てます。

sudo bridge vlan add dev vnet1 vid 31 pvid untagged

このコマンドは対象のVMが起動中でも実行できます。
接続先のVLANでDHCPサーバーが動作していれば、VMはDHCPによってIPアドレスを取得できます。
VLANを変更しただけではDHCPの再取得が行われない場合もあるため、必要に応じてゲストOS側でDHCPリースを再取得してください。

所属するVLANの変更

また所属するVLANを変更する場合、今回だとVLAN31からVLAN21に変更する場合は以下のコマンドを実行します。

sudo bridge vlan del dev vnet1 vid 31
sudo bridge vlan add dev vnet1 vid 21 pvid untagged

delで既存のVLAN IDを消してからVLAN IDの初回設定時と同じくaddで対象のVLAN IDを追加します。

まとめ

今回の設定は仮想NICに割り当てたVLAN ID設定が永続化されずVMを再起動すると消えます。

sudo bridge vlan add dev vnet1 vid 31 pvid untagged

や

sudo bridge vlan del dev vnet1 vid 31
sudo bridge vlan add dev vnet1 vid 21 pvid untagged

で設定している部分です。
VMを再起動すると仮想NICが再生成されるため、VLAN IDを再設定する必要があります。
私の環境だと永続化させるとそれはそれで使い勝手が悪くなるため、あえて永続化させない構成にしています。

本日はここまで。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?