時代を先取りしようとして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'.
今のところはこれぐらいできればネットワーク設定周りは問題ないかなぁ。