Ether ポートが1つしかない Intel NUC で動く仮想マシンに対し,ネットワークを冗長化する方法を紹介します.
背景
NUC と ESXi の組み合わせで運用している場合,メンテナンス等で有線 LAN が接続できなくても仮想マシンのネットワーク接続を維持したいことがあると思います.WiFi と Linux の bonding 機能を使ってこれを実現する方法を紹介します.
Linux のディストリビューションは,Ubuntu 22.04 Server 前提で記載しています.
設定手順
必要な設定は次の4点です.
- WiFi デバイスの仮想マシンへの接続
- 仮想マシンへのドライバーのインストール
- WiFi 接続ソフトのインストール
- Netplan の設定
以下,順に説明します.
WiFi デバイスの仮想マシンへの接続
ホストの設定で「Wireless-AC」のパススルーを有効し,仮想マシンの設定で PCI デバイスを追加します.
具体的な設定箇所は下図になります.
仮想マシンへのドライバーのインストール
1 |
% sudo apt-get install -y backport-iwlwifi-dkms |
デフォルトだと,iwlwifi ドライバでエラーが発生するので,MSI-X 割り込みを無効化するため,/etc/modprobe.d/iwlwifi.conf
に対して下記を追記します.
1 |
options iwlwifi disable_msix=1 |
ここで仮想マシンを一旦再起動しておきます.dmesg
を実行して下記のようにドライバが正常に動作していることが確認できればOKです.
1 2 3 4 5 6 7 8 9 |
% sudo dmesg (snip) [ 5.733229] iwlwifi 0000:0b:00.0: loaded firmware version 46.fae53a8b.0 9000-pu-b0-jf-b0-46.ucode op_mode iwlmvm [ 5.757366] iwlwifi 0000:0b:00.0: Detected Intel(R) Wireless-AC 9560 160MHz, REV=0x312 [ 5.757414] thermal thermal_zone0: failed to read out thermal zone (-61) [ 5.806513] iwlwifi 0000:0b:00.0: base HW address: dc:8b:28:10:01:71, OTP minor version: 0x4 [ 5.873237] ieee80211 phy0: Selected rate control algorithm 'iwl-mvm-rs' [ 5.919586] iwlwifi 0000:0b:00.0 wls192: renamed from wlan0 |
上記の場合,WiFi デバイスは wls192 として認識されていることが確認できます.
WiFi 接続ソフトのインストール
1 |
% sudo apt-get -y install wpasupplicant |
Netplan の設定
/etc/netplan/00-installer-config.yaml
を編集して,下記のように書き換えます.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
network: version: 2 renderer: networkd ethernets: ens160: dhcp4: false dhcp6: false wifis: wls192: dhcp4: false dhcp6: false access-points: XXXX: password: YYYY bonds: bond0: dhcp4: true interfaces: - ens160 - wls192 parameters: mode: active-backup arp-interval: 1000 arp-ip-targets: [ 192.168.0.1 ] primary: ens160 |
「XXXX」はアクセスポイントの SSID,「YYYY」はパスワードに置き換えてください.また,「192.168.0.1」は,ネットワーク接続を確認するための通信相手のアドレスになります.適宜ゲートウェイアドレスに置き換えてください.
下記のコマンドを実行すると,冗長化が確保された状態でネットワーク接続されます.
1 2 3 |
% sudo netplan generate % sudo netplan apply |
上記のように DHCP を使っている場合,bonding を使用することにより IP アドレスが変化するので注意お願いします.
ip addr
コマンドを実行すると,bond0 デバイスが生成されて,それに対して IP アドレスが付与していることが確認できます.(その代わりとして,ens160 や wls192 には IP アドレスが付与されなくなっています)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
% ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens160: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc fq_codel master bond0 state UP group default qlen 1000 link/ether a6:0d:56:d9:d0:d5 brd ff:ff:ff:ff:ff:ff permaddr 00:0c:29:9f:2f:b3 altname enp3s0 3: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether a6:0d:56:d9:d0:d5 brd ff:ff:ff:ff:ff:ff inet 192.168.0.20/21 metric 100 brd 192.168.7.255 scope global dynamic bond0 valid_lft 85179sec preferred_lft 85179sec inet6 fe80::a40d:56ff:fed9:d0d5/64 scope link valid_lft forever preferred_lft forever 4: wls192: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc noqueue master bond0 state UP group default qlen 1000 link/ether a6:0d:56:d9:d0:d5 brd ff:ff:ff:ff:ff:ff permaddr dc:8b:28:10:01:71 altname wlp11s0 |
コメント