前書き
Debian系Linuxのボンディング設定でハマったのでメモしたい。
ネット上にいろいろ情報は載っているのはわかってる。だけど言わせてくれ。
見かけ上ボンディングはできているが、片側のLANケーブルを抜いて挿し直すと、ネットワークが繋がらなくなるという現象が発生したんだ。
(片側のLANケーブルを抜いた時は大丈夫。だけどLANケーブルを挿し直すとPingが通らなくなるということがあったんだ)
備忘録として書いておこうと思う。
失敗した設定はあえて書かない。というかもう忘れてしまった。
それから話は別だけど、Linuxベースの仮想アプライアンスでProxmox VE(以下Proxmox)というものがあるのだが、Proxmoxでボンディング設定したインターフェースを、その上で動くゲストマシンにアサインする方法も書く。
参考にしたサイトは下記だ。
https://help.ubuntu.com/community/UbuntuBonding
ちなみに、ボンディングの検証を実施したディストリビューションとバージョンは下記のとおりである。
検証ディストリビューション | バージョン | IPアドレス |
Ubuntu | 18.04.2 LTS (Bionic Beaver) | 192.168.100.201 |
Debian (Proxmox VE) |
9.6 (stretch) (5.3) |
192.168.100.200 |
ボンディングの設定
まずはボンディング設定の流れを書いておこう。
まず、ボンディング設定に必要なパッケージ「ifenslave」をインストールする。
ちなみに、Proxmox VE 5.3ではすでにこのパッケージはインストールされていた。なのでUbuntuの場合に実施いただければと思う。
マシンがインターネットにつながっているならば、下記コマンドでインストールできる。
# apt-get install ifenslave
俺はオフラインサーバの状況を想定し、パッケージをダウンロードして[dpkg]コマンドでインストールした。
パッケージは下記サイトからダウンロードした。
https://packages.ubuntu.com/cosmic/ifenslave
ダウンロードしたパッケージを、「WinSCP」などの転送ツールを使用してUbuntuにアップロードする。
そしてアップロードしたディレクトリで、下記コマンドでインストールする。
# dpkg –install ifenslave_2.9ubuntu1_all.deb
ここからはUbuntuでもProxmoxでも行う設定である。
ちなみにこれからコマンド画面が多々出てくるが、すべてUbuntuのものを使用している。
viエディタで「/etc/modules」ファイルを開き、”bonding”を追記する。
# vi /etc/modules # /etc/modules: kernel modules to load at boot time. # # This file contains the names of kernel modules that should be loaded # at boot time, one per line. Lines beginning with “#” are ignored.bonding |
モジュールを読み込み、再起動する。
# modprobe bonding
# init 6
再起動後、ipコマンドで認識されているインターフェース名を確認する。
下の場合、「enp3s0」と「enp2s0」というインターフェース名で物理NICが認識されている。
初期設定ではDHCPとなっているため、それぞれのインターフェースに異なるIPアドレスが割り振られている。
# ip a
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: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether bc:5f:f4:68:ee:d3 brd ff:ff:ff:ff:ff:ff
inet 192.168.100.143/24 brd 192.168.100.255 scope global dynamic noprefixroute enp3s0
valid_lft 604710sec preferred_lft 604710sec
inet6 2001:268:c0e6:6f0a:dc72:9bdb:40b:3/128 scope global dynamic noprefixroute
valid_lft 7111sec preferred_lft 3511sec
inet6 2001:268:c0e6:6f0a:3d3f:615d:adc0:d2df/64 scope global temporary dynamic
valid_lft 7120sec preferred_lft 3520sec
inet6 2001:268:c0e6:6f0a:7efe:c83f:25f5:24b9/64 scope global dynamic mngtmpaddr noprefixroute
valid_lft 7120sec preferred_lft 3520sec
inet6 fe80::cbba:4a0e:f7f3:ea6f/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:1b:21:63:a8:1d brd ff:ff:ff:ff:ff:ff
inet 192.168.100.153/24 brd 192.168.100.255 scope global dynamic noprefixroute enp2s0
valid_lft 604717sec preferred_lft 604717sec
inet6 2001:268:c0e6:6f0a:dc72:9bdb:40b:2/128 scope global dynamic noprefixroute
valid_lft 7120sec preferred_lft 3520sec
inet6 2001:268:c0e6:6f0a:1111:acda:55bb:b3be/64 scope global temporary dynamic
valid_lft 7120sec preferred_lft 3520sec
inet6 2001:268:c0e6:6f0a:5b4e:794d:3bf7:ec62/64 scope global dynamic mngtmpaddr noprefixroute
valid_lft 7120sec preferred_lft 3520sec
inet6 fe80::8e98:c435:8862:eec6/64 scope link noprefixroute
valid_lft forever preferred_lft forever
「/etc/network/interface」ファイルをviエディタなどで開いて、以下のように編集する。今回のボンディングモードは「active-backup」とする。※基本的に「# LANカード#1」以降の記載は追記する。
# vi /etc/network/interfaces
# interfaces(5) file used by ifup(8) and ifdown(8)
auto lo
iface lo inet loopback# LANカード#1
auto enp3s0
iface enp3s0 inet manual
bond-master bond0# LANカード#2
auto enp2s0
iface enp2s0 inet manual
bond-master bond0# ボンディング設定
auto bond0
iface bond0 inet static
address 192.168.100.201
netmask 255.255.255.0
gateway 192.168.100.1
bond-mode active-backup
bond-miimon 100
bond-slaves none
そしたらネットワークをリスタートする。[ok]という表示が出れば問題ない。
# /etc/init.d/networking restart [ ok ] Restarting networking (via systemctl): networking.service. |
[ifconfig]コマンドを実行してみると、[bond0]インターフェースにIPアドレスが振られていることがわかる。
注目したいのは、ボンディングを組んでいる[enp2s0]と[enp3s0]のMACアドレスが同じになっていることだ。
# ifconfig bond0: flags=5187<UP,BROADCAST,RUNNING,MASTER,MULTICAST> mtu 1500 inet 192.168.100.201 netmask 255.255.255.0 broadcast 192.168.100.255 inet6 2001:268:c0e6:6f0a:21b:21ff:fe63:a81d prefixlen 64 scopeid 0x0<global> inet6 fe80::21b:21ff:fe63:a81d prefixlen 64 scopeid 0x20<link> inet6 2001:268:c0e6:6f0a:a849:89a2:7fbd:c783 prefixlen 64 scopeid 0x0<global> ether 00:1b:21:63:a8:1d txqueuelen 1000 (イーサネット) RX packets 3054 bytes 1105402 (1.1 MB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 2584 bytes 234850 (234.8 KB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0enp2s0: flags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST> mtu 1500 ether 00:1b:21:63:a8:1d txqueuelen 1000 (イーサネット) RX packets 68 bytes 5078 (5.0 KB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 device interrupt 16 memory 0xf7ec0000-f7ee0000enp3s0: flags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST> mtu 1500 inet 192.168.100.153 netmask 255.255.255.0 broadcast 192.168.100.255 inet6 fe80::e37e:519d:41d7:d1dd prefixlen 64 scopeid 0x20<link> ether 00:1b:21:63:a8:1d txqueuelen 1000 (イーサネット) RX packets 2986 bytes 1100324 (1.1 MB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 2584 bytes 234850 (234.8 KB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1000 (ローカルループバック) RX packets 214 bytes 17746 (17.7 KB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 214 bytes 17746 (17.7 KB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 |
ボンディングのステータスを確認するためには、「/proc/net/bonding/bond0」ファイルを確認する。
※ファイル名が[bond0]なのは、ここでのボンディングインターフェース名が[bond0]のためだ。
2つのインターフェースがup状態となっていることがわかる。
# cat /proc/net/bonding/bond0 Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)Bonding Mode: fault-tolerance (active-backup) Primary Slave: None Currently Active Slave: enp3s0 MII Status: up MII Polling Interval (ms): 100 Up Delay (ms): 0 Down Delay (ms): 0Slave Interface: enp2s0 MII Status: up Speed: 100 Mbps Duplex: full Link Failure Count: 1 Permanent HW addr: 00:1b:21:63:a8:1d Slave queue ID: 0Slave Interface: enp3s0 MII Status: up Speed: 1000 Mbps Duplex: full Link Failure Count: 0 Permanent HW addr: bc:5f:f4:68:ee:d3 Slave queue ID: 0 |
ここで、[enp2s0]インターフェースのLANケーブルを抜いてみる。「/proc/net/bonding/bond0」ファイルを確認すると、enp2s0がdown状態になったことがわかる。
# cat /proc/net/bonding/bond0 Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)Bonding Mode: fault-tolerance (active-backup) Primary Slave: None Currently Active Slave: enp3s0 MII Status: up MII Polling Interval (ms): 100 Up Delay (ms): 0 Down Delay (ms): 0Slave Interface: enp2s0 MII Status: down Speed: Unknown Duplex: Unknown Link Failure Count: 2 Permanent HW addr: 00:1b:21:63:a8:1d Slave queue ID: 0Slave Interface: enp3s0 MII Status: up Speed: 1000 Mbps Duplex: full Link Failure Count: 0 Permanent HW addr: bc:5f:f4:68:ee:d3 Slave queue ID: 0 |
ログ(/var/log/syslog)でも、enp2s0がdownしたと記録されている。
※余談だが、Debian(Proxmox)のログファイルは「/var/log/messages」であった。
# tail /var/log/syslog Mar 10 20:34:06 atsushi-desktop colord-sane: io/hpmud/pp.c 627: unable to read device-id ret=-1 Mar 10 20:38:58 atsushi-desktop gnome-session[1695]: gnome-session-binary[1695]: WARNING: Could not get session path for session. Check that logind is properly installed and pam_systemd is getting used at login. Mar 10 20:38:58 atsushi-desktop gnome-session-binary[1695]: WARNING: Could not get session path for session. Check that logind is properly installed and pam_systemd is getting used at login. Mar 10 20:39:09 atsushi-desktop rtkit-daemon[1848]: Supervising 2 threads of 1 processes of 1 users. Mar 10 20:39:09 atsushi-desktop rtkit-daemon[1848]: Successfully made thread 2472 of process 1846 (n/a) owned by ‘1000’ RT at priority 5. Mar 10 20:39:09 atsushi-desktop rtkit-daemon[1848]: Supervising 3 threads of 1 processes of 1 users. Mar 10 20:39:09 atsushi-desktop unity-settings-[1679]: failed to turn the kbd backlight off: GDBus.Error:org.freedesktop.DBus.Error.UnknownMethod: パス /org/freedesktop/UPower/KbdBacklight のオブジェクト上にインターフェース ‘org.freedesktop.UPower.KbdBacklight’ がありません Mar 10 20:39:09 atsushi-desktop unity-settings-[1679]: Unable to get default sink Mar 10 20:39:25 atsushi-desktop kernel: [ 1654.980058] e1000e: enp2s0 NIC Link is Down Mar 10 20:39:25 atsushi-desktop kernel: [ 1655.079956] bond0: link status definitely down for interface enp2s0, disabling it |
ここで、[enp2s0]のLANケーブルを挿し直してみる。
まずログを確認すると、[enp2s0]がup状態になったことがわかる。
# tail /var/log/syslog Mar 10 20:39:25 atsushi-desktop kernel: [ 1654.980058] e1000e: enp2s0 NIC Link is Down Mar 10 20:39:25 atsushi-desktop kernel: [ 1655.079956] bond0: link status definitely down for interface enp2s0, disabling it Mar 10 20:40:56 atsushi-desktop NetworkManager[978]: <info> [1552218056.6871] device (enp2s0): carrier: link connected Mar 10 20:40:56 atsushi-desktop kernel: [ 1746.148510] e1000e: enp2s0 NIC Link is Up 100 Mbps Full Duplex, Flow Control: Rx/Tx Mar 10 20:40:56 atsushi-desktop kernel: [ 1746.148628] e1000e 0000:02:00.0 enp2s0: 10/100 speed: disabling TSO Mar 10 20:40:56 atsushi-desktop kernel: [ 1746.180447] bond0: link status definitely up for interface enp2s0, 100 Mbps full duplex |
ボンディングステータスを確認しても、[enp2s0]がup状態になっていることがわかる。
# cat /proc/net/bonding/bond0 Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)Bonding Mode: fault-tolerance (active-backup) Primary Slave: None Currently Active Slave: enp3s0 MII Status: up MII Polling Interval (ms): 100 Up Delay (ms): 0 Down Delay (ms): 0Slave Interface: enp2s0 MII Status: up Speed: 100 Mbps Duplex: full Link Failure Count: 2 Permanent HW addr: 00:1b:21:63:a8:1d Slave queue ID: 0Slave Interface: enp3s0 MII Status: up Speed: 1000 Mbps Duplex: full Link Failure Count: 0 Permanent HW addr: bc:5f:f4:68:ee:d3 Slave queue ID: 0 |
ちなみにこの後、[enp3s0]の抜き差しもやってみたが、問題なかった。
Proxmox上の仮想マシンにボンディングした仮想NICを割り当てる
ここからはProxmoxの話だ。Ubuntuは関係なくなるのであしからず。
Proxmox(仮想アプライアンス)上の仮想マシンに、ボンディング設定したインターフェースを割り当てる方法を書く。
方法は簡単だ。ブリッジアダプタを作成し、そのブリッジアダプタにボンディングインターフェースを割り当てるだけだ。
「/etc/network/interfaces」ファイルを以下のように編集する。具体的には、[bond0]はmanualとしてIPアドレスを外し、ブリッジアダプタにIPアドレスを割り振る。
# vi /etc/network/interfaces
auto lo
iface lo inet loopback
# LANカード#1
auto enp2s0
iface enp2s0 inet manual
bond-master bond0
# LANカード#2
auto enp3s0
iface enp3s0 inet manual
bond-master bond0
# ボンディング設定
auto bond0
iface bond0 inet manual
bond-mode active-backup
bond-miimon 100
bond-slaves none
# ブリッジ設定
auto vmbr0
iface vmbr0 inet static
address 192.168.100.200
netmask 255.255.255.0
gateway 192.168.100.1
bridge_ports bond0
bridge_stp off
bridge_fd 0
そしたらマシンを再起動する。(ネットワークの再起動だけでは無理だった)
# init 6
[ifconfig]コマンドを実行すると、以下のような感じだ。ブリッジアダプタ(vmbr0)にIPアドレスが割り振られていることがわかる
# ifconfig
bond0: flags=5187 mtu 1500
ether 00:1b:21:63:a8:1d txqueuelen 1000 (Ethernet)
RX packets 262 bytes 21571 (21.0 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 154 bytes 14459 (14.1 KiB)
TX errors 0 dropped 3 overruns 0 carrier 0 collisions 0
enp2s0: flags=6211 mtu 1500
ether 00:1b:21:63:a8:1d txqueuelen 1000 (Ethernet)
RX packets 124 bytes 11090 (10.8 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 67 bytes 5972 (5.8 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 16 memory 0xf7ec0000-f7ee0000
enp3s0: flags=6211 mtu 1500
ether 00:1b:21:63:a8:1d txqueuelen 1000 (Ethernet)
RX packets 138 bytes 10481 (10.2 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 87 bytes 8487 (8.2 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73 mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10
loop txqueuelen 1000 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
vmbr0: flags=4163 mtu 1500
inet 192.168.100.200 netmask 255.255.255.0 broadcast 192.168.100.255
inet6 2001:268:c0e5:f03f:21b:21ff:fe63:a81d prefixlen 64 scopeid 0x0
inet6 fe80::21b:21ff:fe63:a81d prefixlen 64 scopeid 0x20
ether 00:1b:21:63:a8:1d txqueuelen 1000 (Ethernet)
RX packets 167 bytes 13037 (12.7 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 158 bytes 14373 (14.0 KiB)
このブリッジアダプタを仮想マシンにアタッチすればよい。
つまり言いたいことは、ボンディングアダプタをそのまま仮想マシンにアタッチすることはできないということ。ボンディングアダプタをブリッジアダプタにアサインして、そのブリッジアダプタを仮想マシンにアタッチするという流れだ。
ワンクッション置くということだね。
後書き
読んでいただきありがとうございました。
メインはDebian系ディストリビューションでのボンディング設定についてでしたが、ボンディングアダプタを仮想マシンにアサインできないということにも俺は少しつまずいた。
少しでもお役に立てたならば幸いです。
コメント