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

2015年1月8日(木)
古賀 政純
前回に引き続き、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をインストールします。

# yum install -y teamd

複数のNICを束ねる仮想的なインタフェースteam0を作成します。

# nmcli connection add type team con-name team0 ifname team0 config '{"runner": {"name": "roundrobin"}}'

ここでは、teamドライバーによって作成される仮想的なNICのIPアドレスを172.16.70.99/16に設定するとします。

# 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のスレーブに設定します。

# nmcli connection add type team-slave autoconnect no ifname eth0 master team0
# nmcli connection add type team-slave autoconnect no ifname ens7 master team0

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

# systemctl restart network

スレーブ化したens7インタフェースを自動起動するように設定します。

# nmcli connection modify team-slave-ens7 connection.autoconnect yes

teamドライバーによって2枚のNIC(eth0とens7)が束ねられ、仮想的なインタフェースteam0が作成され、IPアドレスが割り振られるはずです。仮想的なインタフェースteam0に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: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master team0 state UP qlen 1000
    link/ether 52:54:00:fe:fe:7c brd ff:ff:ff:ff:ff:ff
3: ens7: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master team0 state UP qlen 1000
    link/ether 52:54:00:fe:fe:7c brd ff:ff:ff:ff:ff:ff
5: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN
    link/ether 56:84:7a:fe:97:99 brd ff:ff:ff:ff:ff:ff
    inet 172.17.42.1/16 scope global docker0
       valid_lft forever preferred_lft forever
11: team0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP←仮想的なインタフェース
    link/ether 52:54:00:fe:fe:7c brd ff:ff:ff:ff:ff:ff
    inet 172.16.70.99/16 brd 172.16.255.255 scope global team0
       valid_lft forever preferred_lft forever
    inet6 fe80::5054:ff:fefe:fe7c/64 scope link tentative dadfailed
       valid_lft forever preferred_lft forever

# nmcli c
名前             UUID                                  タイプ          デバイス
システム ens7    914777cb-cdcb-c90d-f590-a17dabc1db4e  802-3-ethernet  ens7
システム eth0    5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03  802-3-ethernet  eth0
team-slave-ens7  7359d2d6-2908-4f1d-ae55-3052ed84b032  802-3-ethernet  --
team-slave-eth0  daa0dedc-f44b-4374-9a82-d4d13f62c3b7  802-3-ethernet  --
team0            f62aaca3-a85f-49cf-9687-c94a34fc429c  team            team0
docker0          07c54a57-7da0-44e3-921b-d95f21013248  bridge          docker0

CentOS 7から、NetworkManagerのnmcliとnmtuiを使ってネットワークの設定を行い、ネットワークインタフェースは、NetworkManagerの制御下に置くことが強く推奨されています。NetworkManager配下で生成される設定ファイルを確認してみましょう。複数のNICを束ねる仮想的なインタフェースteam0のための設定ファイルifcfg-team0を確認します。

# cat /etc/sysconfig/network-scripts/ifcfgteam0
DEVICE=team0
TEAM_CONFIG="{\"runner\": {\"name\": \"roundrobin\"}}"
DEVICETYPE=Team
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME=team0
UUID=f62aaca3-a85f-49cf-9687-c94a34fc429c
ONBOOT=yes
IPADDR0=172.16.70.99
PREFIX0=16
GATEWAY0=172.16.1.1
DNS1=172.16.1.1
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes

teamドライバーによって束ねられるスレーブインタフェースeth0とens7の設定ファイルも確認します。

# cat /etc/sysconfig/network-scripts/ifcfg-team-slave-eth0
BOOTPROTO=dhcp
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=team-slave-eth0
UUID=daa0dedc-f44b-4374-9a82-d4d13f62c3b7
DEVICE=eth0
ONBOOT=no
TEAM_MASTER=team0
DEVICETYPE=TeamPort

# cat /etc/sysconfig/network-scripts/ifcfg-team-slave-ens7
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=team-slave-ens7
UUID=7359d2d6-2908-4f1d-ae55-3052ed84b032
DEVICE=ens7
ONBOOT=yes
TEAM_MASTER=team0
DEVICETYPE=TeamPort
PEERDNS=yes
PEERROUTES=yes

チーミングされた仮想的なインタフェース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というインタフェース名で登録されます。

# nmcli device
DEVICE  TYPE      STATE        CONNECTION
eno1    ethernet  connected    eno1
eno2    ethernet  connected    eno2
eno3    ethernet  unavailable  --
eno4    ethernet  unavailable  --
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」を追加します。

# cp /etc/default/grub /etc/default/grub.org
# vi /etc/default/grub
...
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ファイルに反映します。

# grub2-mkconfig -o /boot/grub2/grub.cfg

まだ、適切なifcfg-ethXは生成していませんが、この状態でOSを再起動します。

# reboot

CentOS 7が自動的に割り当てたNICの設定ファイルであるifcfg-enoXを破棄して、ethX用の設定ファイルを生成します。ifcfg-ethXファイルを生成するには、nmcliコマンドまたは、GUIベースの設定ツールであるnmtuiを使用します。ここでは、nmtuiを使って設定してみましょう。全てのネットワークインタフェース全てを編集しますので、SSH接続やVNC接続等での遠隔からの接続が切断されてしまいます。そこで、ネットワークインタフェースとは独立して稼働する遠隔管理専用のネットワークポート(HP ProLiantサーバーの場合はオンボードに搭載されたiLO4チップ等)が提供する仮想端末機能を使った遠隔管理か、ローカル接続のディスプレイとキーボード等を使った操作に切り替えて下さい。ハードウェアレベルでの遠隔操作環境あるいはローカル接続での操作環境が整ったら、コマンドラインからnmtuiを入力し、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が正しく生成されているかを確認します。

# cd /etc/sysconfig/network-scripts/
# cat ifcfg-eth0
...
# cat ifcfg-eth1
...

OSを再起動します。

# reboot

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/ディレクトリにあるオリジナルの設定ファイルを別のファイル名でコピーしておきます。

# cd /etc/sysconfig/network-scripts/
# mv ifcfg-eno1 org.ifcfg-eno1
# mv ifcfg-eno2 org.ifcfg-eno2
# mv ifcfg-eno3 org.ifcfg-eno3
# mv ifcfg-eno4 org.ifcfg-eno4
# cp org.ifcfg-eno1 ifcfg-eth0
# cp org.ifcfg-eno2 ifcfg-eth1
# cp org.ifcfg-eno3 ifcfg-eth2
# cp org.ifcfg-eno4 ifcfg-eth3

ifcfg-ethXファイルの中身を編集します。ifcfg-eth0ファイルでは、「DEVICE=eno1」と「NAME=eno1」となっている箇所を「DEVICE=eth0」及び「NAME=eth0」に変更します。さらに、NM_CONTROLLED=noを記述します。適宜、HWADDR=にMACアドレスを記述して下さい。

# vi ifcfg-eth0
...
DEVICE=eth0
...
NAME=eth0
...
NM_CONTROLLED=no
...

設定変更を反映させるため、OSを再起動します。

# reboot

OS再起動後、nmcliコマンドにより、上記のインタフェースが「unmanaged」になっていることを確認します。

# nmcli device show
GENERAL.DEVICE:                         eth0
GENERAL.TYPE:                           ethernet
GENERAL.HWADDR:                         52:54:00:D0:CF:87
GENERAL.MTU:                            1500
GENERAL.STATE:                          10 (unmanaged) ←「unmanaged」になっていることを確認
GENERAL.CONNECTION:                     --
GENERAL.CON-PATH:                       --
WIRED-PROPERTIES.CARRIER:               on
...

以上で、CentOS 7におけるネットワーク管理の基本をご紹介しました。ネットワークの運用管理手順が従来のCentOS 5やCentOS 6と大きく変更されているため、最初は戸惑うことが多いかと思います。ネットワーク関連の管理コマンドやオプションは膨大に存在するため、習得に時間がかかりますが、まずは、従来のコマンドでよく利用するものをピックアップし、CentOS 7でも同様に利用できるかを試してみて下さい。今回は、比較的よく利用すると思われる管理手順やコマンドを掲載しておきましたので、システムの構築や日常の運用管理に活用してみて下さい。

<編集部より>一部の曖昧な表現を修正しました(2015/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メルマガ会員のサービス内容を見る

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