CentOS 7 ネットワーク設定方法について

CentOS 6 までは、NIC インタフェース を設定するために、/etc/sysconfig/network-scripts/ifcfg-ethX を編集する必要がありましたが、CentOS 7 ではこのやり方が非推奨になりました。

CentOS 7 からは、ネットワークを設定するためのコマンドとして、NetworkManager に付属する nmclinmtui の使用が推奨されます。

基本的には、nmcli コマンドだけで良いと思いますが、BIOS 画面風の TUI (テキストユーザインタフェース) である nmtui を使って設定することも可能です。

今回は、nmclinmtui を使って、以下のネットワーク設定を実施します。

項目設定前設定後
インタフェース名ens160
IP アドレス192.168.1.2/2410.10.10.2/24
Gateway192.168.1.110.10.10.1
DNS(Primary)8.8.8.8
DNS(Secondary)8.8.4.4

また、IPv4 は、マニュアル方式(固定 IP アドレス)で設定し、IPv6 は、無効にします。

nmcli を使ったネットワーク設定

nmcli コマンドを使ってネットワーク設定を実施します。

Step 1. nmcli オプション確認

設定する前に、どんな機能が使えるか確認します。

OBJECT とか見慣れないオプションがありますが、この後、このオブジェクトを使ってネットワークを設定して行くので、とりあえず、軽く目を通してください。

nmcli 機能確認
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
# nmcli --help
Usage: nmcli [OPTIONS] OBJECT { COMMAND | help }

OPTIONS
  -t[erse]                                   terse output
  -p[retty]                                  pretty output
  -m[ode] tabular|multiline                  output mode
  -f[ields] <field1,field2,...>|all|common   specify fields to output
  -e[scape] yes|no                           escape columns separators in values
  -n[ocheck]                                 don't check nmcli and NetworkManager versions
  -a[sk]                                     ask for missing parameters
  -w[ait] <seconds>                          set timeout waiting for finishing operations
  -v[ersion]                                 show program version
  -h[elp]                                    print this help

OBJECT
  g[eneral]       NetworkManager's general status and operations
  n[etworking]    overall networking control
  r[adio]         NetworkManager radio switches
  c[onnection]    NetworkManager's connections
  d[evice]        devices managed by NetworkManager
  a[gent]         NetworkManager secret agent or polkit agent

Step 2. 設定前の現状確認

設定する前に、現在のデバイス情報、ネットワーク設定情報を確認します。

設定前の現状確認
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
# nmcli d
デバイス  タイプ    状態      接続
ens160    ethernet  接続済み  ens160
lo        loopback  管理無し  --

# nmcli d show ens160
GENERAL.デバイス:                       ens160
GENERAL.タイプ:                         ethernet
GENERAL.ハードウェアアドレス:           00:50:56:95:91:EE
GENERAL.MTU:                            1500
GENERAL.状態:                           100 (接続済み)
GENERAL.接続:                           ens160
GENERAL.CON パス:                       /org/freedesktop/NetworkManager/ActiveConnection/1
WIRED-PROPERTIES.キャリア:              オン
IP4.アドレス[1]:                        192.168.1.2/24
IP4.ゲートウェイ:                       192.168.1.1
IP6.アドレス[1]:                        fe80::250:56ff:fe95:91ee/64

デバイス名について

デバイス名 は、環境によって異なります。

この例で、デバイス名は、ens160 となっていますが、このデバイス名によって、以下のように、ネットワークコンフィグファイル名が決まります

/etc/sysconfig/network-scripts/ifcfg-ens160

Step 3. IP アドレス、及びゲートウェイ設定

IP アドレスとゲートウェイを設定します。

IP アドレス・ゲートウェイ設定
1
2
3
# nmcli c mod ens160 ipv4.addresses 10.10.10.2/24

# nmcli c mod ens160 ipv4.gateway 10.10.10.1

IP とゲートウェイをコマンド一発で設定する

IP アドレスとゲートウェイ設定をコマンド一発で同時に設定したい場合には、以下のようにします。

特に、ipv4.gateway は、CentOS 7.1 から追加されたオプションなので、もし CentOS 7.0 をご利用の方で上記のコマンドでゲートウェイ設定が出来なかった場合には、以下のコマンドを使ってください。

nmcli c mod <DEVICE NAME> \
> ipv4.method manual \
> ipv4.addresses "<IP ADDRESS>/<NETMASK> <GATEWAY>"

# nmcli c mod ens160 ipv4.method manual ipv4.addresses "10.10.10.2/24 10.10.10.1"

また、バージョンによっては、以下のように一発で入らない場合もあるので、そのときには、逆に ipv4.addressesipv4.gateway を別々に分けて実行してください。

# nmcli c mod ens160 ipv4.method manual ipv4.addresses "10.10.10.2/24 10.10.10.1"
エラー: ipv4.addresses の変更に失敗しました: invalid prefix '24 10.10.10.1'; <1-32> allowed。

Step 4. DNS リゾルバ設定

次に、名前を解決するために、参照する DNS サーバを設定します。

nmcli を使ってリゾルバを設定すると /etc/resolv.conf に設定が反映されます。

DNS リゾルバ設定
1
2
3
4
5
6
7
8
9
# cat /etc/resolv.conf

# nmcli c mod ens160 ipv4.dns 8.8.8.8,8.8.4.4
# nmcli c mod ens160 ipv4.dns-search hogehoge.com

# cat /etc/resolv.conf | grep -v "^#"
search hogehoge.com
nameserver 8.8.8.8
nameserver 8.8.4.4

空白区切りでも良い

リゾルバ設定時に、以下のように、ダブルクォーテーションで囲んで、空白区切りで設定することも可能です。

# nmcli c mod ens160 ipv4.dns "8.8.8.8 8.8.4.4"

Step 5. IPv4 固定化

該当イーサネットの方式をマニュアル(固定 IP アドレス)に設定します。

IP アドレスを固定化するためには、該当イーサネットに IP アドレスが設定されている必要があります。

IP アドレスが設定されてない状態で、以下のコマンドを実行することはできません。

IP アドレス固定化
1
# nmcli c mod ens160 ipv4.method manual

Step 6. ネットワーク接続有効化

後は、設定を反映するだけですが、設定を反映する前に該当イーサネットの ONBOOT を有効にします。

ONBOOT ネットワーク接続有効化
1
2
3
4
5
6
7
# cat /etc/sysconfig/network-scripts/ifcfg-ens160 | grep "ONBOOT"
ONBOOT=no

# nmcli c mod ens160 connection.autoconnect yes

# cat /etc/sysconfig/network-scripts/ifcfg-ens160 | grep "ONBOOT"
ONBOOT=yes

ONBOOT について

すでに ONBOOT が有効になっていれば、このステップは飛ばしても構いません。

特に、OS インストール時に特定イーサネットの IP を設定しておらず、接続が無効になっている場合には、デフォルトで ONBOOT=no になってしまうため、この状態だと後からネットワーク設定後に、サービスを再起動してもイーサネットが立ち上がらなくてハマることもあります。

なので、イーサネットに始めて IP アドレスを振る場合には、明示的に ONBOOT=yes を設定しておくと良いです。

Step 7. 設定反映

設定を反映するためには、該当イーサネットを DOWN & UP するか、ネットワークサービスを再起動する必要があります。

設定反映
01
02
03
04
05
06
07
08
09
10
11
━━━━━━━━━━━━━━━━━━━━━
該当イーサネットのみ再起動する場合
━━━━━━━━━━━━━━━━━━━━━
# nmcli c down ens160 && nmcli c up ens160
Connection 'ens160' successfully deactivated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/1)
接続が正常にアクティベートされました (D-Bus アクティブパス: /org/freedesktop/NetworkManager/ActiveConnection/2)

━━━━━━━━━━━━━━━━━━━━━
ネットワーク全体を再起動する場合
━━━━━━━━━━━━━━━━━━━━━
# systemctl restart network

service network restart も使える?

# service network restart

Restarting network (via systemctl):    [ OK ]

一応、使えるみたいですが、メッセージを見ると systemctl と連動して動いてるっぽいですね。 でも、CentOS 7 のサービスコントロールは、全て、systemctl を使うのが推奨されているので、このやり方は止めた方が良いかと。

Step 8. 設定後の NIC 状態確認

設定後の NIC 状態確認
01
02
03
04
05
06
07
08
09
10
11
12
13
14
# nmcli d show ens160
GENERAL.デバイス:                       ens160
GENERAL.タイプ:                         ethernet
GENERAL.ハードウェアアドレス:           00:50:56:95:91:EE
GENERAL.MTU:                            1500
GENERAL.状態:                           100 (接続済み)
GENERAL.接続:                           ens160
GENERAL.CON パス:                       /org/freedesktop/NetworkManager/ActiveConnection/2
WIRED-PROPERTIES.キャリア:              オン
IP4.アドレス[1]:                        10.10.10.2/24
IP4.ゲートウェイ:                       10.10.10.1
IP4.DNS[1]:                             8.8.8.8
IP4.DNS[2]:                             8.8.4.4
IP6.アドレス[1]:                        fe80::250:56ff:fe95:91ee/64

Step 9. IPv6 を永久的に無効化

アプリケーションによっては、IPv6 が有効になっているとデフォルトで見に行ったりして、誤動作を起こす原因になるので、使わない IPv6 インタフェースは、セキュリティ・管理面においても無効にした方が良いです。

上記の line : 14 を見ると IPv6 が有効になっているので、無効にします。

IPv6 を無効にする方法には、以下の 3種類があります。

  • /etc/sysctl.conf を使って IPv6 を無効化
  • /etc/sysctl.d/disable_ipv6.conf を使って IPv6 を無効化
  • /etc/default/grub を使って IPv6 を無効化

IPv6 無効化 その1. /etc/sysctl.conf を使って無効化

/etc/sysctl.conf を編集し、IPv6 を無効にします

/etc/sysctl.conf 内に、以下を追加し、sysctl を使って、設定を反映します。

/etc/sysctl.conf : IPv6 無効化
01
02
03
04
05
06
07
08
09
10
11
12
# vi /etc/sysctl.conf
・・・
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
・・・

# sysctl -p
・・・
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1

# nmcli c mod ens160 ipv6.method ignore

IPv6 無効化 その2. /etc/sysctl.d/disable_ipv6.conf を使って無効化

/etc/sysctl.d/disable_ipv6.conf を新規作成し、IPv6 を無効にします。

/etc/sysctl.d/disable_ipv6.conf : IPv6 無効化
01
02
03
04
05
06
07
08
09
10
# sysctl -w net.ipv6.conf.all.disable_ipv6=1
# sysctl -w net.ipv6.conf.default.disable_ipv6=1

# touch /etc/sysctl.d/disable_ipv6.conf

# vi /etc/sysctl.d/disable_ipv6.conf
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1

# nmcli c mod ens160 ipv6.method ignore

IPv6 無効化 その3. /etc/default/grub を使って無効化

以下は、CentOS 7 で使われているブートローダ GRUB2IPv6 無効化設定をする方法です。

設定後、OS 再起動が必要です。

/etc/default/grub : IPv6 無効化
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
━━━━━━━━━━━━━━━━━━━━━━━━━
5・6行目あたりに「ipv6.disable=1」を追記
━━━━━━━━━━━━━━━━━━━━━━━━━
# vi /etc/default/grub
・・・
GRUB_CMDLINE_LINUX="ipv6.disable=1 ・・・"
・・・

━━━━━━━━━━━━━━━━━━━━━━━━━
GRUB2 コンフィグファイル生成
━━━━━━━━━━━━━━━━━━━━━━━━━
# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-229.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-229.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-fec1d4fa8c12459c84724bc20d659ce9
Found initrd image: /boot/initramfs-0-rescue-fec1d4fa8c12459c84724bc20d659ce9.img
done

# shutdown -r now

# nmcli c mod ens160 ipv6.method ignore

オマケ : IPv6 無効後に、追加でやっておくと良い設定

例えば、PostfixSendmail のような MTA (Mail Transfer Agent) を使って、メール送信・受信テストを行う際に、以下のように fatal: parameter inet_interfaces: no local interface found for ::1 のようなエラーで失敗することがあります。

IPv6 のせいでメール送信に失敗したときの例
1
2
3
4
5
6
7
8
# sendmail hogehoge@mail-to.com
Content-Type: text/plain; charset=utf-8
From: root@hogehoge.com
To: user@hogehoge.com
Subject: メール送信・受信テスト
メール送信・受信テスト!
.
sendmail: fatal: parameter inet_interfaces: no local interface found for ::1

すなわち、::1 (IPv6 の localhost) が見つからないということなので、/etc/hosts 側の IPv6 関連記述を無効にすることで解決できます。

/etc/hosts
1
2
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
#::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

また、修正した後に、場合によっては、関連サービスの再起動が必要です。

このように、IPv6 無効化後に、/etc/hosts に残っていた ::1 が、他のサービスに影響を及ぼすこともあるので、IPv6 無効化後には、/etc/hosts 側の ::1 を忘れずにコメントアウトしておこくとをオススメします。

nmtui を使ったネットワーク設定

nmtui は、以前の system-config-network の代替となるコマンドです。 X Window じゃなくても、Teraterm のような SSH クライアントのターミナル上で、nmtuiを実行すると BIOS 画面風のインターフェースが表示されるので、TUI(Text User Interface) 経由でネットワーク周りの設定・変更が可能になります。

nmtui 実行
1
# nmtui

TUI インターフェース が立ち上がったら、接続の編集 を押します。

nmtui 実行

イーサネットの 接続名 を選択し、編集... を押します。

nmtui eth 編集

詳細設定画面が表示されるので、環境に合わせて、IP アドレスゲートウェイDNSIPv6 等を設定し、OK を押します。

nmtui eth 詳細設定

最後に、終了 を押します。

nmtui 設定終了

設定が終わったら、ネットワークサービスを再起動し、設定を反映します。

nmtui 設定反映
1
# systemctl restart network

おまけ その1 : 従来通りにネットワーク設定がしたい

従来の通りに、CentOS 6 までのやり方で、/etc/sysconfig/network-scripts/ifcfg-ethX を直接編集するやり方で設定したい場合には、先ほど紹介した GRUB2 ブートローダを使った IPv6 無効化設定 と同じようなやり方で、/etc/default/grub を編集する必要があります。

ethX のような名前の方が明らかに使いやすいですし、名前を変更したって不具合が起きるわけでもないので、個人的には変更することをオススメします。

設定後に、既存の全てのイーサネット・設定ファイル名を ifcfg-en* から ifcfg-ethX に変更した上で、OS 再起動が必要です。

/etc/default/grub : 従来通りに NIC 設定できるようにする
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
━━━━━━━━━━━━━━━━━━━━━━━━━━━
5・6行目あたりに「biosdevname=0 net.ifnames=0」を追記
━━━━━━━━━━━━━━━━━━━━━━━━━━━
# vi /etc/default/grub
・・・
GRUB_CMDLINE_LINUX="biosdevname=0 net.ifnames=0 ・・・"
・・・

━━━━━━━━━━━━━━━━━━━━━━━━━━━
GRUB2 コンフィグファイル生成
━━━━━━━━━━━━━━━━━━━━━━━━━━━
# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-229.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-229.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-fec1d4fa8c12459c84724bc20d659ce9
Found initrd image: /boot/initramfs-0-rescue-fec1d4fa8c12459c84724bc20d659ce9.img
done

━━━━━━━━━━━━━━━━━━━━━━━━━━━
イーサネット・設定ファイル名の変更・デバイス名変更
━━━━━━━━━━━━━━━━━━━━━━━━━━━
# cd /etc/sysconfig/network-scripts/
# mv ./ifcfg-ens160 ./ifcfg-eth0

# vi ./ifcfg-eth0
-------- ここから --------
・・・
#NAME="ens160"
NAME="eth0"
・・・
#DEVICE="ens160"
DEVICE="eth0"
・・・
-------- ここまで --------

━━━━━━━━━━━━━━━━━━━━━━━━━━━
設定反映
━━━━━━━━━━━━━━━━━━━━━━━━━━━
# shutdown -r now

おまけ その2 : IP アドレスを変更するも設定が反映されない

また、IP アドレスを変更した後、設定を適用するためにサービスを再起動しても設定が反映されない場合があります。

そのときには、該当インターフェースを down && up させると反映されるようになります。

IP 変更後、設定が反映されない時の対処方法
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# nmcli d show ens160
・・・
IP4.アドレス[1]:                        10.10.10.2/24      #### IP 変更前
IP4.ゲートウェイ:                       10.10.10.1
・・・

# nmcli c mod ens160 ipv4.addresses "10.10.10.200/24"      #### IP 変更

# systemctl restart network       #### ネットワーク再起動

# nmcli d show ens160             #### 確認
・・・
IP4.アドレス[1]:                        10.10.10.2/24      #### 変わってない
IP4.ゲートウェイ:                       10.10.10.1
・・・

# ifdown ens160 && ifup ens160    #### インターフェース Down・Up
Device 'ens160' successfully disconnected.
接続が正常にアクティベートされました (D-Bus アクティブパス: /org/freedesktop/NetworkManager/ActiveConnection/2)

# nmcli d show ens160             #### 確認
・・・
IP4.アドレス[1]:                        10.10.10.200/24    #### 変わってる
IP4.ゲートウェイ:                       10.10.10.1
・・・

それでも疎通が取れなかったら

後は、サーバへ Ping が通ることを確認して終わりなのですが。

Firewall が疑わしいのであれば、一旦無効にして疎通取れることを確認してから有効にするか、ちゃんとポートを開ける設定を入れてから実施するか そこは使い方によるので、環境に合わせて設定してください。

終わりに

少しややこしいところもあるかと思いますが、次期にリリースされる新しいバージョンを使い続けるためにも、新しいコマンドの使い方を覚えたほうが良いのではないかと思います。

以上、CentOS 7 ネットワーク設定、及び IPv6 無効化 でした。