CentOS7/ネットワーク設定


CentOS7(nmcli)ネットワーク設定

基本的にはCentOS7.1以降の設定を記述してますが、CentOS7.0の場合でやり方が異なることが分かっている箇所はその旨記載しています。
CentOS7.0とCentOS7.1以降で微妙にコマンドの書式が変わってたりコマンド実行後に即座に設定が有効になったりしてるので、CentOS7.0で同じようにやってうまくいかなかったら別の方法を試して下さい。(適当)

ネットワーク設定反映

IPアドレス変更したりした場合以前は/etc/init.d/network restartかなんかで反映させてたが、どうやら確実ではないようなので、インタフェースをupすることで反映させましょう。
# nmcli c m em1 ipv4.method manual ipv4.addresses "192.168.0.100/24" ipv4.gateway "192.168.0.1" ipv4.dns "192.168.100.1, 192.168.100.2" ←変更
# nmcli c u em1 ←反映

インタフェース追加

こんな感じ
# nmcli c a type ethernet autoconnect yes con-name em1 ifname em1
con-nameは任意の識別名、ifnameはバインドさせたい物理インタフェース
ethernet以外にもデバイスタイプがあるので、よく分からなかったら nmcli c a -h で概要が表示されます。

固定IPにする

CentOS7.0の場合はこんな感じです。
# nmcli c m em1 ipv4.method manual ipv4.addresses "192.168.0.100/24 192.168.0.1" ipv4.dns "192.168.100.1, 192.168.100.2"
# nmcli c u em1
ipv4.addressesの2番目に指定するのはデフォルトゲートウェイです。

なお、CentOS7.1以降はデフォルトゲートウェイの設定が分離した模様。
上の方に書いてあるのと同じですが、こんな感じです。
# nmcli c m em1 ipv4.method manual ipv4.addresses "192.168.0.100/24" ipv4.gateway "192.168.0.1" ipv4.dns "192.168.100.1, 192.168.100.2"
# nmcli c u em1
こっちの方がIPアドレスに関係なくデフォルトゲートウェイだけ変更できるので便利ですね。
CentOS7.0は今すぐやめて是非ともCentOS7.1以降にするべきですね。

複数IP付ける場合は+ipv4.addressesでやるそうです。
# nmcli c m em1 ipv4.method manual ipv4.addresses "192.168.0.100/24" +ipv4.addresses "192.168.0.101/24" ipv4.gateway "192.168.0.1" ipv4.dns "192.168.100.1, 192.168.100.2"
# nmcli c u em1

動的IPにする

固定IPだったのを動的IPに戻す場合は固定IPを空にします。
そうしないと動的IPと固定IPが両方割り当てられてしまいます。
# nmcli c m em1 ipv4.method auto ipv4.addresses "" ipv4.dns ""
# nmcli c u em1

bonding設定

これはこのへんのサイトを見てやったらすぐできました。

デバイス作成
# nmcli c a type bond autoconnect yes con-name bond0 ifname bond0 mode active-backup
slave登録
# nmcli c a type bond-slave autoconnect yes ifname em1 master bond0
アドレス設定
# nmcli c m bond0 ipv4.method manual ipv4.addresses "192.168.0.100/24 192.168.0.1" ipv4.dns "192.168.0.1, 192.168.0.2"
反映
# nmcli c u bond-slave-em1
# nmcli c u bond0 ←いらないかも?
ケーブル接続して導通取れたらslave追加
# nmcli c a type bond-slave autoconnect yes ifname em2 master bond0
インタフェース起動
# nmcli c u bond-slave-em2
大元のインタフェースは落としておく
# nmcli c d em1
# nmcli c d em2
# nmcli c m em1 connection.autoconnect no
# nmcli c m em2 connection.autoconnect no

bridge設定

調べても意外と出てこなかったので頑張って設定してみた。
なおbridgeを設定するのは仮想環境の使用を想定しているはずなので、それ用の設定も少し入っています。

bridgeデバイス作成
# nmcli c a type bridge autoconnect yes con-name br0 ifname br0
動きが怪しくなるのでstpとipv6を無効にする。
# nmcli c m br0 bridge.stp no ipv6.method ignore
slave登録
# nmcli c m em1 connection.master br0 connection.slave-type bridge
もしem1等の物理インタフェースが無い場合は先に nmcli c a で作成しておくこと。

必要に応じてip設定
# nmcli c m br0 ipv4.method manual ipv4.addresses "192.168.0.100/24 192.168.0.1" ipv4.dns "192.168.0.1, 192.168.0.2"
反映
# nmcli c d br0
# nmcli c d em1
# nmcli c u em1

VLAN設定

VLAN設定です。これは簡単ですね。

VLANインタフェース作成
# nmcli c a type vlan autoconnect yes con-name vlan.100 ifname vlan.100 dev em1 id 100
反映
# nmcli c u vlan.100

bonding+bridge

実際のサービスではこの形が主流だろう。
疎通取れるまでやってみたが、結構大変だった。

bondingデバイス作成
# nmcli c a type bond autoconnect yes con-name bond0 ifname bond0 mode active-backup
slave登録
# nmcli c a type bond-slave autoconnect yes ifname em1 master bond0
# nmcli c a type bond-slave autoconnect yes ifname em2 master bond0
bridgeデバイス作成
# nmcli c a type bridge autoconnect yes con-name br0 ifname br0
動きが怪しくなるのでstpとipv6を無効にする。
# nmcli c m br0 bridge.stp no ipv6.method ignore
bondingデバイス編集
# nmcli c m bond0 connection.master br0 connection.slave-type bridge
CentOS7.0の場合は↑のコマンドは↓のように分けて実行する必要があります。
# nmcli c m bond0 connection.master br0
# nmcli c m bond0 connection.slave-type bridge
ip設定
# nmcli c m br0 ipv6.method ignore ipv4.method manual ipv4.addresses "192.168.0.100/24" ipv4.gateway "192.168.0.1" ipv4.dns "192.168.0.1, 192.168.0.2"
CentOS7.0の場合はゲートウェイの設定が異なりますのでご注意下さい。

反映
# nmcli c u bond-slave-em1
# nmcli c u bond-slave-em2
# nmcli c u bond0 ←いらないかも?
# nmcli c u br0 ←いらないかも?
bridge-slaveのbondデバイスを一発で作るやり方が分からなかったので難儀しました。
結局bondを作った後にconnection.masterとconnection.slave-typeを指定してbridge-slaveにするやり方を発見しましたが、他に正しいやり方があるのかどうかは知りません。

設定後、各インタフェースは落としておきます。
# nmcli c d em1
# nmcli c d em2
# nmcli c m em1 connection.autoconnect no
# nmcli c m em2 connection.autoconnect no

VLAN+bridge

vlanデバイスを複数作り、その上に仮想ノードが接続するbridgeを作成する形です。
どうしてもスイッチの.1qポート内のVLANのネットワークに仮想マシンを繋ぎたい場合のやり方。

CentOS7.1以前はVLAN+bridgeに仮想ノードを接続するとインタフェースが落ちてしまう現象が発生していました。
どうやらCentOS7.2になってようやくまともに動くようになったようなので、これを利用する場合はCentOS7.2以降にアップグレードして下さい。
なおCentOS7.2においても動作がおかしい所があるので使用の際はご注意下さい。
詳細はこちらのページへどうぞ。

動作に関係しているかは分からないが、defaultブリッジを削除しておく。
# virsh net-destroy default
# virsh net-undefine default

VLAN用bridgeデバイス追加
# nmcli c a type bridge autoconnect yes con-name br100 ifname br100
動きが怪しくなるのでstpとipv6を無効にする。
# nmcli c m br100 bridge.stp no ipv6.method ignore
VLANデバイス追加
# nmcli c a type vlan autoconnect yes con-name vlan.100 dev em1 id 100
VLANデバイスをbridgeのslaveに設定
# nmcli c m vlan.100 connection.master br100 connection.slave-type bridge
反映
# nmcli c d vlan.100
# nmcli c u vlan.100
上記をVLANの個数分だけやればOK。
con-nameとかifnameは適当なので任意に付けて頂ければと。
当然ですが、仮想ノードのnetworkはbr100とかに対してバインドして下さいね。

CentOS7.1以前は、作成したbridgeに接続した仮想ノードを起動するとbridgeが落ちるという現象が発生していました。
エラーとしては以下の様な物が出たりします。
エラー: 接続のアクティベーションに失敗: Master device br100 unmanaged or not available for activation

またmessagesには
device state change: disconnected -> unmanaged (reason 'removed')
などというエラーが出たりしました。

また、CentOS7.0の時は作成したVLANがOS起動時に自動的に起動してこないという現象がありました。

前述の通り、VLAN+bridgeを使用する場合はCentOS7.2以降にすることを強く推奨します。
ただしCentOS7.2でも不具合?があり、bridgeに仮想ノードを接続したままbridgeのup等を行うと、仮想ノードとbridgeの接続が切れて自動的には復帰しません。(当たり前と言えば当たり前かもしれませんが)
詳細はこちらのページへどうぞ。

bonding+VLAN+bridge

bondingのパターン。
こちらの場合もVLAN+bridgeの時と同様、CentOS7.2以降を使用することを強く推奨します。

bondingデバイス作成
# nmcli c a type bond autoconnect yes con-name bond0 ifname bond0 mode active-backup
slave登録
# nmcli c a type bond-slave autoconnect yes ifname em1 master bond0
# nmcli c a type bond-slave autoconnect yes ifname em2 master bond0
VLAN用bridgeデバイス追加
# nmcli c a type bridge autoconnect yes con-name br100 ifname br100
動きが怪しくなるのでstpとipv6を無効にする。
# nmcli c m br100 bridge.stp no ipv6.method ignore
VLANデバイス追加
# nmcli c a type vlan autoconnect yes con-name vlan.100 dev bond1 id 100
VLANデバイスをbridgeのslaveに設定
# nmcli c m vlan.100 connection.master br100 connection.slave-type bridge

bondがautoの状態だと色々面倒なので無効にしておきます。
# nmcli c m bond0 ipv4.method disabled ipv6.method ignore

反映
# nmcli c d vlan.100
# nmcli c u vlan.100

こちらも当然ですがvlan+bridgeの時と同様のトラブルが発生するのでご注意下さい。

Error: Device '***' is waiting for slaves before proceeding with activation.

日本語だと
エラー: デバイス '***' はアクティベートのプロセスを開始する前にスレーブを待機しています
というエラー。

このエラーは通常はnmcli c uなどで変更をインタフェースに反映させる際に出る物で、スレーブを上げる前にマスターを上げてしまった時に起きるようだ。
エラーの内容からも分かるように、結局の所masterを上げる時には先にslave側から上げていきましょうということ。
多段になっても、迷って分からなくなった時には下から上に向かって上げていくことを意識すれば大丈夫だと思います。

ただしCentOS7.1では特に意識せずに関連するデバイスも同時に上げてくれるようなので、CentOS7.0の場合に固有の問題のようです。
一番いいのはCentOS7.0をやめて7.1にアップグレードすることだと思います。

今回centos7のネットワーク設定している時に何度か目にしたので再現方法や回避方法などを書いておく。

bonding

一番最初に目にしたのはこのパターン。(slaveが一つしか無いのはここでは気にしない)
# nmcli c a type bond autoconnect yes con-name bond0 ifname bond0 mode active-backup
# nmcli c a type bond-slave autoconnect yes ifname enp1s0f0 master bond0
# nmcli c u bond0
Error: Device 'bond0' is waiting for slaves before proceeding with activation.
slave(enp1s0f0)を上げずにmaster(bond0)を上げているので発生しているんでしょうかね。
回避するにはbondingのslaveを先に立ち上げる。
# nmcli c u bond-slave-enp1s0f0
そうするとbondの方も勝手に上がってくる。
この状態だとbondのIPはDHCPからの自動取得になるので、変更と反映はこんな感じで行う。
# nmcli c m bond0 ipv4.method manual ipv4.addresses "192.168.0.100/24 192.168.0.1" ipv4.dns "192.168.0.1, 192.168.0.2"
# nmcli c u bond0
既にslaveが起動していればbondをupするだけで反映される。
slaveが起動していない時は当然先のエラーが出るのでslaveを起動しましょう。

bonding+bridge

bondingの状態からbridgeを噛ませる。
まずは一旦bondのIP設定を無効にしておく。bridgeのslaveにする時にまとめてでもいいけど切り分けしやすくするため。
# nmcli c m bond0 ipv4.method disabled ipv4.addresses "" ipv4.dns ""
# nmcli c d bond0
# nmcli c u bond-slave-enp1s0f0
ちなみにこのIP設定を無効にするコマンドをnmcli c u bond0で一発でやろうとすると、90秒のタイムアウトを待たされる。
バグだか仕様だかは分かりませんがいずれにしても設定自体は問題無く反映されてv4アドレスが無くなります。
とりあえず待つのは面倒なのでここではこのやり方で。

改めてbridgeの追加とbondのbridge-slave化。
反映はbondのupで行うと、masterのbridgeは勝手に上がってくる。
# nmcli c a type bridge autoconnect yes con-name br0 ifname br0
# nmcli c m bond0 connection.master br0
# nmcli c m bond0 connection.slave-type bridge
# nmcli c u bond0
bridgeにIP振る場合はこんな感じですね。
# nmcli c m br0 ipv4.method manual ipv4.addresses "192.168.0.100/24 192.168.0.1" ipv4.dns "192.168.0.1, 192.168.0.2"
# nmcli c u br0

bonding+bridge+VLAN

更にVLANが入ってくるとどれを先に上げればいいのかってのがより分かりにくくなる。
とりあえず設定。
上げるのはVLANデバイス。
# nmcli c a type bridge autoconnect yes con-name br0.100 ifname br0.100
# nmcli c a type vlan autoconnect yes con-name vlan.100 ifname vlan.100 dev br0 id 100
# nmcli c m vlan.100 connection.master br0.100
# nmcli c m vlan.100 connection.slave-type bridge
# nmcli c u vlan.100
これで自動でIPが振られる。
固定にする場合はこう。

# nmcli c m br0.100 ipv4.method manual ipv4.addresses "192.168.0.100/24 192.168.0.1" ipv4.dns "192.168.0.1, 192.168.0.2"
# nmcli c u br0.100
# nmcli c u vlan.100
ここで注意が必要なのは、nmcli c u br0.100をした時にVLANデバイスが落ちてしまうこと。
これを回避する方法は今の所分からないので、素直にslaveであるVLANデバイスを起動することで対応する。

また、アドレスがmanualではなくdisabled、もしくはautoの状態でnmcli c u br0.100をすると例のエラーが出る。
# nmcli c m br0.100 ipv4.method disabled ipv4.addresses "" ipv4.dns ""
# nmcli c u br0.100
Error: Device 'br0.100' is waiting for slaves before proceeding with activation.
# nmlic c u vlan.100
対応としては固定の時と同様、VLANデバイスを起動すれば良い。
あと、上でも書いてますがこのVLANデバイスはOSを再起動した時にも自動的に上がってきてくれないのでご注意下さい。



参考サイト

  • 最終更新:2016-07-13 11:47:47

このWIKIを編集するにはパスワード入力が必要です

認証パスワード