Linux
CentOS

CentOS6・7のifcfg他設定ファイルについて


1. とりあえず

まず非常によくある「/etc/sysconfig/network-srciprts/にifcfgが無い!」って状況の対処法。

DHCPサーバが使用できる環境ならNetworkManagerがあろうとなかろうと以下の記述が入ったifcfg-eth0さえあれば大抵動く。


ifcfg-eth0.min

DEVICE=eth0

BOOTOPROTO=dhcp

これにONBOOT=yesを加えて再起動するなりifup eth0なりすればとりあえずNICは使える。

更にNetworkManagerが有効ならばGUIのネットワーク設定画面でプロファイルを開いて、何も書き換えずに"適用"をクリックするとifcfg-eth0がNetworkManager使用下でのデフォルト設定に書き換わります。

以下は書き換わったifcfgの例。


ifcfg-eth0.nm

DEVICE=eth0

BOOTPROTO=dhcp
ONBOOT=yes
TYPE=Ethernet
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME="System eth0"
UUID=********-****-****-****-************

もしくはnmcuiなりnmtuiなりGUI設定で接続プロファイルを作成し、適切にリネームした後ifcfgに"DEVICE=xxxx"を足す。


2. NetworkManagerについて

以下のページが分かりやすい

RHEL7 系のネットワーク設定 – ゴミ箱

RHEL7/CentOS7 NetworkManager徹底入門

NetworkManagerは接続をコネクションとデバイスに分けており、コネクションの紐付けにUUIDを使っている。このコネクションは明示しない限りデバイスと関連づけられておらず、GUI設定画面からデバイスに関連付けられる方法は無い。

(MACアドレスで関連付けられるけど、カード交換した時に問題になるじゃん…)

ifcfgに"DEVICE=xxxx"を足しましょう。

NetrworkManagerはコネクションと呼ばれる接続プロファイルとNICを示すデバイスを区別する等、ネットワークを動的に設定する仕組みを取り入れてます。(デバイスが明示されていない限り接続時に自動でデバイスを選択する)

コネクションの紐付けにはUUIDを使用しているため、NetworkManager由来のインターフェースで設定を作成するとUUIDが付与される。

コネクションは"nmcli connection"、デバイスは"nmcli device"で確認可能。

# nmcli c

名前 UUID タイプ デバイス
システム enp6s0 ********-****-****-****-************ 802-3-ethernet enp6s0
イーサネット接続 1 ********-****-****-****-************ 802-3-ethernet --
# nmcli d
デバイス タイプ 状態 接続
enp6s0 ethernet 接続済み システム enp6s0
virbr0 bridge 切断済み --
lo loopback 管理無し --
virbr0-nic tap 管理無し --

便利な一方で適当に設定してるとifcfg-有線接続_1みたいなデバイスを明示しないプロファイルがたくさん生まれてしまって従来のifcfg-eth0みたいな設定に慣れていると結構困ります。また、ifcfg以外の設定ファイルを勝手に書き換えてしまったり、新しい機能があるのに中途半端に従来のネットワークスクリプトと互換性があるためにこんがらがります。


3. 代表的な設定の解説

設定
説明

NAME
nmcliのコネクション名、GUI設定画面のプロファイル名等

UUID
ifcfgとNetworkManagerのコネクションとの関連付けを行う

DEVICE
NICとの紐付けを行う

TYPE
Ether, Wireless, InfiniBand, Bridge, Bond, Vlan, Team, TeamPort等から選択する。無いなら無いでEtherが選択されるはず。少なくともifupスクリプトはEtherとみなす。

ONBOOT
OS起動時にNICを起動させるか

BOOTPROTO
DHCPを使用する場合は"dhcp"、静的に設定する場合は"static"もしくは"none"

IPADDR
IPアドレス(静的設定)

PREFIX
サブネットマスク(プレフィックス表記)

GATEWAY
このNICのゲートウェイアドレス

DNS1
DNSサーバのアドレス。以下DNS2、DNS3と続けられる。

IPV4_FAILURE_FATAL
IPv4の接続失敗によりNICの起動失敗とみなすか。noならIPv6の接続が試行される。

DEFROUTE
GATEWAYをデフォルトゲートウェイにするか。普通は1つyesにすべきだけど複数あってもうまくやってくれたはず。

PEERDNS
/etc/resolv.confにDHCPサーバから取得した情報を反映するか

PEERROUTES
デフォルトゲートウェイ情報をDHCPサーバから取得するか

IPV6INIT
IPv6を使うか

USERCTL
root以外のユーザーにオン/オフを許可するか

NM_CONTROLLED
NetworkManagerにこの設定を制御させるか


4. 設定ファイル類

覚えている限りでは以下の通り

・NetworkManagerの設定

/etc/NetworkManager/NetworkManager.conf

・NIC個別設定

/etc/sysconfig/network-scripts/ifcfg-xxxx

・名前解決系

/etc/hosts

/etc/hostname

/etc/networks

/etc/resolv.conf

・ルーティング系

/etc/sysconfig/network-scripts/route-****

/etc/sysconfig/network

・その他

/etc/udev/rules.d/70-persistent-net.rules


/etc/NetworkManager/NetworkManager.conf

ネットワークマネージャ全体の設定。通常はいじる必要なし、詳細は下記参照。

NetworkManager.conf:NetworkManagerリファレンスマニュアル

ただし/etc/resolv.confの変更を抑制するために、ifcfgのPEERDNSでなく、このファイルのmainセクションに"dns=none"に追加する方法がある。

CentOS 7のネットワーク管理基礎(前編) | Think IT(シンクイット)


/etc/sysconfig/network-scripts/ifcfg-xxxx

NIC個々の設定を行う。詳細は前述の通り。


/etc/hosts

IPアドレスとホスト名の照合を行う。一番左のホスト名が正式なホスト名で、以降はエイリアスとなる。


/etc/hostname

ホスト名を変更したい場合はこのファイルを編集する(CentOS7)。

CentOS 7 の Hostname を変更する - Qiita


/etc/networks

静的ドメイン、まずいじらない。以下は初期状態の一例

ドメイン
アドレス

default
0.0.0.0

loopback
127.0.0.0

link-local
169.254.0.0


/etc/resolv.conf

DNS問い合わせ先

設定
説明

nameserver
ネームサーバーのIPアドレス

domain
ドメイン名

search
検索リスト


/etc/sysconfig/network-scripts/route-xxxx

NIC毎のルーティング設定を行う。デフォルトゲートウェイの優先順序はifcfg-xxxx>route-xxxx>/etc/sysconfig/networkだったはず。

設定方法はIPコマンド引数形式とネットマスクディレクティブ形式があります。


IPコマンド引数形式

(dev xxxxは省略可能)

default via 192.168.0.1 dev xxxx

10.1.1.0/24 via 10.1.1.1 dev xxxx


ネットマスクディレクティブ形式

ADDRESS0=0.0.0.0

NETMASK0=0.0.0.0
GATEWAY0=192.168.0.1
ADDRESS1=10.1.1.0
NETMASK1=255.255.255.0
GATEWAY1=10.1.1.1


/etc/sysconfig/network

ルーティング設定、CentOS7では非推奨だったと思う。

(そもそもCentOS7.2ではファイルが無かった)

CentOS6でのホスト名の変更はこちらで行う。

設定
説明

NETWORKING
システム起動時にネットワークを有効にするか

HOSTNAME
ホスト名

GATEWAY
デフォルトゲートウェイアドレス

GATEWAYDEV
記載されたデバイスのゲートウェイアドレスをデフォルトにする


/etc/udev/rules.d/70-persistent-net.rules

NICとMACアドレスの結合をudevが行う。

カードを交換した場合にはここも見ておいた方が良い。


5. テンプレート

一応各種ファイルのテンプレートを残しておく。

他の設定を弄りたい場合はnm-settings-ifcfg-rhを読んで適宜設定しましょう。


NMあり、DHCP設定


ifcfg-eth0.nm-dhcp

NAME="System eth0"

UUID=********-****-****-****-************
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=dhcp
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no


NMあり、静的設定


ifcfg-eth0.nm-static

NAME"System eth0"

UUID=********-****-****-****-************
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.1.100
PREFIX=24
GATEWAY=192.168.1.1
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no


NMなし、DHCP設定


ifcfg-eth0.nonm-dhcp

DEVICE=eth0

TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no


NMなし、静的設定


ifcfg-eth0.nonm-static

DEVICE=eth0

TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.1.100
PREFIX=24
GATEWAY=192.168.1.1
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no


6. 備考

CentOS6の場合、GUI設定画面で"全てのユーザーに利用可能"にチェックしないと~/.gconf/system/networking/connections/以下にxml形式で設定が保管される(読みづらい)。

流石にCentOS7では改善されていて、/etc/sysconfig/network-scripts/以下にifcfg-xxxxで置かれるようになり、他の設定とは"USERS=xxxx"で区別される。

IPADDR、PREFIXは接尾に数字を付与することで増やすことも可能。

従来のIPエイリアス使うよりこちらの方が便利そう。というかnmcliではifcfg-xxxxとifcfg-xxxx:0は区別されてない。

PREFIX/NETMASK/NETWORK/BROADCAST辺りの設定の話

RHEL6: PREFIX overrides NETMASK in `ifcfg - piyolian


7. 要調査検証

ゲートウェイやDNS設定はどのファイルが優先される?

PEERDNS、PEERROUTES、NM_CONTROLLEDの挙動

DEVICEが同じifcfgが複数ある場合の挙動

エイリアス(ifcfg-eth0:0等)とクローンってNetworkManagerではもうサポートされてない?

->一応エイリアスは有効っぽいけどnmcliでの挙動が怪しい…。素直に複数IP記載するか、どうしてもエイリアス使いたいならNetworkManager切った方が良さそう。

インターフェース設定ファイル

「ifconfig eth0:?」は古い!CentOS/RHELでのIPエイリアスの設定方法 - 旅モバ


8. 最後に

この辺の情報がまとまったページが無かったので頭の整理がてら作成

補足・訂正・改善あればコメントお願いします。