Tech Horse Club

技術ブログ×競馬予測

【CentOS7】nmcliを使って固定IPアドレスを割り当てる手順

RHEL7の学習の為に、CentOS7を自宅NUCの仮想環境上にインストールしたのですが、インストール時の初期設定で動的にIPアドレスを割り振る設定にしていました。このままだと自宅のネットワーク環境情報がぐちゃぐちゃになってしまうので、業務サーバのように、固定のプライベートIPアドレスを割り当てることにします。

RHEL6(CentOS6)の場合は、/etc/sysconfig/network-scripts/ifcfg-eth0の設定ファイルを修正して設定していましたが、CentOS7の場合はNetworkManagerコマンドラインインタフェースであるnmcliを使った設定が推奨されています。

NetworkManagerとは?

  • RedHatが開発した、Linuxにおけるネットワーク管理を実現する為の仕組みのこと。
  • 設定変更用のインタフェースとして、「nmcli」「nmtui」「管理GUI」を持つ。
  • 設定変更用のインタフェースからの操作を、OSに反映させる。

変更手順

バイスの情報を表示

バイスの情報を表示します。loループバックアドレスで、IPネットワーク上の自分自身に接続する為のIPアドレスになります。今回はens160が設定変更の対象となります。

$ nmcli device
デバイス  タイプ    状態      接続
ens160    ethernet  接続済み  ens160
lo        loopback  管理無し  --
$ nmcli device show ens160
GENERAL.デバイス:                       ens160
GENERAL.タイプ:                         ethernet
…
ネットワークの設定を手動(manual)に切替

インストール時に接続設定をDHCP(Auto)にしていたため、手動(manual)に変更します

$ nmcli connection modify ens160 ipv4.method manual
NIC固定IPアドレスを割り当てる

固定IPアドレスを割り当てます。今回は「192.168.1.22/24」が割り当てIPアドレスになります。

$ nmcli connection modify ens160 ipv4.addresses "192.168.1.22/24"
デフォルトゲートウェイを設定する

デフォルトゲートウェイを設定します。今回は「192.168.1.1/24」に設定します。

$ nmcli connection modify ens160 ipv4.gateway "192.168.1.1"
NICダウンアップ

変更した設定を反映します。NetworkManagerの再起動でもよいのですが、影響範囲極小化の為、設定変更したNICのみダウンアップします。

$ nmcli connection down ens160; nmcli connection up ens160
接続 'ens160' が正常に非アクティブ化されました (D-Bus アクティブパス: /org/freedesktop/NetworkManager/ActiveConnection/3)
接続が正常にアクティベートされました (D-Bus アクティブパス: /org/freedesktop/NetworkManager/ActiveConnection/4)

以上で、CentOS7での固定IPアドレスの割り当て作業は終了になります。もう一度nmcli device showでデバイス情報を見てみると、割り当てたIPアドレスが表示されることが確認できるかと思います。

(おまけ)設定ファイルでも変更できるのか検証

CentOS6で存在していた設定ファイルも存在しているようです。

# ls -la /etc/sysconfig/network-scripts/ | grep ifcfg
-rw-r--r--. 1 root root   332 10月 22 23:03 ifcfg-ens160
-rw-r--r--. 1 root root   254  5月  3 19:17 ifcfg-lo
# cat /etc/sysconfig//network-scripts/ifcfg-ens160
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
・・・
DEVICE=ens160
ONBOOT=yes
IPADDR=192.168.1.22
PREFIX=24
GATEWAY=192.168.1.1

nmcliコマンドから設定変更すると、変更内容が設定ファイルに反映されます。

# nmcli connection modify ens160 ipv4.addresses "192.168.1.23/24"
# cat /etc/sysconfig//network-scripts/ifcfg-ens160
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
・・・
DEVICE=ens160
ONBOOT=yes
IPADDR=192.168.1.23
PREFIX=24
GATEWAY=192.168.1.1

viで設定ファイルを書き換えます。書き換えただけでは、反映されません。

# nmcli device show ens160
GENERAL.デバイス:                       ens160
GENERAL.タイプ:                         ethernet
GENERAL.ハードウェアアドレス:           00:0C:29:1B:E7:45
GENERAL.MTU:                            1500
GENERAL.状態:                           100 (接続済み)
GENERAL.接続:                           ens160
GENERAL.CON パス:                       /org/freedesktop/NetworkManager/ActiveConnection/4
WIRED-PROPERTIES.キャリア:              オン
IP4.アドレス[1]:                        192.168.1.22/24
IP4.ゲートウェイ:                       192.168.1.1
・・・

NICのダウンアップをしてみましたが、設定は反映されません。

# nmcli connection down ens160; nmcli connection up ens160
接続 'ens160' が正常に非アクティブ化されました (D-Bus アクティブパス: /org/freedesktop/NetworkManager/ActiveConnection/4)
接続が正常にアクティベートされました (D-Bus アクティブパス: /org/freedesktop/NetworkManager/ActiveConnection/5)
[root@kny-p-dev2 ~]# nmcli device show ens160
GENERAL.デバイス:                       ens160
GENERAL.タイプ:                         ethernet
GENERAL.ハードウェアアドレス:           00:0C:29:1B:E7:45
GENERAL.MTU:                            1500
GENERAL.状態:                           100 (接続済み)
GENERAL.接続:                           ens160
GENERAL.CON パス:                       /org/freedesktop/NetworkManager/ActiveConnection/5
WIRED-PROPERTIES.キャリア:              オン
IP4.アドレス[1]:                        192.168.1.22/24
・・・

なぜだろう?と思って調べてみると、RHELの公式サイトに下記の記述がありました。

Red Hat Enterprise Linux 7 では、ifcfg ファイルを変更しても、NetworkManager は自動的に変更を認識しないので、変更を通知する必要があります。NetworkManager のプロファイル設定を更新するツールを使用している場合、そのプロファイルを使用して接続するまでは、NetworkManager は変更を実行しません。たとえば、エディターを使用して設定ファイルが変更された場合、NetworkManager にその設定ファイルを再度読み込むように指示する必要があります。

どうやら、NetworkManagerに変更を通知する必要があるようです。

# nmcli connection reload ens160
# nmcli device show ens160
GENERAL.デバイス:                       ens160
GENERAL.タイプ:                         ethernet
GENERAL.ハードウェアアドレス:           00:0C:29:1B:E7:45
GENERAL.MTU:                            1500
GENERAL.状態:                           100 (接続済み)
GENERAL.接続:                           ens160
GENERAL.CON パス:                       /org/freedesktop/NetworkManager/ActiveConnection/5
WIRED-PROPERTIES.キャリア:              オン
IP4.アドレス[1]:                        192.168.1.22/24
IP4.ゲートウェイ:                       192.168.1.1
・・・
[root@kny-p-dev2 ~]# nmcli connection down ens160; nmcli connection up ens160

ここで、NICIPアドレスが変更されたため、Teratermが落ちました。再度接続して確認した所、無事に割り当てIPアドレスが変更されたようです。