複数の物理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. 今回はメンドイので再起動の手順にしているけど、
サーバ自体の再起動が不要な方法もあるらすぃ
Yuta Hayakawa

Yuta Hayakawaマネージャー

投稿者プロフィール

普段は東京本社で社内システム開発を中心とした本社業務を担当しています。

最近、マネージャー(部長相当)職になりまして、不慣れなアレでアレしている毎日です。

音楽とコンピュータ関連、ゴルハム&ジャンハム関係、ゲーム関係が興味あるポイント。

この著者の最新の記事

関連記事

コメントは利用できません。

募集中!(o゜▽゜)o

エンジャパン
求む、社長!
follow us in feedly

コッチもヨロシク!





最近のネタ!

  1. 2018-10-18

    第9回テーブル部(ボードゲーム)~少人数でまったり~

    2018年8月25日に第9回となるテーブル部活動を開催しました! この日もいつも通り「ボードゲーム…
  2. 2018-10-17

    2018年10月度・第28回 福岡社員総会 & 懇親会

    はじめに 早いものでもうすっかり秋模様ですね🍁 のちほどお伝えする総会&懇親会の様子を見ていただ…
  3. 2018-10-15

    2018年9月度社員総会&懇親会@Tokyo 〜良い表情がいっぱいだね(o゜▽゜)o〜

    遅くなってしまったけれども…… 2018年10月度の社員総会&懇親会@Tokyoが今週末に控えてい…
  4. 2018-10-15

    第7回ボルダリング部 ~いざ! 大根おろしチャレンジ!~

    2018/10/7(土)にボルダリング部の活動がございました! どういう活動内容だったのかご紹介い…
  5. 2018-10-15

    JS で Canvas を操作するときは Konva が結構便利に使えます!

    HTML5 の canvas 使ってますか? こんにちは! 江嵜です。 みなさん、html5 の…
ページ上部へ戻る