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 = ::
日本ヒューレット・パッカード株式会社 プリセールス統括本部 ソリューションセンター 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メルマガ会員のサービス内容を見る

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