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/ディレクトリの下にあるシンボリックリンクを確認します。

1# ls -l /sys/class/net/
2lrwxrwxrwx. 1 root root 0  9月 19 02:03 eno1 -> ../../devices/pci0000:00/0000:00:1c.0/0000:03:00.0/net/eno1
3lrwxrwxrwx. 1 root root 0  9月 19 02:03 eno2 -> ../../devices/pci0000:00/0000:00:1c.0/0000:03:00.1/net/eno2
4lrwxrwxrwx. 1 root root 0  9月 19 02:03 lo -> ../../devices/virtual/net/lo
5lrwxrwxrwx. 1 root root 0  9月 19 02:03 virbr0 -> ../../devices/virtual/net/virbr0
6lrwxrwxrwx. 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の命名体系を確認した結果の例です。

01# ls -l /sys/class/net/
02lrwxrwxrwx. 1 root root 0 10月  7 06:01 br0 -> ../../devices/virtual/net/br0
03lrwxrwxrwx. 1 root root 0 10月  7 06:01 docker0 -> ../../devices/virtual/net/docker0
04lrwxrwxrwx. 1 root root 0 10月  7 06:01 eth0 -> ../../devices/pci0000:00/0000:00:0c.0/0000:04:00.0/net/eth0
05lrwxrwxrwx. 1 root root 0 10月  7 06:01 eth1 -> ../../devices/pci0000:00/0000:00:0c.0/0000:04:00.1/net/eth1
06lrwxrwxrwx. 1 root root 0 10月  7 06:01 eth2 -> ../../devices/pci0000:00/0000:00:0c.0/0000:04:00.2/net/eth2
07lrwxrwxrwx. 1 root root 0 10月  7 06:01 eth3 -> ../../devices/pci0000:00/0000:00:0c.0/0000:04:00.3/net/eth3
08lrwxrwxrwx. 1 root root 0 10月  7 06:01 lo -> ../../devices/virtual/net/lo
09lrwxrwxrwx. 1 root root 0 10月  7 06:01 virbr0 -> ../../devices/virtual/net/virbr0
10lrwxrwxrwx. 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を使って設定を行います。まず、現在の接続状態を確認してみます。

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

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

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

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

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

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

1# nmcli device
2DEVICE  TYPE      STATE        CONNECTION
3eno1    ethernet  connected    eno1
4eno2    ethernet  connected    eno2
5eno3    ethernet  unavailable  --
6eno4    ethernet  unavailable  --
7lo      loopback  unmanaged    --

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

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

01# nmcli device show
02GENERAL.DEVICE:                         eno1
03GENERAL.TYPE:                           ethernet
04GENERAL.HWADDR:                         2C:76:8A:5D:F3:6C
05GENERAL.MTU:                            1500
06GENERAL.STATE:                          100 (connected)
07GENERAL.CONNECTION:                     eno1
08GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/1
09WIRED-PROPERTIES.CARRIER:               on
10IP4.ADDRESS[1]:                         ip = 172.16.3.82/16, gw = 0.0.0.0
11IP6.ADDRESS[1]:                         ip = fe80::2e76:8aff:fe5d:f36c/64, gw = ::
12 
13GENERAL.DEVICE:                         eno2
14GENERAL.TYPE:                           ethernet
15GENERAL.HWADDR:                         2C:76:8A:5D:F3:6D
16GENERAL.MTU:                            1500
17GENERAL.STATE:                          100 (connected)
18GENERAL.CONNECTION:                     eno2
19GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/0
20WIRED-PROPERTIES.CARRIER:               on
21IP4.ADDRESS[1]:                         ip = 16.147.201.23/22, gw = 16.147.200.1
22IP4.DNS[1]:                             16.110.135.51
23IP6.ADDRESS[1]:                         ip = fe80::2e76:8aff:fe5d:f36d/64, gw = ::
24 
25GENERAL.DEVICE:                         eno3
26GENERAL.TYPE:                           ethernet
27GENERAL.HWADDR:                         2C:76:8A:5D:F3:6E
28GENERAL.MTU:                            1500
29GENERAL.STATE:                          20 (unavailable)
30GENERAL.CONNECTION:                     --
31GENERAL.CON-PATH:                       --
32WIRED-PROPERTIES.CARRIER:               off
33 
34GENERAL.DEVICE:                         eno4
35GENERAL.TYPE:                           ethernet
36GENERAL.HWADDR:                         2C:76:8A:5D:F3:6F
37GENERAL.MTU:                            1500
38GENERAL.STATE:                          20 (unavailable)
39GENERAL.CONNECTION:                     --
40GENERAL.CON-PATH:                       --
41WIRED-PROPERTIES.CARRIER:               off
42 
43GENERAL.DEVICE:                         lo
44GENERAL.TYPE:                           loopback
45GENERAL.HWADDR:                         00:00:00:00:00:00
46GENERAL.MTU:                            65536
47GENERAL.STATE:                          10 (unmanaged)
48GENERAL.CONNECTION:                     --
49GENERAL.CON-PATH:                       --
50IP4.ADDRESS[1]:                         ip = 127.0.0.1/8, gw = 0.0.0.0
51IP6.ADDRESS[1]:                         ip = ::1/128, gw = ::

インタフェース名を指定することで出力を絞ることも可能です。

01# nmcli device show eno1
02GENERAL.DEVICE:                         eno1
03GENERAL.TYPE:                           ethernet
04GENERAL.HWADDR:                         2C:76:8A:5D:F3:6C
05GENERAL.MTU:                            1500
06GENERAL.STATE:                          100 (connected)
07GENERAL.CONNECTION:                     eno1
08GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/1
09WIRED-PROPERTIES.CARRIER:               on
10IP4.ADDRESS[1]:                         ip = 172.16.3.82/16, gw = 0.0.0.0
11IP6.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に変更する例です。

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

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

01# nmcli device show eno1
02GENERAL.DEVICE:                         eno1
03GENERAL.TYPE:                           ethernet
04GENERAL.HWADDR:                         2C:76:8A:5D:F3:6C
05GENERAL.MTU:                            1500
06GENERAL.STATE:                          100 (connected)
07GENERAL.CONNECTION:                     eno1
08GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/5
09WIRED-PROPERTIES.CARRIER:               on
10IP4.ADDRESS[1]:                         ip = 10.0.0.82/24, gw = 10.0.0.1
11IP6.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」を指定する例です。

01# nmcli connection modify eno1 ipv4.dns "10.0.0.254 10.0.0.253"
02# nmcli connection modify eno1 ipv4.routes "10.0.0.0/24 10.0.0.1"
03# nmcli connection down eno1 &&  nmcli connection up eno1
04Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/7)
05# nmcli device show eno1
06GENERAL.DEVICE:                         eno1
07GENERAL.TYPE:                           ethernet
08GENERAL.HWADDR:                         2C:76:8A:5D:F3:6C
09GENERAL.MTU:                            1500
10GENERAL.STATE:                          100 (connected)
11GENERAL.CONNECTION:                     eno1
12GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/7
13WIRED-PROPERTIES.CARRIER:               on
14IP4.ADDRESS[1]:                         ip = 10.0.0.82/24, gw = 10.0.0.1
15IP4.ROUTE[1]:                           dst = 10.0.0.0/24, nh = 10.0.0.1, mt = 0
16IP4.DNS[1]:                             10.0.0.254
17IP4.DNS[2]:                             10.0.0.253
18IP6.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メルマガ会員のサービス内容を見る

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