今回は、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/ディレクトリの下にあるシンボリックリンクを確認します。
2 | lrwxrwxrwx. 1 root root 0 9月 19 02:03 eno1 -> ../../devices/pci0000:00/0000:00:1c.0/0000:03:00.0/net/eno1 |
3 | lrwxrwxrwx. 1 root root 0 9月 19 02:03 eno2 -> ../../devices/pci0000:00/0000:00:1c.0/0000:03:00.1/net/eno2 |
4 | lrwxrwxrwx. 1 root root 0 9月 19 02:03 lo -> ../../devices/virtual/net/lo |
5 | lrwxrwxrwx. 1 root root 0 9月 19 02:03 virbr0 -> ../../devices/virtual/net/virbr0 |
6 | 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の命名体系を確認した結果の例です。
01 | # ls -l /sys/class/net/ |
02 | lrwxrwxrwx. 1 root root 0 10月 7 06:01 br0 -> ../../devices/virtual/net/br0 |
03 | lrwxrwxrwx. 1 root root 0 10月 7 06:01 docker0 -> ../../devices/virtual/net/docker0 |
04 | lrwxrwxrwx. 1 root root 0 10月 7 06:01 eth0 -> ../../devices/pci0000:00/0000:00:0c.0/0000:04:00.0/net/eth0 |
05 | lrwxrwxrwx. 1 root root 0 10月 7 06:01 eth1 -> ../../devices/pci0000:00/0000:00:0c.0/0000:04:00.1/net/eth1 |
06 | lrwxrwxrwx. 1 root root 0 10月 7 06:01 eth2 -> ../../devices/pci0000:00/0000:00:0c.0/0000:04:00.2/net/eth2 |
07 | lrwxrwxrwx. 1 root root 0 10月 7 06:01 eth3 -> ../../devices/pci0000:00/0000:00:0c.0/0000:04:00.3/net/eth3 |
08 | lrwxrwxrwx. 1 root root 0 10月 7 06:01 lo -> ../../devices/virtual/net/lo |
09 | lrwxrwxrwx. 1 root root 0 10月 7 06:01 virbr0 -> ../../devices/virtual/net/virbr0 |
10 | 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を使って設定を行います。まず、現在の接続状態を確認してみます。
3 | eno1 9bf86c7e-b15d-480a-b4db-21e30a29bbe9 802-3-ethernet eno1 |
4 | eno4 85bb51d1-6ffe-4a67-9e20-726c4d354f2d 802-3-ethernet -- |
5 | eno2 56ed578c-da1b-47a7-b1b8-154e1bb720ff 802-3-ethernet eno2 |
6 | eno3 de3ee89a-8b0e-4da0-97cd-14ba9fd660b6 802-3-ethernet -- |
上記では、オンボードの4ポート物理NICのインタフェース名がeno1~eno4として割り当てられていることがわかります。nmcli connectionでは、upやdownを指定することで、インタフェースの接続、切断を制御することができます。以下は、インタフェースeno1を切断させる例です。
1 | # nmcli connection down eno1 |
4 | eno1 9bf86c7e-b15d-480a-b4db-21e30a29bbe9 802-3-ethernet -- |
5 | eno4 85bb51d1-6ffe-4a67-9e20-726c4d354f2d 802-3-ethernet -- |
6 | eno2 56ed578c-da1b-47a7-b1b8-154e1bb720ff 802-3-ethernet eno2 |
7 | eno3 de3ee89a-8b0e-4da0-97cd-14ba9fd660b6 802-3-ethernet -- |
上記より、eno1のDEVICE欄が「--」に変化し、接続が断たれていることが分かります。接続するには、以下のように「up」を指定します。
1 | # nmcli connection up eno1 |
2 | Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/3) |
次にデバイス名とその状態を確認します。
2 | DEVICE TYPE STATE CONNECTION |
3 | eno1 ethernet connected eno1 |
4 | eno2 ethernet connected eno2 |
5 | eno3 ethernet unavailable -- |
6 | eno4 ethernet unavailable -- |
7 | lo loopback unmanaged -- |
物理NICが4ポートのサーバーで、デバイス名がeno1、eno2、eno3、eno4として割り当てられ、かつループバックデバイスのloが認識されていることがわかります。STATEから、eno1とeno2が接続されていることもわかります。
各デバイスのMACアドレス、IPアドレス、MTU等の詳細を見るには、nmcli deviceにさらにshowを付与します。
04 | GENERAL.HWADDR: 2C:76:8A:5D:F3:6C |
06 | GENERAL.STATE: 100 (connected) |
07 | GENERAL.CONNECTION: eno1 |
08 | GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/1 |
09 | WIRED-PROPERTIES.CARRIER: on |
10 | IP4.ADDRESS[1]: ip = 172.16.3.82/16, gw = 0.0.0.0 |
11 | IP6.ADDRESS[1]: ip = fe80::2e76:8aff:fe5d:f36c/64, gw = :: |
15 | GENERAL.HWADDR: 2C:76:8A:5D:F3:6D |
17 | GENERAL.STATE: 100 (connected) |
18 | GENERAL.CONNECTION: eno2 |
19 | GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/0 |
20 | WIRED-PROPERTIES.CARRIER: on |
21 | IP4.ADDRESS[1]: ip = 16.147.201.23/22, gw = 16.147.200.1 |
22 | IP4.DNS[1]: 16.110.135.51 |
23 | IP6.ADDRESS[1]: ip = fe80::2e76:8aff:fe5d:f36d/64, gw = :: |
27 | GENERAL.HWADDR: 2C:76:8A:5D:F3:6E |
29 | GENERAL.STATE: 20 (unavailable) |
32 | WIRED-PROPERTIES.CARRIER: off |
36 | GENERAL.HWADDR: 2C:76:8A:5D:F3:6F |
38 | GENERAL.STATE: 20 (unavailable) |
41 | WIRED-PROPERTIES.CARRIER: off |
45 | GENERAL.HWADDR: 00:00:00:00:00:00 |
47 | GENERAL.STATE: 10 (unmanaged) |
50 | IP4.ADDRESS[1]: ip = 127.0.0.1/8, gw = 0.0.0.0 |
51 | IP6.ADDRESS[1]: ip = ::1/128, gw = :: |
インタフェース名を指定することで出力を絞ることも可能です。
01 | # nmcli device show eno1 |
04 | GENERAL.HWADDR: 2C:76:8A:5D:F3:6C |
06 | GENERAL.STATE: 100 (connected) |
07 | GENERAL.CONNECTION: eno1 |
08 | GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/1 |
09 | WIRED-PROPERTIES.CARRIER: on |
10 | IP4.ADDRESS[1]: ip = 172.16.3.82/16, gw = 0.0.0.0 |
11 | 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に変更する例です。
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 |
3 | Connection 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 |
04 | GENERAL.HWADDR: 2C:76:8A:5D:F3:6C |
06 | GENERAL.STATE: 100 (connected) |
07 | GENERAL.CONNECTION: eno1 |
08 | GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/5 |
09 | WIRED-PROPERTIES.CARRIER: on |
10 | IP4.ADDRESS[1]: ip = 10.0.0.82/24, gw = 10.0.0.1 |
11 | 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」を指定する例です。
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 |
04 | Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/7) |
05 | # nmcli device show eno1 |
08 | GENERAL.HWADDR: 2C:76:8A:5D:F3:6C |
10 | GENERAL.STATE: 100 (connected) |
11 | GENERAL.CONNECTION: eno1 |
12 | GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/7 |
13 | WIRED-PROPERTIES.CARRIER: on |
14 | IP4.ADDRESS[1]: ip = 10.0.0.82/24, gw = 10.0.0.1 |
15 | IP4.ROUTE[1]: dst = 10.0.0.0/24, nh = 10.0.0.1, mt = 0 |
18 | IP6.ADDRESS[1]: ip = fe80::2e76:8aff:fe5d:f36c/64, gw = :: |