自主的20%るぅる

各々が自主的に好き勝手書くゆるふわ会社ブログ

複数の物理NICを搭載したCentOS7なLinux BoxでBonding+Bridgeな構成を実現するための個人的メモ

しばらくハマってた……

先日無事にリニューアルオープンした社内Lab。

使用しているハードウェアにNIC(Network Interface Card)をふたつ搭載しているってのもあり、今後の使用状況的にちょっとネットワーク周りもちゃんとしておこうという思いもありで……。

Bonding+Bridge1)Bridgeの方はlxcとかで使う用な構成を実装してみようと思い立ったのです。

……が、これが結構ハマリまして(;´Д`)

BondingかBridgeのどちらか一方だけならサクッといけるんですが、コレを組み合わせようと思ったら上手くいかず……。ひとり悶々と「(`皿´)ムッキー!!」していたわけですが……。

完璧とは言いませんが、ようやくそれっぽくアレできるようになったので、将来の自分が「(`皿´)ムッキー!!」しなくて済むように備忘録がてらブログにまとめておこうと思います。

ここからのお約束だよ(`・ω・´)

とはいえ、このまま進むと説明がアレになってしまうので、RFC 6890 – Special-Purpose IP Address Registries2)と、ついでにRFC 5737 – IPv4 Address Blocks Reserved for Documentation(ついでのついでに、RFC 3849 – IPv6 Address Prefix Reserved for Documentationに基づいて、下記のIPアドレス等を使用したものとしてアレします。

用途 アドレス等 備考
ネットワークアドレス 192.0.2.0 TEST-NET-1
サブネットマスク 255.255.255.0 /24
ブロードキャスト
アドレス
192.0.2.255  
ルータ 192.0.2.1  
物理NIC 192.0.2.10(eth0)
192.0.2.11(eth1)
 
Bonding+Bridgeした後の仮想NIC 192.0.2.12  

メモを元に手順を整理する〜ぅ

設定したときに作ったメモを元に、手順を整理していきませぅ。

今回はNICを2つ装備したハードウェアに、CentOS7(Minimal ISO)をインストールしたものを使っています。OSのインストール時に、2つのNICには固定IPをアサインしています。

あと、(この設定を入れた時点では)rootユーザしかいない環境なのでアレですが、実際にやるときは一般ユーザを作ってsudoとかアレするかんじでやるのがいいかとおもいます。

まずは現状の設定を確認

さて、まずは普通に起動してみて、現状どうなっているかを確認してみましょう。

# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    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
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether nn:nn:nn:nn:nn:nn brd ff:ff:ff:ff:ff:ff
    inet 192.0.2.10/24 brd 192.0.2.255 scope global eth0
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether nn:nn:nn:nn:nn:nn brd ff:ff:ff:ff:ff:ff
    inet 192.0.2.11/24 brd 192.0.2.255 scope global eth1
       valid_lft forever preferred_lft forever       

# nmcli connection
名前    UUID                                  タイプ          デバイス
eth0    nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn  802-3-ethernet  eth0
eth1    nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn  802-3-ethernet  eth1

# nmcli device
デバイス  タイプ    状態      接続
eth0    ethernet  接続済み  eth0
eth1    ethernet  接続済み  eth1
lo      loopback  管理無し  --

ちゃんと認識されているようですね!

Bridgeを設定する

まずはBridgeの設定を入れていきましょう。やりかたは簡単で、下記のようにすればOK。

1つ目のコマンドでブツを追加し、2つ目のコマンドで細かい設定を入れていく……って感じですね。

# nmcli connection add type bridge con-name br0 ifname br0
接続 'br0' (nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn) が正常に追加されました。
# nmcli connection modify br0 bridge.stp no ipv4.method manual ipv4.address "192.0.2.12/24" ipv4.gateway 192.0.2.1 ipv4.dns "8.8.8.8 8.8.4.4"

Bondingを設定する

続いて、Bondingの設定をば。

Bondingができるようにするには、カーネルモジュールをロードしなければなりません。3)たぶん、標準ではロードされていないので

lsmodで「bonding」関係のモジュールがロードされているかを確認し、されていなければmodprobeでロードしましょう。

# lsmod | grep bonding
# modprobe bonding
# lsmod | grep bonding
bonding               145728  0

ここまでくれば後は簡単。

1つ目のコマンドでブツを追加し、2つ目のコマンドでBridgeのブツと紐付ける。3つ目と4つ目のコマンドで2つの物理NICをBondingなブツに紐付ける……という流れですね。

# nmcli connection add type bond ifname bond0 con-name bond0 mode active-backup
接続 'bond0' (nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn) が正常に追加されました。
# nmcli connection mod bond0 connection.master br0 connection.slave-type bridge
# nmcli connection add type bond-slave ifname eth0 con-name bond-slave-eth0 master bond0
接続 'bond-slave-eth0' (nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn) が正常に追加されました。
# nmcli connection add type bond-slave ifname eth1 con-name bond-slave-eth1 master bond0
接続 'bond-slave-eth1' (nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn) が正常に追加されました。

あとは物理NICの設定を消して、サーバを再起動4)今回はメンドイので再起動の手順にしているけど、
サーバ自体の再起動が不要な方法もあるらすぃ
すればOK。

# nmcli connection del eth0 && nmcli connection del eth1 && shutdown -r now

最終確認

再起動が終わって、192.0.2.12宛にSSHで接続できるようになっていればOK。

# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    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
2: eth0: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond0 state UP qlen 1000
    link/ether nn:nn:nn:nn:nn:nn brd ff:ff:ff:ff:ff:ff
3: eth1: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond0 state UP qlen 1000
    link/ether nn:nn:nn:nn:nn:nn brd ff:ff:ff:ff:ff:ff
4: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000
    link/ether nn:nn:nn:nn:nn:nn brd ff:ff:ff:ff:ff:ff
    inet 192.0.2.12/24 brd 192.0.2.255 scope global br0
       valid_lft forever preferred_lft forever
5: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue master br0 state UP qlen 1000
    link/ether nn:nn:nn:nn:nn:nn brd ff:ff:ff:ff:ff:ff

# nmcli connection
名前               UUID                                  タイプ          デバイス
bond-slave-eth0    nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn  802-3-ethernet  eth0
bond-slave-eth1    nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn  802-3-ethernet  eth1
bond0              nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn  bond            bond0
br0                nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn  bridge          br0

# nmcli device
デバイス  タイプ    状態      接続
bond0     bond      接続済み  bond0
br0       bridge    接続済み  br0
eth0      ethernet  接続済み  bond-slave-eth0
eth1      ethernet  接続済み  bond-slave-eth1
lo        loopback  管理無し  --

この状態でcat /proc/net/bonding/bond0とかしながら、他のPCからpingとか打ちつつ線を抜き差しして動作検証をすればbondingのテストはできるはず。

Bridgeのテストについては、適当にlxcのインスタンスを立ち上げて「VM→外部」と「外部→VM」の疎通が取れればOK。

……こんな感じで大丈夫かしら……?

手元の構築メモを見ながら手順まとめてみたわけですが、多分こんな感じで設定すればOK!……なはず(;´Д`)

この記事にはn個のコピペミスとか設定の漏れとか根本的な勘違いとかあるかと思いますので、ボク以外の人がこのエントリを参考にするようなことがあったときはお気を付けください。

あと、間違いなどを見つけた方はコッソリとボクに教えてください 壁|_=)

Appendix: このエントリより役に立つだろう参考文献

参考までにボクがこのエントリを書くまでに参照したサイトを、参考文献として列挙しておきます。

順不同/敬称略です。

注訳はこちら

注訳はこちら
1 Bridgeの方はlxcとかで使う用
2 と、ついでにRFC 5737 – IPv4 Address Blocks Reserved for Documentation(ついでのついでに、RFC 3849 – IPv6 Address Prefix Reserved for Documentation
3 たぶん、標準ではロードされていないので
4 今回はメンドイので再起動の手順にしているけど、
サーバ自体の再起動が不要な方法もあるらすぃ
Let’s share this article!

{ 関連記事 }

{ この記事を書いた人 }

アバター画像
Yuta Hayakawa

2016年6月入社。2020年12月より取締役に就任しました。

普段は東京本社で管理職のお仕事したり、広報的役割としてテキスト書いたり動画作ったりするのが最近のお仕事。

自称「社内システムチーム統括」として、社内システムチームの面々を見守りつつ毎日を過ごしています。

プライベート面では、音楽やコンピュータ関連、ゴルハム&ジャンハム関係、ゲーム関係が興味あるポイント。

あと、我が子可愛い。

記事一覧