RHEL7 RCでネットワーク周りで躓いたのでメモ

時代を先取りしようとしてCentOS 6.xからRHEL7のRC版に手を出したら苦労した話。

ネットワーク回りの扱いが大きく変わって躓いたので、メモ。

  • バイス名が「eth」とかではなくなった
    • ens32とかデバイスに基づいて決定されるらしい。ESXiとVirtualBoxで試したら全く違うデバイス名になったので。
  • ネットワーク操作
    • ifconfigが最小構成で構築した場合に使えない
    • 代わりにNetworkManagerに置き換えられた
      • CUI操作にnmcli、TUI操作にnmtuiがある

ネットワークに関係ないところでは、サービス周り(chkconfig,serviceなど)がsystemctlで管理するようになる。

一応、RHEL7は乗り換え期間のようで、今まで通りifcfg-xxxをいじって設定するのも可能なようだけど、新しいやり方に慣れましょうという事で。

以下ネットワーク操作のメモ

nmcli

  • NetworkManagerをコマンドで操作。
    • コマンドはサブコマンドを与える形になるが、前方一致でコマンド名が絞り込めれば省略してよいみたい。
      • "nmcli device show" であれば、"nmcli d s" でも表示される。
  • 設定した情報は永続化される模様。
  • 設定の反映は即時されず、デバイスの再起動が必要。

現在の情報を表示する

nmcli device show
(転送量以外はifconfigと同じ情報が見れるはず)

[root@localhost ~]# nmcli d show
GENERAL.DEVICE:                         ens32
GENERAL.TYPE:                           ethernet
GENERAL.HWADDR:                         00:0C:29:AA:F5:05
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 = 192.168.1.111/23, gw = 0.0.0.0
IP4.DNS[1]:                             192.168.1.254
IP6.ADDRESS[1]:                         ip = fe80::20c:29ff:feaa:f505/64, gw = ::

GENERAL.DEVICE:                         lo
GENERAL.TYPE:                           loopback
GENERAL.HWADDR:                         00:00:00:00:00:00
GENERAL.MTU:                            65536
GENERAL.STATE:                          10 (unmanaged)
GENERAL.CONNECTION:                     --
GENERAL.CON-PATH:                       --
IP4.ADDRESS[1]:                         ip = 127.0.0.1/8, gw = 0.0.0.0
IP6.ADDRESS[1]:                         ip = ::1/128, gw = ::

バイスの詳細な設定を確認する

nmcli connection show を使う

[root@localhost ~]# nmcli con show ens32
connection.id:                          ens32
connection.uuid:                        5e5c552a-a257-4cd2-9b25-ee16c762f691
connection.interface-name:              --
connection.type:                        802-3-ethernet
connection.autoconnect:                 yes
connection.timestamp:                   1400362414
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:AA:F5:05
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.254
ipv4.dns-search:
ipv4.addresses:                         { ip = 192.168.1.111/23, gw = 0.0.0.0 }
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
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:                           5e5c552a-a257-4cd2-9b25-ee16c762f691
GENERAL.DEVICES:                        ens32
GENERAL.STATE:                          activated
GENERAL.DEFAULT:                        no
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 = 192.168.1.111/23, gw = 0.0.0.0
IP4.DNS[1]:                             192.168.1.254
IP6.ADDRESS[1]:                         ip = fe80::20c:29ff:feaa:f505/64, gw = ::

設定を一部だけ確認する

    • field(-f)オプションを使う
[root@localhost ~]# nmcli -f "ipv4.addresses" connection show ens32
ipv4.addresses:                         { ip = 192.168.1.111/23, gw = 0.0.0.0 }

使用できるフィールドの値はコンテキスト毎で異なり、参照できないフィールド名だとエラーになる。
上の例だと、"connection show"の時と"connection show <デバイス名>"で使用できるフィールド名が異なる。

設定を変更する

nmcli connection modifyを使う

[root@localhost ~]# nmcli con mod ens32 ipv4.addresses "192.168.1.112/23"
[root@localhost ~]# nmcli -f ipv4.addresses connection show ens32
ipv4.addresses:                         { ip = 192.168.1.112/23, gw = 0.0.0.0 }

プロパティのキーにはshowした時に得られる小文字のフィールド名が使え、一意で特定できるのであれば省略しても良い。
値はちゃんとバリデーションしてくれるが、デフォルト値があるものもある。

(ipv4.addresses で"192.168.1.111"とすると、サブネットマスクが勝手に付与され"192.168.1.111/32"で設定される)

ちなみにIPに10.1.1.1/16、ゲートウェイに10.1.255.254が設定したいときは以下のようにする。

nmcli con mod ens32 ipv4.addresses ipv4.addresses "10.1.1.1/16 10.1.255.254"

バイスを停止/起動する

nmcli deviceでdisconnect/connectする

[root@localhost ~]# nmcli device disconnect ens32
[root@localhost ~]# nmcli device connect ens32
Device 'ens32' successfully activated with '5e5c552a-a257-4cd2-9b25-ee16c762f691'.


今のところはこれぐらいできればネットワーク設定周りは問題ないかなぁ。