CentOS 7のネットワーク管理基礎(前編)

2014年12月25日(木)
古賀 政純

今回は、CentOS 7のネットワーク設定について取り上げます。新しい設定ツールの登場や、従来のCentOS 6まで慣れ親しんだネットワーク関連の基本的なコマンド群の使用が非推奨になるなど、様々な変更点があります。CentOS 7から一新されたネットワークの具体的な設定手順、Tips等をご紹介します。

CentOS 7のネットワーク管理基礎

CentOS 7におけるネットワーク管理では、NetworkManagerによって行います。CentOS 6系では、Network Administration Toolに含まれるsystem-config-networkを使った管理やファイルを直接編集する運用形態が一般的でしたが、CentOS 7では、NetworkManagerを使った管理手法が推奨になりました。従来のNetworkManagerは、全てのネットワーク機能を制御できるわけではなかったため、/etc/sysconfig/network-scripts/ifcfg-ethXファイル等を直接編集しサービスの起動や停止を行う運用が一般的でした。これに対し、CentOS 7のNetworkManagerは、ネットワーク関連の操作が大幅に強化され、/etc/sysconfig/network-scripts/ifcfg-ethXファイルを直接編集することなくコマンドラインやGUIツールによって設定ファイルを生成する運用方法に改められています。また、NICに付与されるインタフェース名の管理についても、従来のCentOS 6までとは全く異なるスキームが採用されています。CentOS 7におけるsystemd及びudevdは、NICのインタフェース名に対する複数の命名体系をサポートしています。インタフェース名は、ファームウェアやサーバーのオンボードに搭載されているNICのトポロジーやロケーション情報によって異なります。CentOS 7におけるudevによるネットワークインタフェースの命名体系をまとめると以下のようになります。

命名体系
オンボード・デバイスに対応するインデックス番号を組み込んだ名前eno1、eno2
PCI Expressホットプラグスロットインデックス番号を組み込んだ名前ens1、ens2
ハードウェアのコネクタの物理位置を組み込んだ名前enp2s1、enp2s2
インタフェースのMACアドレスを組み込んだ名前enx78f2e1ba38c2
従来のカーネルネイティブの命名体系eth0、eth1

CentOS 7におけるNICのインタフェース名の命名体系にはいくつかのタイプが存在します。以下は、命名体系をタイプ別にまとめたものです。

種類フォーマット
オンボード上にあるデバイス番号o
ホットプラグスロットのインデックス番号s[f][d
MACアドレス値x
PCIのロケーションps[f][d]
USBポート番号チェインps[f][u][..][c][i]

CentOS 7のインストーラの時点において、どの命名体系が利用されているかを確認することができます。

図1:CentOS 7のインストーラで認識されているHP ProLiant DL385 Gen8サーバーのオンボードNICの様子。インタフェース名の命名規則が読み取れる

CentOS 7におけるネットワークインタフェース名は、永続的に付与されます。この永続的な命名のことをConsistent Network Device Namingと言います。デフォルトでは、 Predictable Network Interface Namesが利用され、一般的なx86サーバーに搭載されているオンボードのNICは、 eno1、eno2という名前が付与されます。拡張カードスロットに装着するNICの場合は、ens1、ens2、あるいは、ens7f0, ens7f1などの名前が付与されます。これらは、従来のbiosdevnameと同様に物理的な位置を示しています。例えば、オンボードの4ポートNICのeno1、 eno2、eno3、eno4は、HP ProLiant Gen8サーバーの筺体の背面に印字されているNIC1、NIC2、NIC3、NIC4に対応します。さらに、拡張カードスロットに装着したNICのens7f0、ens7f1は、それぞれサーバー筺体内の拡張スロット7番に装着したカードのポート1番とポート2番です。拡張カードスロットに装着したデバイスの位置が判別不可能の場合、PCIバス番号を元に、enp2s1, enp2s2のように命名されます。CentOS 6までの従来の命名体系と大きく異なるため、インタフェース名の文字列を基にした独自のスクリプト等を運用管理に組み込んでいる場合は、注意が必要です。このため、従来のNICのインタフェース名で慣れ親しんだインタフェース名で利用したい場合があります。CentOS 7におけるNICのインタフェース名を自動的に命名される機能を無効にするには、ブートパラメータにnet.ifnames=0を引き渡す事で可能です。また、ブートパラメータにbiosdevname=1を付与すると、従来のbiosdevnameによるNICのインタフェース名を利用する事も可能です。

図2:CentOS 7のインストーラで認識されているHP ProLiant SL2500 Gen8サーバーのオンボードNICの様子。ブートパラメータとしてbiosdevname=1を付与しているため、biosdevnameによるインタフェース名が付与されている

CentOS 7のインストール後、NICに対する命名体系を知るには、/sys/class/net/ディレクトリの下にあるシンボリックリンクを確認します。

# ls -l /sys/class/net/
lrwxrwxrwx. 1 root root 0  9月 19 02:03 eno1 -> ../../devices/pci0000:00/0000:00:1c.0/0000:03:00.0/net/eno1
lrwxrwxrwx. 1 root root 0  9月 19 02:03 eno2 -> ../../devices/pci0000:00/0000:00:1c.0/0000:03:00.1/net/eno2
lrwxrwxrwx. 1 root root 0  9月 19 02:03 lo -> ../../devices/virtual/net/lo
lrwxrwxrwx. 1 root root 0  9月 19 02:03 virbr0 -> ../../devices/virtual/net/virbr0
lrwxrwxrwx. 1 root root 0  9月 19 02:03 virbr0-nic -> ../../devices/virtual/net/virbr0-nic

上記の場合は、HP ProLiant SL2500 Gen8のオンボードに搭載されているIntel社製のギガビットイーサネットのネットワークカードがeno1、eno2として登録されていることがわかります。ブートパラメータにnet.ifnames=0を付与している場合は、NICのインタフェース名を自動的に命名しないため、ethX等の表記になります。以下は、オンボードにBroadcom社製の4ポートNICを搭載したHP ProLiant DL385 Gen8にCentOS 7をインストールし、ブートパラメータにnet.ifnames=0を付与した状態でNICの命名体系を確認した結果の例です。

# ls -l /sys/class/net/
lrwxrwxrwx. 1 root root 0 10月  7 06:01 br0 -> ../../devices/virtual/net/br0
lrwxrwxrwx. 1 root root 0 10月  7 06:01 docker0 -> ../../devices/virtual/net/docker0
lrwxrwxrwx. 1 root root 0 10月  7 06:01 eth0 -> ../../devices/pci0000:00/0000:00:0c.0/0000:04:00.0/net/eth0
lrwxrwxrwx. 1 root root 0 10月  7 06:01 eth1 -> ../../devices/pci0000:00/0000:00:0c.0/0000:04:00.1/net/eth1
lrwxrwxrwx. 1 root root 0 10月  7 06:01 eth2 -> ../../devices/pci0000:00/0000:00:0c.0/0000:04:00.2/net/eth2
lrwxrwxrwx. 1 root root 0 10月  7 06:01 eth3 -> ../../devices/pci0000:00/0000:00:0c.0/0000:04:00.3/net/eth3
lrwxrwxrwx. 1 root root 0 10月  7 06:01 lo -> ../../devices/virtual/net/lo
lrwxrwxrwx. 1 root root 0 10月  7 06:01 virbr0 -> ../../devices/virtual/net/virbr0
lrwxrwxrwx. 1 root root 0 10月  7 06:01 virbr0-nic -> ../../devices/virtual/net/virbr0-nic

nmcliコマンドの基礎

nmcli(Network Manager Command Line Interface)は、CentOS 7におけるネットワークの設定を行うNetworkManagerの基本コマンドです。nmcliコマンドには、以下のパラメータが用意されています。

connection接続の設定
deviceデバイス管理
generalホスト名設定、ロギング、権限操作、状態の表示
networkingコネクティビティのチェック、有効化、無効化の管理
radioワイヤレスネットワークの設定の有効化、無効化の管理

以下では、イーサネットに対応した物理NICに対するインタフェースの基本的な設定を紹介します。今回は、x86サーバー「HP ProLiant DL385 Gen8」に搭載されているオンボードの4ポート物理NICを使って設定を行います。まず、現在の接続状態を確認してみます。

# nmcli connection
NAME  UUID                                  TYPE            DEVICE
eno1  9bf86c7e-b15d-480a-b4db-21e30a29bbe9  802-3-ethernet  eno1
eno4  85bb51d1-6ffe-4a67-9e20-726c4d354f2d  802-3-ethernet  --
eno2  56ed578c-da1b-47a7-b1b8-154e1bb720ff  802-3-ethernet  eno2
eno3  de3ee89a-8b0e-4da0-97cd-14ba9fd660b6  802-3-ethernet  --

上記では、オンボードの4ポート物理NICのインタフェース名がeno1~eno4として割り当てられていることがわかります。nmcli connectionでは、upやdownを指定することで、インタフェースの接続、切断を制御することができます。以下は、インタフェースeno1を切断させる例です。

# nmcli connection down eno1
# nmcli connection show
NAME  UUID                                  TYPE            DEVICE
eno1  9bf86c7e-b15d-480a-b4db-21e30a29bbe9  802-3-ethernet  --
eno4  85bb51d1-6ffe-4a67-9e20-726c4d354f2d  802-3-ethernet  --
eno2  56ed578c-da1b-47a7-b1b8-154e1bb720ff  802-3-ethernet  eno2
eno3  de3ee89a-8b0e-4da0-97cd-14ba9fd660b6  802-3-ethernet  --

上記より、eno1のDEVICE欄が「--」に変化し、接続が断たれていることが分かります。接続するには、以下のように「up」を指定します。

# nmcli connection up eno1
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/3)

次にデバイス名とその状態を確認します。

# nmcli device
DEVICE  TYPE      STATE        CONNECTION
eno1    ethernet  connected    eno1
eno2    ethernet  connected    eno2
eno3    ethernet  unavailable  --
eno4    ethernet  unavailable  --
lo      loopback  unmanaged    --

物理NICが4ポートのサーバーで、デバイス名がeno1、eno2、eno3、eno4として割り当てられ、かつループバックデバイスのloが認識されていることがわかります。STATEから、eno1とeno2が接続されていることもわかります。

各デバイスのMACアドレス、IPアドレス、MTU等の詳細を見るには、nmcli deviceにさらにshowを付与します。

# nmcli device show
GENERAL.DEVICE:                         eno1
GENERAL.TYPE:                           ethernet
GENERAL.HWADDR:                         2C:76:8A:5D:F3:6C
GENERAL.MTU:                            1500
GENERAL.STATE:                          100 (connected)
GENERAL.CONNECTION:                     eno1
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/1
WIRED-PROPERTIES.CARRIER:               on
IP4.ADDRESS[1]:                         ip = 172.16.3.82/16, gw = 0.0.0.0
IP6.ADDRESS[1]:                         ip = fe80::2e76:8aff:fe5d:f36c/64, gw = ::

GENERAL.DEVICE:                         eno2
GENERAL.TYPE:                           ethernet
GENERAL.HWADDR:                         2C:76:8A:5D:F3:6D
GENERAL.MTU:                            1500
GENERAL.STATE:                          100 (connected)
GENERAL.CONNECTION:                     eno2
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/0
WIRED-PROPERTIES.CARRIER:               on
IP4.ADDRESS[1]:                         ip = 16.147.201.23/22, gw = 16.147.200.1
IP4.DNS[1]:                             16.110.135.51
IP6.ADDRESS[1]:                         ip = fe80::2e76:8aff:fe5d:f36d/64, gw = ::

GENERAL.DEVICE:                         eno3
GENERAL.TYPE:                           ethernet
GENERAL.HWADDR:                         2C:76:8A:5D:F3:6E
GENERAL.MTU:                            1500
GENERAL.STATE:                          20 (unavailable)
GENERAL.CONNECTION:                     --
GENERAL.CON-PATH:                       --
WIRED-PROPERTIES.CARRIER:               off

GENERAL.DEVICE:                         eno4
GENERAL.TYPE:                           ethernet
GENERAL.HWADDR:                         2C:76:8A:5D:F3:6F
GENERAL.MTU:                            1500
GENERAL.STATE:                          20 (unavailable)
GENERAL.CONNECTION:                     --
GENERAL.CON-PATH:                       --
WIRED-PROPERTIES.CARRIER:               off

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 device show eno1
GENERAL.DEVICE:                         eno1
GENERAL.TYPE:                           ethernet
GENERAL.HWADDR:                         2C:76:8A:5D:F3:6C
GENERAL.MTU:                            1500
GENERAL.STATE:                          100 (connected)
GENERAL.CONNECTION:                     eno1
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/1
WIRED-PROPERTIES.CARRIER:               on
IP4.ADDRESS[1]:                         ip = 172.16.3.82/16, gw = 0.0.0.0
IP6.ADDRESS[1]:                         ip = fe80::2e76:8aff:fe5d:f36c/64, gw = ::

インタフェースに割り当てたIPアドレスやゲートウェイアドレスを変更するにはnmcli connectionに「modify」を指定します。以下は、IPアドレスが172.16.3.82/16でゲートウェイアドレスが0.0.0.0で割り当てられているインタフェースeno1のIPアドレスを10.0.0.82/24、ゲートウェイアドレスを10.0.0.1に変更する例です。

# nmcli connection modify eno1 ipv4.addresses "10.0.0.82/24 10.0.0.1"
# nmcli connection down eno1 && nmcli connection up eno1
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/5)

「nmcli connection down」が従来のifdown、「nmcli connection up」が従来のifupに相当します。IPアドレスとゲートウェイアドレスが変更されているかを確認します。

# nmcli device show eno1
GENERAL.DEVICE:                         eno1
GENERAL.TYPE:                           ethernet
GENERAL.HWADDR:                         2C:76:8A:5D:F3:6C
GENERAL.MTU:                            1500
GENERAL.STATE:                          100 (connected)
GENERAL.CONNECTION:                     eno1
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/5
WIRED-PROPERTIES.CARRIER:               on
IP4.ADDRESS[1]:                         ip = 10.0.0.82/24, gw = 10.0.0.1
IP6.ADDRESS[1]:                         ip = fe80::2e76:8aff:fe5d:f36c/64, gw = ::

さらに、DNSサーバーと静的ルーティングを変更するには、ipv4.dns、ipv4.routesを指定します。以下は、インタフェースeno1に対して、DNSサーバーのIPアドレス「10.0.0.254」と「10.0.0.253」を指定し、静的ルーティングとして「10.0.0.0/24」のネットワークでルーターのIPアドレス「10.0.0.1」を指定する例です。

# nmcli connection modify eno1 ipv4.dns "10.0.0.254 10.0.0.253"
# nmcli connection modify eno1 ipv4.routes "10.0.0.0/24 10.0.0.1"
# nmcli connection down eno1 &&  nmcli connection up eno1
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/7)
# nmcli device show eno1
GENERAL.DEVICE:                         eno1
GENERAL.TYPE:                           ethernet
GENERAL.HWADDR:                         2C:76:8A:5D:F3:6C
GENERAL.MTU:                            1500
GENERAL.STATE:                          100 (connected)
GENERAL.CONNECTION:                     eno1
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/7
WIRED-PROPERTIES.CARRIER:               on
IP4.ADDRESS[1]:                         ip = 10.0.0.82/24, gw = 10.0.0.1
IP4.ROUTE[1]:                           dst = 10.0.0.0/24, nh = 10.0.0.1, mt = 0
IP4.DNS[1]:                             10.0.0.254
IP4.DNS[2]:                             10.0.0.253
IP6.ADDRESS[1]:                         ip = fe80::2e76:8aff:fe5d:f36c/64, gw = ::

/etc/resolv.confファイルの自動更新を抑制する方法

CentOS 7において、参照先のDNSサーバーのIPアドレスがNICに設定されている場合、デフォルトでは、/etc/resolv.confファイルが自動的に更新されるようになっています。しかし、環境によっては、NICの参照先DNSサーバーのIPアドレスの変更に伴う/etc/resolv.confファイルの自動更新を無効にしたい場合があります。以下では、/etc/resolv.confファイルの自動更新を無効にする手順を紹介します。まず、ネットワークインタフェースのeno1に設定されている参照先のDNSサーバーのIPアドレスを確認しておきます。

# nmcli device show eno1 |grep DNS
IP4.DNS[1]:                             10.0.0.254

上記により、eno1に設定されている参照先のDNSサーバーのIPアドレスは、10.0.0.254であることがわかります。デフォルトでは、/etc/resolv.confファイルがNetworkManagerによって自動的に生成されますので、上記のIPアドレスが/etc/resolv.confファイルに記述されているはずです。

# cat /etc/resolv.conf
...
nameserver 10.0.0.254

/etc/resolv.confファイルが自動的に更新されないようにするには、/etc/NetworkManager/NetworkManager.confファイルの[main]の下にdns=noneを記述します。

# vi /etc/NetworkManager/NetworkManager.conf
[main]
plugins=ifcfg-rh
dns=none

次に、eno1が参照するDNSサーバーのIPアドレスを変更しても、/etc/resolv.confファイルが自動的に更新されていないかを確認します。まず、eno1が参照するDNSサーバーのIPアドレスを10.0.0.253に変更します。

# nmcli connection modify eno1 ipv4.dns "10.0.0.253"
# nmcli device show eno1 |grep DNS
IP4.DNS[1]:                             10.0.0.253

NetworkManagerと、ネットワークサービスを再起動します。

# systemctl restart NetworkManager
# systemctl restart network

ネットワークインタフェースのeno1に対して新しく設定した参照先DNSサーバーのIPアドレスである10.0.0.253が、/etc/resolv.confファイルに自動的に設定されていないことを確認します。

# cat /etc/resolv.conf
...
nameserver 10.0.0.254

インタフェースの接続の追加と削除

インタフェースの接続の追加と削除も、nmcliコマンドで行うことが可能です。先程、IPアドレスの変更を行ったばかりのインタフェースeno1を使って操作例を示します。まず、インタフェースの状況を確認します。

# nmcli device
DEVICE  TYPE      STATE        CONNECTION
eno1    ethernet  connected    eno1
eno2    ethernet  connected    eno2
eno3    ethernet  unavailable  --
eno4    ethernet  unavailable  --
lo      loopback  unmanaged    --

インタフェースeno1の接続を削除してみます。接続の削除は、nmcli connectionに「delete」を付与し、削除するインタフェース名を指定します。

# nmcli connection delete eno1
# nmcli device
DEVICE  TYPE      STATE         CONNECTION
eno2    ethernet  connected     eno2
eno1    ethernet  disconnected  -- ←接続が切断されていることがわかる
eno3    ethernet  unavailable   --
eno4    ethernet  unavailable   --
lo      loopback  unmanaged     --

インタフェースeno1は接続が切断され、設定したIPアドレス等も破棄されます。インタフェースeno1に新規に接続を追加し、新たなIPアドレスを付与してみましょう。接続の追加は、nmcli connectionに「add type」を付与します。今回は、1GbEの有線のイーサネットですので、typeとしてethernetを指定します。インタフェース名は、ifnameで指定します。接続名はcon-nameで指定します。今回、接続名は、インタフェース名と同じeno1を指定することにします。

# nmcli connection add type ethernet ifname eno1 con-name eno1
Connection 'eno1' (8724b120-0270-40dc-982a-8a1be7ea1340) successfully added.

eno1のデバイスに対する接続が追加されているかを確認します。

# nmcli device
DEVICE  TYPE      STATE                                  CONNECTION
eno2    ethernet  connected                              eno2
eno1    ethernet  connecting (getting IP configuration)  eno1 ←接続が追加されている
eno3    ethernet  unavailable                            --
eno4    ethernet  unavailable                            --
lo      loopback  unmanaged                              --

接続が追加されたら、インタフェースeno1に対して、IPアドレス等の設定が可能になります。今回は、固定IPアドレスとして192.168.0.82/24、ゲートウェイアドレスとして192.168.0.254を設定してみます。固定IPアドレスを設定するには、ipv4.method manualを付与します。

# nmcli connection modify eno1 ipv4.method manual ipv4.addresses "192.168.0.82/24 192.168.0.254"

設定を反映させます。

# nmcli connection down eno1 && nmcli connection up eno1
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/13)

インタフェースにeno1に固定IPアドレスが付与されていることを確認します。

# nmcli device show eno1
GENERAL.DEVICE:                         eno1
GENERAL.TYPE:                           ethernet
GENERAL.HWADDR:                         2C:76:8A:5D:F3:6C
GENERAL.MTU:                            1500
GENERAL.STATE:                          100 (connected)
GENERAL.CONNECTION:                     eno1
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/13
WIRED-PROPERTIES.CARRIER:               on
IP4.ADDRESS[1]:                         ip = 192.168.0.82/24, gw = 192.168.0.254
IP6.ADDRESS[1]:                         ip = fe80::2e76:8aff:fe5d:f36c/64, gw = ::

上記の固定IPアドレスが設定されたインタフェースeno1の設定ファイルは、/etc/sysconfig/network-scripts/ifcfg-eno1として生成されています。

# cat /etc/sysconfig/network-scripts/ifcfg-eno1
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME=eno1
UUID=8724b120-0270-40dc-982a-8a1be7ea1340
DEVICE=eno1
ONBOOT=yes
IPADDR0=192.168.0.82
PREFIX0=24
GATEWAY0=192.168.0.254
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes

nmcliコマンドでホスト名の設定を行う

CentOS 6までは、ホスト名の設定を/etc/sysconfig/networkファイルに記述していましたが、CentOS 7では、/etc/hostnameファイルに記述するようになりました。/etc/hostnameファイルを直接編集してもよいのですが、CentOS 7では、nmcliコマンドでホスト名を設定します。以下は、nmcliコマンドで、ホスト名を設定する例を紹介します。まず、現在、設定されているホスト名を表示します。

# nmcli general hostname
centos70n02.jpn.linux.hp.com

ホスト名を「centos70n254.jpn.linux.hp.com」に変更します。

# nmcli general hostname centos70n254.jpn.linux.hp.com

ホスト名が変更されたかどうかをhostnameコマンドで確認します。また、/etc/hostnameファイルの中身も確認します。

# hostname
centos70n254.jpn.linux.hp.com

# cat /etc/hostname
centos70n254.jpn.linux.hp.com

このように、IPアドレス、デフォルトゲートウェイ、DNS、ルーティング、ホスト名等の設定をnmcliコマンドだけで一通り行うことができますので、設定ファイルのパラメータの記述方法や複数のコマンドを覚える負担を減らすことができます。しかも、nmcliコマンドは、それに続く引数の候補をキーボード入力のTABキー補完で表示してくれますので、従来の管理手法に比べ、習得のハードルが大幅に下がっています。nmcliコマンドに慣れると設定ファイルの記述方法を覚える必要がなくなるため、非常に便利です。是非nmcliコマンドを使いこなしてみて下さい。

nmtuiによる設定

先述のnmcliコマンドは、大量の管理対象サーバーのネットワーク設定を自動化する場合に威力を発揮しますが、管理対象サーバーが少数で、直感的な操作で1台ずつ設定を行いたいという場合は、nmtuiを利用するのがよいでしょう。nmtuiは、ネットワーク設定を行うサービスであるNetworkManagerデーモンに対して様々な指示を行うことでネットワークの設定を行うアプリケーションです。nmtuiは、GNOMEターミナルやTera Term等のターミナルエミュレータ内で起動すると、テキストベースの分かりやすいGUIが起動します。GUIでは、メニューの選択や空欄に値を入れることで、簡単にネットワーク設定を行うことが可能となっています。nmtuiの起動は、コマンドラインからnmtuiを入力します。nmtuiは、NetworkManager-tuiパッケージに含まれています。

# nmtui

nmtuiのGUIがターミナルエミュレータ内に表示されます。設定画面内で、キーボードの上下左右キーを使ってカーソルを合わせ、パラメータを入力することができます。

図3:nmtuiのGUIメニューのトップ画面。シンプルで分かりやすいメニューになっている

図4:nmtuiで、インタフェースeno1のIPアドレス等を設定している様子

iprouteのススメ

CentOS 7のアップストリームOSであるRHEL7では、ifconfigコマンド、netstatコマンド、arpコマンド等を提供するnet-toolsが利用可能です。現状、CentOS 7においても、net-toolsパッケージをインストールすれば、従来の慣れ親しんだifconfigコマンドやnetstatコマンドを利用することが 可能ですが、今後は、net-toolsではなく、新しいコマンド体系に慣れることをお勧めします。net-toolsに取って代わる新しいコマンド体系は、iprouteパッケージで提供されています。CentOS 7のiprouteパッケージに含まれているコマンドは以下のとおりです。

# rpm -ql iproute |grep bin
/usr/sbin/arpd
/usr/sbin/bridge
/usr/sbin/cbq
/usr/sbin/ctstat
/usr/sbin/genl
/usr/sbin/ifcfg
/usr/sbin/ifstat
/usr/sbin/ip
/usr/sbin/lnstat
/usr/sbin/nstat
/usr/sbin/routef
/usr/sbin/routel
/usr/sbin/rtacct
/usr/sbin/rtmon
/usr/sbin/rtpr
/usr/sbin/rtstat
/usr/sbin/ss
/usr/sbin/tc

以下では、CentOS 7に含まれるiprouteパッケージに含まれるコマンドを使って、日常業務でよく利用されるネットワーク管理のコマンドをいくつか抜粋して紹介します。

IPアドレス、MACアドレスの確認(旧:ifconfig 新:ip)

# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    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
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    link/ether 2c:76:8a:5d:f3:6c brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.82/24 brd 192.168.0.255 scope global eno1
       valid_lft forever preferred_lft forever
    inet6 fe80::2e76:8aff:fe5d:f36c/64 scope link
       valid_lft forever preferred_lft forever
3: eno2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    link/ether 2c:76:8a:5d:f3:6d brd ff:ff:ff:ff:ff:ff
    inet 16.147.201.23/22 brd 16.147.203.255 scope global eno2
       valid_lft forever preferred_lft forever
    inet6 fe80::2e76:8aff:fe5d:f36d/64 scope link
       valid_lft forever preferred_lft forever
4: eno3: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN qlen 1000
    link/ether 2c:76:8a:5d:f3:6e brd ff:ff:ff:ff:ff:ff
5: eno4: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN qlen 1000
    link/ether 2c:76:8a:5d:f3:6f brd ff:ff:ff:ff:ff:ff

一時的なIPアドレスの付与(旧:ifconfig 新:ip)

# ip addr add 192.168.0.82/255.255.255.0 dev eno3
# ip addr show eno3
4: eno3: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN qlen 1000
    link/ether 2c:76:8a:5d:f3:6e brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.82/24 scope global eno3
       valid_lft forever preferred_lft forever

NICのリンクアップの確認(旧:ifconfig 新:ip)

# ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT qlen 1000
    link/ether 2c:76:8a:5d:f3:6c brd ff:ff:ff:ff:ff:ff
3: eno2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT qlen 1000
    link/ether 2c:76:8a:5d:f3:6d brd ff:ff:ff:ff:ff:ff
4: eno3: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN mode DEFAULT qlen 1000
    link/ether 2c:76:8a:5d:f3:6e brd ff:ff:ff:ff:ff:ff
5: eno4: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN mode DEFAULT qlen 1000
    link/ether 2c:76:8a:5d:f3:6f brd ff:ff:ff:ff:ff:ff

デフォルトゲートウェイの追加、削除(旧:route 新:ip)

ip route add default via 192.168.0.254
ip route del default via 192.168.0.254

ルーティングテーブルの確認(旧:route 新:ip)

# ip route
default via 16.147.200.1 dev eno2  proto static  metric 1024
16.147.200.0/22 dev eno2  proto kernel  scope link  src 16.147.201.23
192.168.0.0/24 dev eno1  proto kernel  scope link  src 192.168.0.82
192.168.0.0/24 dev eno3  proto kernel  scope link  src 192.168.0.82

ARPテーブルの確認(旧:arp 新:ip)

# ip neigh
172.16.1.115 dev enp0s25 lladdr 00:21:5a:eb:3a:86 STALE
172.16.70.1 dev enp0s25 lladdr 52:54:00:fe:fe:7c STALE
172.16.27.10 dev enp0s25 lladdr b4:b5:2f:fb:6b:ae DELAY
172.16.1.1 dev enp0s25 lladdr 00:0d:02:d7:e9:ce STALE

ARPキャッシュのクリア(旧:arp 新:ip)

# ip neigh flush 172.16.1.115 dev enp0s25 ←ARPキャッシュ内のIPアドレス「172.16.1.115」をクリア

インタフェース毎のパケットの確認(旧:netstat 新:ip)

# ip -s l
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    RX: bytes  packets  errors  dropped overrun mcast
    3818       31       0       0       0       0
    TX: bytes  packets  errors  dropped carrier collsns
    3818       31       0       0       0       0
2: enp0s25: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
    link/ether 70:5a:b6:ab:5e:da brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors  dropped overrun mcast
    11451391   140360   0       0       0       52
    TX: bytes  packets  errors  dropped carrier collsns
    290998119  217114   0       0       0       0
3: wls1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT qlen 1000
    link/ether 00:26:c6:cf:da:02 brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors  dropped overrun mcast
    0          0        0       0       0       0
    TX: bytes  packets  errors  dropped carrier collsns
    0          0        0       0       0       0

TCPソケット及びUDPソケットの状態の確認(旧:netstat 新:ss)

# ss -ant
State       Recv-Q Send-Q       Local Address:Port                   Peer Address:Port
LISTEN      0      100           127.0.0.1:25                                *:*
LISTEN      0      5                     *:5901                              *:*
LISTEN      0      64                    *:35247                             *:*
LISTEN      0      128                   *:111                               *:*
LISTEN      0      128                   *:6001                              *:*
LISTEN      0      128                   *:22                                *:*
LISTEN      0      128           127.0.0.1:631                               *:*
LISTEN      0      128                   *:35736                             *:*
ESTAB       0      0          172.16.25.30:22                     172.16.27.10:53503
ESTAB       0      0          172.16.25.30:728                     172.16.70.1:2049
LISTEN      0                          ::1:25                               :::*
LISTEN      0                           :::35547                            :::*
LISTEN      0                           :::34443                            :::*
LISTEN      0                           :::111                              :::*
LISTEN      0                           :::6001                             :::*
LISTEN      0                           :::21                               :::*
LISTEN      0                           :::22                               :::*
LISTEN      0                          ::1:631                              :::*

# ss -anu
State       Recv-Q Send-Q       Local Address:Port                   Peer Address:Port
UNCONN      0      0                     *:868                               *:*
UNCONN      0      0             127.0.0.1:896                               *:*
UNCONN      0      0                     *:111                               *:*
UNCONN      0      0                     *:123                               *:*
UNCONN      0      0                     *:5353                              *:*
UNCONN      0      0             127.0.0.1:323                               *:*
UNCONN      0      0                     *:53711                             *:*
UNCONN      0      0                     *:34379                             *:*
UNCONN      0      0                    :::868                              :::*
UNCONN      0      0                    :::111                              :::*
UNCONN      0      0                    :::123                              :::*
UNCONN      0      0                   ::1:323                              :::*
UNCONN      0      0                    :::59151                            :::*

(年明け公開予定の後編に続く)

<編集部より>コマンドの一部にスペルミスがあったため修正しました(2015/1/15)、また一部の曖昧な表現を修正しました(1/29)

この連載が書籍になりました!
CentOS 7実践ガイド

古賀 政純 著
価格:3,000円+税
発売日:2015年2月25日発売
ISBN:978-4-8443-3753-9
発行:インプレスジャパン

CentOS 7実践ガイド

本書は、CentOS 7を取り巻く市場動向、CentOS 7が利用されるサーバーシステムの選定、CentOS 7の基礎、システム設計、OS管理やCentOS 7に対応したアプリケーションサーバーの構築手順などの勘所をご紹介します。連載では書ききれなかった本の内容、見どころが満載!

  • セキュリティ管理
  • チューニング
  • 自動インストール
  • Hadoop構築
  • GlusterFS
  • Ceph

Amazon詳細ページへImpress詳細ページへ

日本ヒューレット・パッカード株式会社 プリセールス統括本部 ソリューションセンター OSS・Linux担当 シニアITスペシャリスト

兵庫県伊丹市出身。1996年頃からオープンソースに携わる。2000年よりUNIXサーバーのSE及びスーパーコンピューターの並列計算プログラミング講師を担当。科学技術計算サーバーのSI経験も持つ。2005年、大手製造業向けLinuxサーバー提案で日本HP社長賞受賞。2006年、米国HPからLinux技術の伝道師に与えられる「OpenSource and Linux Ambassador Hall of Fame」を2年連続受賞。日本HPプリセールスMVPを4度受賞。現在は、Linux、FreeBSD、Hadoop等のOSSを駆使したスケールアウト型サーバー基盤のプリセールスSE、技術検証、技術文書執筆を担当。日本HPのオープンソース・Linuxテクノロジーエバンジェリストとして講演活動も行っている。Red Hat Certified Engineer、Red Hat Certified Virtualization Administrator、Novell Certified Linux Professional、EXIN Cloud Computing Foundation Certificate、HP Accredited Systems Engineer Cloud Architect、Red Hat Certified System Administrator in Red Hat OpenStack、Cloudera Certified Administrator for Apache Hadoop認定技術者。HP公式ブログ執筆者。趣味はレーシングカートとビリヤード

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています