前回に引き続き、CentOS 7のネットワーク設定について取り上げます。新しい設定ツールの登場や、従来のCentOS 6まで慣れ親しんだネットワーク関連の基本的なコマンド群の使用が非推奨になるなど、様々な変更点があります。CentOS 7から一新されたネットワークの具体的な設定手順、Tips等をご紹介します。
CentOS 7におけるリンクアグリゲーション
複数のネットワークカードを束ねて一つのネットワーク通信の可用性や性能向上を図るリンクアグリゲーションを実現するteamドライバーがCentOS 7で実装されています。現在の多くのサーバーは、ネットワークポートを複数持っており、このネットワークポートを束ねることで障害が発生してもネットワーク通信を継続させることができます。NICがチーミングされたCentOS 7が稼働するx86サーバーとネットワークスイッチの典型的な構成例を下図に示します。
図5:サーバー側のeth0とeth2をスレーブインタフェースにし、仮想的なインタフェースteam0を構成している。eth0に障害が発生してもeth2が通信を引き継ぐ。この構成では、1台のスイッチ障害にも対応している
このチーミングの機能は、従来のbondingドライバーよりも高機能です。teamドライバーのほとんどの部分は、ユーザー空間で稼動する点がbondingドライバーと異なっています。以下では、このteamドライバーの設定を簡単にご紹介します。まず、team driverをインストールします。
複数のNICを束ねる仮想的なインタフェースteam0を作成します。
1 | # nmcli connection add type team con-name team0 ifname team0 config '{"runner": {"name": "roundrobin"}}' |
ここでは、teamドライバーによって作成される仮想的なNICのIPアドレスを172.16.70.99/16に設定するとします。
1 | # nmcli connection modify team0 ipv4.method manual ipv4.addresses "172.16.70.99/16 172.16.1.1" ipv4.dns 172.16.1.1 |
ネットワークインタフェースeth0とens7をインタフェースteam0のスレーブに設定します。
1 | # nmcli connection add type team-slave autoconnect no ifname eth0 master team0 |
2 | # nmcli connection add type team-slave autoconnect no ifname ens7 master team0 |
ネットワークサービスを再起動します。
1 | # systemctl restart network |
スレーブ化したens7インタフェースを自動起動するように設定します。
1 | # nmcli connection modify team-slave-ens7 connection.autoconnect yes |
teamドライバーによって2枚のNIC(eth0とens7)が束ねられ、仮想的なインタフェースteam0が作成され、IPアドレスが割り振られるはずです。仮想的なインタフェースteam0にIPアドレスが割り当てられ、外部と通信できるかを確認します。
02 | 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN |
03 | link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 |
04 | inet 127.0.0.1/8 scope host lo |
05 | valid_lft forever preferred_lft forever |
06 | inet6 ::1/128 scope host |
07 | valid_lft forever preferred_lft forever |
08 | 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master team0 state UP qlen 1000 |
09 | link/ether 52:54:00:fe:fe:7c brd ff:ff:ff:ff:ff:ff |
10 | 3: ens7: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master team0 state UP qlen 1000 |
11 | link/ether 52:54:00:fe:fe:7c brd ff:ff:ff:ff:ff:ff |
12 | 5: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN |
13 | link/ether 56:84:7a:fe:97:99 brd ff:ff:ff:ff:ff:ff |
14 | inet 172.17.42.1/16 scope global docker0 |
15 | valid_lft forever preferred_lft forever |
16 | 11: team0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP←仮想的なインタフェース |
17 | link/ether 52:54:00:fe:fe:7c brd ff:ff:ff:ff:ff:ff |
18 | inet 172.16.70.99/16 brd 172.16.255.255 scope global team0 |
19 | valid_lft forever preferred_lft forever |
20 | inet6 fe80::5054:ff:fefe:fe7c/64 scope link tentative dadfailed |
21 | valid_lft forever preferred_lft forever |
25 | システム ens7 914777cb-cdcb-c90d-f590-a17dabc1db4e 802-3-ethernet ens7 |
26 | システム eth0 5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03 802-3-ethernet eth0 |
27 | team-slave-ens7 7359d2d6-2908-4f1d-ae55-3052ed84b032 802-3-ethernet -- |
28 | team-slave-eth0 daa0dedc-f44b-4374-9a82-d4d13f62c3b7 802-3-ethernet -- |
29 | team0 f62aaca3-a85f-49cf-9687-c94a34fc429c team team0 |
30 | docker0 07c54a57-7da0-44e3-921b-d95f21013248 bridge docker0 |
CentOS 7から、NetworkManagerのnmcliとnmtuiを使ってネットワークの設定を行い、ネットワークインタフェースは、NetworkManagerの制御下に置くことが強く推奨されています。NetworkManager配下で生成される設定ファイルを確認してみましょう。複数のNICを束ねる仮想的なインタフェースteam0のための設定ファイルifcfg-team0を確認します。
01 | # cat /etc/sysconfig/network-scripts/ifcfgteam0 |
03 | TEAM_CONFIG="{\"runner\": {\"name\": \"roundrobin\"}}" |
13 | UUID=f62aaca3-a85f-49cf-9687-c94a34fc429c |
teamドライバーによって束ねられるスレーブインタフェースeth0とens7の設定ファイルも確認します。
01 | # cat /etc/sysconfig/network-scripts/ifcfg-team-slave-eth0 |
14 | UUID=daa0dedc-f44b-4374-9a82-d4d13f62c3b7 |
20 | # cat /etc/sysconfig/network-scripts/ifcfg-team-slave-ens7 |
31 | UUID=7359d2d6-2908-4f1d-ae55-3052ed84b032 |
チーミングされた仮想的なインタフェースteam0を構成する物理NICのインタフェースeth0とens7がラウンドロビンでパケットを処理し、スループットが出ているかの確認をするために、視覚的にしかも直感的に理解できるiptraf-ngというツールがあります。iptraf-ngは、OSが認識しているネットワークインタフェース全てについて、トラフィックの有無、パケットの通信の様子を確認することができます。コマンドライン上からiptraf-ngコマンドで起動し、テキストベースの分かりやすい画面インタフェースが特徴的です。
図6:iptraf-ngの画面の様子。チーミングされたインタフェースteam0とそれを構成する物理NICのeth0とens7のトラフィックがリアルタイムで表示されるため、チーミングの動作及び性能テストに有用である
CentOS 7及びRHEL7におけるteamドライバーに関する情報は、以下のURLに示すRed Hat Summit 2014のプレゼンテーション資料が参考になります。
[参考]New networking features & tools for Red Hat Enterprise Linux 7 beta
ネットワークインタフェース名をethXに設定する
従来のCentOS 6系では、一般的に、OSが認識するNICのインタフェース名がeth0やeth1等で表記されていましたが、CentOS 7から、デフォルトでは、システムによって名前が自動的に割り当てられるようになりました。例えば、HP ProLiant DL385p Gen8サーバーの場合は、デフォルトでenoXというインタフェース名で登録されます。
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 -- |
CentOS 7において、従来のethXというインタフェース名でNICを管理するには、GRUBのパラメータを追加し、整合性のとれたifcfg-ethXを作成する必要があります。以下では、HP ProLiant DL385p Gen8サーバーに搭載されているオンボードの4ポートの物理NICに自動的に割り当てられたインタフェース名eno1、eno2、eno3、eno4を従来のeth0、eth1、eth2、eth3に割り当てる手順を紹介します。まず、/etc/default/grubファイルを編集します。/etc/default/grubファイルの「GRUB_CMDLINE_LINUX=...」の行がブートパラメータを記述する箇所です。GRUB_CMDLINE_LINUXに渡すパラメータに「net.ifnames=0 biosdevname=0」を追加します。
1 | # cp /etc/default/grub /etc/default/grub.org |
4 | GRUB_CMDLINE_LINUX="nomodeset crashkernel=auto vconsole.font=latarcyrheb-sun16 vconsole.keymap=us rhgb quiet net.ifnames=0 biosdevname=0" ←「net.ifnames=0 biosdevname=0」を追加 |
上記、/etc/default/grubファイルの変更をGRUBの設定ファイル/boot/grub2/grub.cfgファイルに反映します。
1 | # grub2-mkconfig -o /boot/grub2/grub.cfg |
まだ、適切なifcfg-ethXは生成していませんが、この状態でOSを再起動します。
CentOS 7が自動的に割り当てたNICの設定ファイルであるifcfg-enoXを破棄して、ethX用の設定ファイルを生成します。ifcfg-ethXファイルを生成するには、nmcliコマンドまたは、GUIベースの設定ツールであるnmtuiを使用します。ここでは、nmtuiを使って設定してみましょう。全てのネットワークインタフェース全てを編集しますので、SSH接続やVNC接続等での遠隔からの接続が切断されてしまいます。そこで、ネットワークインタフェースとは独立して稼働する遠隔管理専用のネットワークポート(HP ProLiantサーバーの場合はオンボードに搭載されたiLO4チップ等)が提供する仮想端末機能を使った遠隔管理か、ローカル接続のディスプレイとキーボード等を使った操作に切り替えて下さい。ハードウェアレベルでの遠隔操作環境あるいはローカル接続での操作環境が整ったら、コマンドラインからnmtuiを入力し、nmtuiを起動します。
現在の接続を編集するため、「Edit a connection」を選択します。選択は、Enterキーを押します。
図7:nmtuiを使ってネットワークインタフェースを設定する
現在認識されているNICのインタフェース名がeno1、eno2、eno3、eno4として表示されています。現在のインタフェースeno1、eno2、eno3、eno4全てを削除します。削除は、にカーソルを合わせ、Enterキーを押すと、「Are you sure you want to delete the connection 'eno'?」と表示されますので、「Delete」を選択し、インタフェースを削除します。eno2からeth4まで同様の操作を繰り返します。カーソルの移動は上下左右の矢印キーで操作可能です。
図8:現在のインタフェースeno1、eno2、eno3、eno4が表示されている。これら全てを削除する
図9:インタフェースeno1、eno2、eno3、eno4をすべて削除した状態
次に、新しいインタフェース名eth0、eth1、eth2、eth3を作成します。新しくインタフェースを作成するには上図のを選択します。すると、「Select the type of connection you wish to create.」と表示され、インタフェースの接続タイプを選択するメッセージが表示されますので、「Ethernet」を選択し、「Create」にカーソルを合わせ、Enterキーを押します。
図10:接続タイプとしてEthernetを選択し、インタフェースを作成する様子
「Edit connection」の画面に遷移し、「Profile name」に「eth0」を入力します。Device名にも、「eth0」を入力します。nmtuiは、「Device」欄に入力されたeth0で現在のインタフェースとMACアドレスを紐づけて管理していますので、「Device」欄は必ず入力します。IPアドレスの設定は、「IPv4 CONFIGURATION 」で設定できます。にカーソルを合わせ、Enterキーで選択すると、プルダウンメニュー「Manual」が表示されますので、その後、「IPv4 CONFIGURATION 」の画面右端にあるを選択すると、手動で固定IPアドレスを割り振ることができます。
図11:デフォルトは、IPアドレスが自動的に割り当てられうように設定されているため「Automatic」になっている
図12:固定IPアドレスを割り振るため、「Manual」を選択する
固定IPアドレスは、「Addresses」、デフォルトゲートウェイのIPアドレスは「Gateway」、DNSサーバーのIPアドレスは、「DNS servers」、検索ドメイン名は、「Search domains」に入力します。必要事項を入力したら、下キーでカーソルを画面下部にスクロールさせ、「OK」を選択し、設定を確定させます。
図13:固定IPアドレスをeth0に対して設定している様子
再度、編集画面に移ると、「Device」欄にeth0に対応したMACアドレスが自動的に表示されているはずですので、確認しておきます。
図14:nmtuiが認識したポートのMACアドレスを「Device」欄で確認しておく
eth0と同様に、eth1、eth2、eth3についても、適切に設定を行います。全てのインタフェースが適切に登録されていることを確認したら、「Quit」を選択し、nmtuiを終了します。
図15:全てのインタフェース名がethXで登録されていることを確認
/etc/sysconfig/network-scripts/ifcfg-ethXが正しく生成されているかを確認します。
1 | # cd /etc/sysconfig/network-scripts/ |
OSを再起動します。
ipコマンド等で、eth0、eth1、eth2、eth3にIPアドレスが正しく設定され、通信できるかを確認してください。
NetworkManagerを使わずにNICを管理する
CentOS 7において、NICの設定を行うには、nmcliコマンドまたは、GUIベースの設定ツールのnmtuiを使用しますが、何らかの理由でnmcliやnmtuiが利用できない場合は、CentOS 6系と同様に、ifcfg-ethXを直接編集する方法でNICの設定を行うことができます。ただし、あくまでこれは、現時点で従来型の編集方法を可能とする後方互換性による回避策としての手順です。今後は、この方法がサポートされない可能性もありますのでご注意下さい。以下では、ファイルを直接編集する方法を掲載します。最近のx86サーバーは、物理NICポートを複数持っていますが、今回は、その複数のポートのうちの1つを設定することにします。まず、/etc/sysconfig/network-scripts/ディレクトリにあるオリジナルの設定ファイルを別のファイル名でコピーしておきます。
1 | # cd /etc/sysconfig/network-scripts/ |
2 | # mv ifcfg-eno1 org.ifcfg-eno1 |
3 | # mv ifcfg-eno2 org.ifcfg-eno2 |
4 | # mv ifcfg-eno3 org.ifcfg-eno3 |
5 | # mv ifcfg-eno4 org.ifcfg-eno4 |
6 | # cp org.ifcfg-eno1 ifcfg-eth0 |
7 | # cp org.ifcfg-eno2 ifcfg-eth1 |
8 | # cp org.ifcfg-eno3 ifcfg-eth2 |
9 | # cp org.ifcfg-eno4 ifcfg-eth3 |
ifcfg-ethXファイルの中身を編集します。ifcfg-eth0ファイルでは、「DEVICE=eno1」と「NAME=eno1」となっている箇所を「DEVICE=eth0」及び「NAME=eth0」に変更します。さらに、NM_CONTROLLED=noを記述します。適宜、HWADDR=にMACアドレスを記述して下さい。
設定変更を反映させるため、OSを再起動します。
OS再起動後、nmcliコマンドにより、上記のインタフェースが「unmanaged」になっていることを確認します。
04 | GENERAL.HWADDR: 52:54:00:D0:CF:87 |
06 | GENERAL.STATE: 10 (unmanaged) ←「unmanaged」になっていることを確認 |
09 | WIRED-PROPERTIES.CARRIER: on |
以上で、CentOS 7におけるネットワーク管理の基本をご紹介しました。ネットワークの運用管理手順が従来のCentOS 5やCentOS 6と大きく変更されているため、最初は戸惑うことが多いかと思います。ネットワーク関連の管理コマンドやオプションは膨大に存在するため、習得に時間がかかりますが、まずは、従来のコマンドでよく利用するものをピックアップし、CentOS 7でも同様に利用できるかを試してみて下さい。今回は、比較的よく利用すると思われる管理手順やコマンドを掲載しておきましたので、システムの構築や日常の運用管理に活用してみて下さい。
<編集部より>一部の曖昧な表現を修正しました(2015/1/29)
この連載が書籍になりました! |
古賀 政純 著
価格:3,000円+税
発売日:2015年2月25日発売
ISBN:978-4-8443-3753-9
発行:インプレスジャパン
|
本書は、CentOS 7を取り巻く市場動向、CentOS 7が利用されるサーバーシステムの選定、CentOS 7の基礎、システム設計、OS管理やCentOS 7に対応したアプリケーションサーバーの構築手順などの勘所をご紹介します。連載では書ききれなかった本の内容、見どころが満載!
- セキュリティ管理
- チューニング
- 自動インストール
- Hadoop構築
- GlusterFS
- Ceph
 
|