CentOS 7 - NetworkManager

CentOS7 – Systemdに引き続き、CentOS7で大きな変更が入ったネットワーク系のコマンドについてのメモ。

NetworkManager


要点

  • RHEL7系ではネットワーク周りの設定をNetworkManagerを利用することが推奨されている(/etc/sysconfig/network-scripts/ 配下等のファイルを直接編集しない)
  • ネットワーク設定の一元管理が可能
  • nmtui、nmcliを使って変更をする
  • 「コネクション」という概念が導入され、接続タイプや各種アドレスなど接続単位でまとめて管理する
  • ひとつのネットワークインターフェースカード(NIC)に本番環境やテスト環境のコネクションを切り替えて使うことができる
# systemctl [ start | stop | restart | reload | status] NetworkManager

 

nmtui

  • テキストベースのUIで対話的に変更が可能
# nmtui

nmtuiを実行すると下のような画面が表示されます。直感的に操作出来ると思うので、詳細は省略。

nmtui

 

nmcli

  • コマンドベースで変更が可能
  • OPTIONS、OBJECTは前方一致で使用可能
  • -fields オプションで特定の設定のみ表示可能

[構文]

# nmcli
Usage: nmcli [OPTIONS] OBJECT { COMMAND | help }

OPTIONS
  -t[erse]                                   terse output
  -p[retty]                                  pretty output
  -m[ode] tabular|multiline                  output mode
  -f[ields] <field1,field2,...>|all|common   specify fields to output
  -e[scape] yes|no                           escape columns separators in values
  -n[ocheck]                                 don't check nmcli and NetworkManager versions
  -a[sk]                                     ask for missing parameters
  -w[ait] <seconds>                          set timeout waiting for finishing operations
  -v[ersion]                                 show program version
  -h[elp]                                    print this help

OBJECT
  g[eneral]       NetworkManager's general status and operations
  n[etworking]    overall networking control
  r[adio]         NetworkManager radio switches
  c[onnection]    NetworkManager's connections
  d[evice]        devices managed by NetworkManager

 

[device]

deviceを一覧表示

# nmcli device
DEVICE  TYPE      STATE                                  CONNECTION
ens32   ethernet  connected                              ens32
ens34   ethernet  connecting (getting IP configuration)  Wired connection 1
lo      loopback  unmanaged

従来はeth0等の表示でしたが、CentOS7のデフォルトではens32等で表示される
※ens34は後からNICを追加した状態

各deviceの詳細

# nmcli device show ens32
GENERAL.DEVICE:                         ens32
GENERAL.TYPE:                           ethernet
GENERAL.HWADDR:                         00:0C:29:01:5F:FF
GENERAL.MTU:                            1500
GENERAL.STATE:                          100 (connected)
GENERAL.CONNECTION:                     ens32
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/0
WIRED-PROPERTIES.CARRIER:               on
IP4.ADDRESS[1]:                         ip = 172.16.1.61/24, gw = 172.16.1.1
IP4.DNS[1]:                             192.168.1.61
IP6.ADDRESS[1]:                         ip = fe80::20c:29ff:fe01:5fff/64, gw = ::

 

[connection]

connectionの一覧表示

# nmcli connection
NAME                UUID                                  TYPE            DEVICE
Wired connection 1  21296268-c79e-4485-b47b-987f7eb8d86e  802-3-ethernet  ens34
ens32               96467296-1d90-4aa5-94a6-e9490f30d081  802-3-ethernet  ens32

 

各connectionの詳細

# nmcli connection show ens32
connection.id:                          ens32
connection.uuid:                        96467296-1d90-4aa5-94a6-e9490f30d081
connection.interface-name:              --
connection.type:                        802-3-ethernet
connection.autoconnect:                 yes
connection.timestamp:                   1416126032
connection.read-only:                   no
connection.permissions:
connection.zone:                        --
connection.master:                      --
connection.slave-type:                  --
connection.secondaries:
connection.gateway-ping-timeout:        0
802-3-ethernet.port:                    --
802-3-ethernet.speed:                   0
802-3-ethernet.duplex:                  --
802-3-ethernet.auto-negotiate:          yes
802-3-ethernet.mac-address:             00:0C:29:01:5F:FF
802-3-ethernet.cloned-mac-address:      --
802-3-ethernet.mac-address-blacklist:
802-3-ethernet.mtu:                     auto
802-3-ethernet.s390-subchannels:
802-3-ethernet.s390-nettype:            --
802-3-ethernet.s390-options:
ipv4.method:                            manual
ipv4.dns:                               192.168.1.61
ipv4.dns-search:
ipv4.addresses:                         { ip = 172.16.1.61/24, gw = 172.16.1.1 }
ipv4.routes:
ipv4.ignore-auto-routes:                no
ipv4.ignore-auto-dns:                   no
ipv4.dhcp-client-id:                    --
ipv4.dhcp-send-hostname:                yes
ipv4.dhcp-hostname:                     --
ipv4.never-default:                     no
ipv4.may-fail:                          no
ipv6.method:                            auto
ipv6.dns:
ipv6.dns-search:
ipv6.addresses:
ipv6.routes:
ipv6.ignore-auto-routes:                no
ipv6.ignore-auto-dns:                   no
ipv6.never-default:                     no
ipv6.may-fail:                          yes
ipv6.ip6-privacy:                       -1 (unknown)
ipv6.dhcp-hostname:                     --
GENERAL.NAME:                           ens32
GENERAL.UUID:                           96467296-1d90-4aa5-94a6-e9490f30d081
GENERAL.DEVICES:                        ens32
GENERAL.STATE:                          activated
GENERAL.DEFAULT:                        yes
GENERAL.DEFAULT6:                       no
GENERAL.VPN:                            no
GENERAL.ZONE:                           --
GENERAL.DBUS-PATH:                      /org/freedesktop/NetworkManager/ActiveConnection/0
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/Settings/0
GENERAL.SPEC-OBJECT:                    --
GENERAL.MASTER-PATH:                    --
IP4.ADDRESS[1]:                         ip = 172.16.1.61/24, gw = 172.16.1.1
IP4.DNS[1]:                             192.168.1.61
IP6.ADDRESS[1]:                         ip = fe80::20c:29ff:fe01:5fff/64, gw = ::

 

connection(インターフェース)の有効・無効

# 確認
# nmcli -fields GENERAL.STATE  connection show ens32
GENERAL.STATE:                          activated

# 有効
# nmcli connection up ens32

# 無効
# nmcli connection down ens32

 

connectionの変更

まずデバイスを確認(ens34はNICを追加しただけの状態)
# nmcli device
DEVICE  TYPE      STATE                                  CONNECTION
ens32   ethernet  connected                              ens32
ens34   ethernet  connecting (getting IP configuration)  Wired connection 1
lo      loopback  unmanaged                              --

connectionの確認
# nmcli connection
NAME                UUID                                  TYPE            DEVICE
Wired connection 1  21296268-c79e-4485-b47b-987f7eb8d86e  802-3-ethernet  ens34
ens32               96467296-1d90-4aa5-94a6-e9490f30d081  802-3-ethernet  ens32

connection'Wired connection 1'の名前を変更します。
# nmcli connection modify 'Wired connection 1' connection.id ens34
# nmcli connection show
NAME   UUID                                  TYPE            DEVICE
ens34  21296268-c79e-4485-b47b-987f7eb8d86e  802-3-ethernet  ens34
ens32  96467296-1d90-4aa5-94a6-e9490f30d081  802-3-ethernet  ens32

固定IPアドレス・DNSを設定
(IPアドレスは「IPアドレス/プレフィックス デフォルトゲートウェイ」で指定する)
# nmcli connection modify ens34 ipv4.method manual ipv4.addresses "192.168.1.161/24 192.168.1.1" 
# nmcli connection modify ens34 ipv4.dns "192.168.1.61" 

設定した内容を確認
# nmcli --fields ipv4 connection show ens34
ipv4.method:                            manual
ipv4.dns:                               192.168.1.61
ipv4.dns-search:
ipv4.addresses:                         { ip = 192.168.1.161/24, gw = 192.168.1.1 }
ipv4.routes:
ipv4.ignore-auto-routes:                no
ipv4.ignore-auto-dns:                   no
ipv4.dhcp-client-id:                    --
ipv4.dhcp-send-hostname:                yes
ipv4.dhcp-hostname:                     --
ipv4.never-default:                     no
ipv4.may-fail:                          yes

設定の一部を追加、削除する場合は+、-を使う
# nmcli connection modify ens34 +ipv4.dns "192.168.1.62" 
# nmcli --fields ipv4.dns connection show ens34
ipv4.dns:                               192.168.1.61, 192.168.1.62

# nmcli connection modify ens34 -ipv4.dns "192.168.1.62" 
# nmcli --fields ipv4.dns connection show ens34
ipv4.dns:                               192.168.1.61

設定の反映は再起動
# nmcli connection down ens34 ; nmcli connection up ens34
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)

 

connectionの追加 

  • ifname : device名に該当する
  • con-name : connection名に該当する

connectionを新規作成して未使用のdeviceに紐づけて有効化してみる

deviceのens35にconnection名eth0を設定
# nmcli connection add type eth ifname ens35 con-name eth0 ip4 172.16.1.62 gw4 172.16.1.1
Connection 'eth0' (f4913ff7-9c31-4f5f-8131-12b6a05c5228) successfully added.

設定の反映(eth0は今回新規で作成したので、upだけでよいと思う)
# nmcli connection down eth0 ; nmcli connection up eth0
Error: 'eth0' is not an active connection.
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/3)

deviceの確認
# nmcli device
DEVICE  TYPE      STATE      CONNECTION
ens32   ethernet  connected  ens32
ens34   ethernet  connected  ens34
ens35   ethernet  connected  eth0
lo      loopback  unmanaged  --

connectionの確認
# nmcli connection
NAME                UUID                                  TYPE            DEVICE
Wired connection 1  5d590530-d613-4fc4-b642-d886fffbeaaa  802-3-ethernet  --
ens34               d755abf5-d821-4002-9d43-6d41c32eee8d  802-3-ethernet  ens34
ens32               0d16ef59-0f1b-4423-ba86-1c8935552f09  802-3-ethernet  ens32
eth0                f4913ff7-9c31-4f5f-8131-12b6a05c5228  802-3-ethernet  ens35

 

connectionを新規作成して既存のdeviceに紐づけて有効化してみる

上記でconnection:eth0を紐づけたdevice:ens35にconnection:eth2を追加
# nmcli connection add type eth ifname ens35 con-name eth2 ip4 172.16.1.63 gw4 172.16.1.1
Connection 'eth2' (cbf99855-2103-4d19-99ce-2373c2a780d7) successfully added.

設定の反映(eth0を落として、eth2を立ち上げる)
# nmcli connection down eth0 ; nmcli connection up eth2
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/5)

device:ens35の紐付けがconnection:eth2に変わったことを確認
# nmcli device
DEVICE  TYPE      STATE      CONNECTION
ens32   ethernet  connected  ens32
ens34   ethernet  connected  ens34
ens35   ethernet  connected  eth2
lo      loopback  unmanaged  --

connectionの確認
# nmcli connection
NAME                UUID                                  TYPE            DEVICE
ens34               d755abf5-d821-4002-9d43-6d41c32eee8d  802-3-ethernet  ens34
ens32               0d16ef59-0f1b-4423-ba86-1c8935552f09  802-3-ethernet  ens32
eth2                cbf99855-2103-4d19-99ce-2373c2a780d7  802-3-ethernet  ens35
eth0                f4913ff7-9c31-4f5f-8131-12b6a05c5228  802-3-ethernet  --

 

connectionの切替え

  • 同じdeviceに登録しているactiveになっていないconnectionを立ち上げると切り替わるようです。
設定されているconnectionの確認
# nmcli connection
NAME                UUID                                  TYPE            DEVICE
Wired connection 1  5d590530-d613-4fc4-b642-d886fffbeaaa  802-3-ethernet  --
ens34               d755abf5-d821-4002-9d43-6d41c32eee8d  802-3-ethernet  ens34
ens32               0d16ef59-0f1b-4423-ba86-1c8935552f09  802-3-ethernet  ens32
eth3                3f64bbd6-8928-45e3-856f-76784e92b03c  802-3-ethernet  ens35
eth2                cbf99855-2103-4d19-99ce-2373c2a780d7  802-3-ethernet  --
eth0                f4913ff7-9c31-4f5f-8131-12b6a05c5228  802-3-ethernet  --

eth0を立ち上げてみる
# nmcli connection up eth0
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/8)

device:ens35の紐付けがconnection:eth0に変わった
# nmcli connection
NAME                UUID                                  TYPE            DEVICE
Wired connection 1  5d590530-d613-4fc4-b642-d886fffbeaaa  802-3-ethernet  --
ens34               d755abf5-d821-4002-9d43-6d41c32eee8d  802-3-ethernet  ens34
ens32               0d16ef59-0f1b-4423-ba86-1c8935552f09  802-3-ethernet  ens32
eth3                3f64bbd6-8928-45e3-856f-76784e92b03c  802-3-ethernet  --
eth2                cbf99855-2103-4d19-99ce-2373c2a780d7  802-3-ethernet  --
eth0                f4913ff7-9c31-4f5f-8131-12b6a05c5228  802-3-ethernet  ens35

 

その他

有効になっているIPアドレスの確認はifconfigではなく、ip addr showを使います。

# ip addr show

 

最後に

面倒くさいんですけど…
慣れの問題でしょうか…

参考

第1回 管理ツールがNetworkManagerに一元化
NetworkManagerの設定変更、nmtuiとnmcliについてまとめたよ!
CentOS7 ネットワークの設定変更
RHEL7のNICのネーミングルール