【CentOS7】 nmcli コマンドを使用して複数NIC環境の設定をする手順

CentOS7になり、CentOS6 からかなりコマンドが変わっています。

「chkconfig」→「systemctl」など、新しいコマンドに変わりました。

 

CentOS6 では、Network Manager は基本的に「停止」をしてファイルベースでネットワークを設定する運用をしていた方が多いと思いますが、CentOS7 からは Network Manager を利用して設定する運用方法が推奨されています。

 

一応 CentOS7 でも Network Manager を「停止」して今まで通りファイルベースで設定することも可能ですが、Network Manager を利用する設定する方法が推奨されているので、この機会に「Network Manager」を利用してネットワークの設定をする方法をマスターしましょう。

 

ちなみに、なぜ CentOS7 になって「Network Manager」を利用して設定する方法が推奨されるようになったのかというと、ネットワーク関連のコマンド「nmcli」が何でもできてしまうというところもあるからです。

 

そこで今回は「nmcli」コマンドを利用して複数NICを持つネットワークの設定をする手順について解説します。

ネットワーク構成図

今回はこのような構成で NIC の設定をします。

サーバーは「CentOS7」で、NIC は2つ持っています。

OSをインストールした直後を想定して、ネットワーク周りを設定していきます。

【仮想環境】【CentOS7】nmcli コマンドを使用して複数NIC環境の設定をする手順

ホスト名を設定する

OSをインストールした直後はホスト名を設定します。

インストール時に「ホスト名」、「ドメイン名」など一通り設定をした場合は、スキップしてください。

 

最初に root になります。

# sudo su -

 

ホスト名を設定します。

[root@cnt07 ~]# nmcli general hostname test07
[root@cnt07 ~]# hostname
test07 ← test07に変わっています。
[root@cnt07 ~]#

 

※プロンプトの表示はログイン時に環境変数を持ってきているため、一度ログオフ・ログインをしないと反映されません。

「nmcli general hostname <ホスト名>」コマンドは一時的な変更ではありません。

OSを再起動した後も「test07」です。

その理由は、「nmcli general hostname <ホスト名>」コマンドを実行すると「/etc/hostname」ファイルも書き換えられるからです。

[root@cnt07 ~]# cat /etc/hostname
test07 ← /etc/hostnameファイルの中身も書き換えられています。

 

OSを再起動して確認してみると、ホスト名はそのままです。

[test@test07 ~]$ cat /etc/hostname
test07

※ちなみに、プロンプトも「cnt07」→「test07」へ変わっています。

 

IPアドレスを設定する

次に IP アドレスを設定します。

# nmcli connection modify eth0 ipv4.addresses 192.168.51.61/24
# nmcli connection modify eth1 ipv4.addresses 192.168.151.61/24

ちなみに IP アドレスの変更に関しては、コマンド実行後にすぐには反映されません。

反映させるためには「systemctl restart network.service」コマンドを実行しますが、設定がすべて完了してから最後に反映します。

 

IPアドレス を含む各設定を手動(manual)に変更する

OSをインストールした直後は「BOOTPROTO=DHCP」になっています。

以下のように「method manual」オプションのコマンドを実行すると「BOOTPROTO=none」(手動設定、スタティック)になります。

# nmcli connection modify eth0 ipv4.method manual
# nmcli connection modify eth1 ipv4.method manual

※IPアドレスを設定する前にこのコマンドを実行すると「Error: Failed to modify connection 'eth0': ipv4.address: 'method=manual'」というエラーが出ます。

 

NICの自動起動の設定

OSをインストールした直後は「ONBOOT=no」の状態になっています。

この設定を「ONBOOT=yes」に変更します。

# nmcli connection modify eth0 connection.autoconnect yes
# nmcli connection modify eth1 connection.autoconnect yes

 

デフォルトゲートウェイの設定

NICにデフォルトゲートウェイを設定します。

# nmcli connection modify eth1 ipv4.gateway 192.168.151.254

 

ネットワーク構成図はこうでした。

eth1に対してデフォルトゲートウェイ「192.168.151.254」を割り当てます。

【仮想環境】【CentOS7】nmcli コマンドを使用して複数NIC環境の設定をする手順

 
スタティックルートの設定

以下のようなネットワーク構成の場合、スタティックルートを設定しないと「192.168.1.0/24」「192.168.10.0/24」のネットワークへアクセスできません。

スタティックルートの設定も「nmcli」コマンドで設定できます。

しかも「自動的」に /etc/sysconfig/network-scripts ディレクトリに「route-ethX」ファイルが作成されます。

非常に便利です。

【仮想環境】【CentOS7】nmcli コマンドを使用して複数NIC環境の設定をする手順

 

下記のコマンドで「192.168.0.0/24」ネットワーク宛のパケットは、すべて「192.168.51.254」に向けて送信します。

# nmcli connection modify eth0 ipv4.routes "192.168.0.0/16 192.168.51.254"

このコマンドを実行すると /etc/sysconfig/network-scripts/ ディレクトリに「route-eth0」ファイルが作成されます。

実際に作成された「route-eth0」ファイルの中身を見てみます。

[root@test07 network-scripts]# cat route-eth0
ADDRESS0=192.168.0.0
NETMASK0=255.255.0.0
GATEWAY0=192.168.51.254

DNSの設定

まだまだネットワークの設定は続きます。

すべて nmcli コマンドで設定することができます。

次は DNS の設定(ネームサーバーの設定)をします。

プライマリ DNS サーバー(192.168.1.11)、セカンダリ DNS サーバー(192.168.1.12)の登録をします。

# nmcli connection modify eth1 ipv4.dns "192.168.1.11 192.168.1.12"

気を付けるべき点は、2つ同時に設定するという部分です。

1つずつ設定しようとすると、「追加」ではなく「上書き」方式なので、最初に設定した値が上書きで消えてしまいます。

たとえば、3つの DNS サーバーを登録したい場合は、3つの IP アドレスを1コマンドで設定します。

あとは、最初の値(IP アドレス)が、プライマリ DNS サーバーになるということです。

 

[root@test07 network-scripts]# cat ifcfg-eth1
TYPE="Ethernet"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="eth1"
UUID="5da93180-192d-4961-9211-8521be319a4b"
DEVICE="eth1"
ONBOOT="yes"
DNS1=192.168.1.11 ← プライマリ DNS サーバー
DNS2=192.168.1.12 ← セカンダリ DNS サーバー
IPADDR=192.168.151.61
PREFIX=24
GATEWAY=192.168.151.254
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_PRIVACY=no

 

この DNS サーバーの設定変更は「systemctl restart network.service」コマンドを実行するまで反映されません。

「/etc/resovl.conf」ファイルも元のままです。

 

[root@test07 network-scripts]# cat /etc/resolv.conf
# Generated by NetworkManager
search flets-east.jp iptvf.jp
nameserver 8.8.8.8 ← 元のままです。 
nameserver 8.8.4.4 ← 元のままです。

 

 

ネットワークの設定変更の反映

設定が完了したら最後に設定を反映させます。

# systemctl restart network.service

 

[root@test07 network-scripts]# cat ifcfg-eth1
TYPE="Ethernet"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="eth1"
UUID="5da93180-192d-4961-9211-8521be319a4b"
DEVICE="eth1"
ONBOOT="yes"
DNS1=192.168.1.11 ← DNSサーバーが更新されています。
DNS2=192.168.1.12 ← DNSサーバーが更新されています。
IPADDR=192.168.1.10
PREFIX=24
GATEWAY=192.168.1.1
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_PRIVACY=no

 

/etc/resolv.conf を確認します。

[root@test07 network-scripts]# cat /etc/resolv.conf
# Generated by NetworkManager
search flets-east.jp iptvf.jp
nameserver 192.168.1.11 ← 更新されています。
nameserver 192.168.1.12 ← 更新されています。

 

 

NetworkManagerを使う場合の注意点

手動で「/etc/resolv.conf」ファイルなどを編集しても、NetworkManagerが持っている情報でファイルが上書きされてしまうことがあります。

【例】

[root@test07 ~]# cat /etc/resolv.conf
# Generated by NetworkManager ← NetworkManager が設定をしていることを示しています。

 

 

ヒューマンエラー防止のため「NetworkManager」を「停止」して「net-tools」をインストールしても良い

目的は人数の多い組織でサーバーを運用管理することなら、無理に CentOS7 からやり方を変えて「NetworkManager」を起動して「nmcli」コマンドを使う必要はありません。

急に「CentOS6」でちゃんとできていた運用を捨てて「CentOS7」からよく分からない方法を使う必要はありません。

 

しかも突然 CentOS7 から、「RedHat社が推奨しているので nmcli コマンドを使いましょう」と宣言しても、それぞれのメンバーの手順がバラバラなら遅かれ早かれ障害が発生するでしょう。

 

私は新しい技術に手を出して障害を発生させてサービスを止めるよりも、安定した手順で確実に運用管理をする方がはるかにいいと思います。

 

ネットワークインターフェイスの確認方法

nmcli コマンドでネットワークインターフェイスを設定したら、同じ「nmcli」コマンドで設定を確認します。

 

基本的なネットワークインターフェイスの設定確認

まずは基本的な設定を確認するコマンドからです。

[root@test07 ~]# nmcli device
デバイス   タイプ     状態       接続
ens160     ethernet   接続済み   ens160
lo         loopback   管理無し   --

[root@test07 ~]# nmcli device show ens160 ← ネットワークインターフェイスを指定します。
GENERAL.デバイス:              ens160
GENERAL.タイプ:                ethernet
GENERAL.ハードウェアアドレス:  00:0C:29:AF:89:22
GENERAL.MTU:                   1500
GENERAL.状態:                  100 (接続済み)
GENERAL.接続:                  ens160
GENERAL.CON パス:              /org/freedesktop/NetworkManager/ActiveConnection/0
WIRED-PROPERTIES.キャリア:     オン
IP4.アドレス[1]:               192.168.1.10/24
IP4.ゲートウェイ:              192.168.1.1
IP4.DNS[1]:                    8.8.8.8
IP4.DNS[2]:                    192.168.1.1
IP6.ゲートウェイ:
IP6.DNS[1]:                    2404:1a8:7f01:b::3
IP6.DNS[2]:                    2404:1a8:7f01:a::3

 

 

更に詳しく接続状態を確認する場合は「nmcli device」ではなく「nmcli connection ~」コマンドを実行します。

[root@test07 ~]# nmcli connection show ens160
connection.id: ens160
connection.uuid: 5da93180-192d-4961-9211-8521be319a4b
connection.stable-id: --
connection.interface-name: ens160
connection.type: 802-3-ethernet
connection.autoconnect: yes
connection.autoconnect-priority: 0
connection.timestamp: 1503409855
connection.read-only: no
connection.permissions:
connection.zone: --
connection.master: --
connection.slave-type: --
connection.autoconnect-slaves: -1 (default)
connection.secondaries:
connection.gateway-ping-timeout: 0
connection.metered: 不明
connection.lldp: -1 (default)
802-3-ethernet.port: --
802-3-ethernet.speed: 0
802-3-ethernet.duplex: --
802-3-ethernet.auto-negotiate: yes
802-3-ethernet.mac-address: --
802-3-ethernet.cloned-mac-address: --
802-3-ethernet.generate-mac-address-mask:--
802-3-ethernet.mac-address-blacklist:
802-3-ethernet.mtu: 自動
802-3-ethernet.s390-subchannels:
802-3-ethernet.s390-nettype: --
802-3-ethernet.s390-options:
802-3-ethernet.wake-on-lan: 1 (default)
802-3-ethernet.wake-on-lan-password: --
ipv4.method: manual
ipv4.dns: 8.8.8.8,192.168.1.1
ipv4.dns-search:
ipv4.dns-options: (デフォルト)
ipv4.dns-priority: 0
ipv4.addresses: 192.168.1.10/24
ipv4.gateway: 192.168.1.1
ipv4.routes: { ip = 192.168.0.0/16, nh = 192.168.51.254 }
ipv4.route-metric: -1
ipv4.ignore-auto-routes: no
ipv4.ignore-auto-dns: no
ipv4.dhcp-client-id: --
ipv4.dhcp-timeout: 0
ipv4.dhcp-send-hostname: yes
ipv4.dhcp-hostname: --
ipv4.dhcp-fqdn: --
ipv4.never-default: no
ipv4.may-fail: yes
ipv4.dad-timeout: -1 (default)
ipv6.method: auto
ipv6.dns:
ipv6.dns-search:
ipv6.dns-options: (デフォルト)
ipv6.dns-priority: 0
ipv6.addresses:
ipv6.gateway: --
ipv6.routes:
ipv6.route-metric: -1
ipv6.ignore-auto-routes: no
ipv6.ignore-auto-dns: no
ipv6.never-default: no
ipv6.may-fail: yes
ipv6.ip6-privacy: 0 (無効)
ipv6.addr-gen-mode: stable-privacy
ipv6.dhcp-send-hostname: yes
ipv6.dhcp-hostname: --
ipv6.token: --
GENERAL.名前: ens160
GENERAL.UUID: 5da93180-192d-4961-9211-8521be319a4b
GENERAL.デバイス: ens160
GENERAL.状態: アクティベート済み
GENERAL.デフォルト: はい
GENERAL.デフォルト6: はい
GENERAL.VPN: いいえ
GENERAL.ゾーン: --
GENERAL.DBUS パス: /org/freedesktop/NetworkManager/ActiveConnection/0
GENERAL.CON パス: /org/freedesktop/NetworkManager/Settings/1
GENERAL.スペックオブジェクト: /
GENERAL.マスターパス: --
IP4.アドレス[1]: 192.168.1.10/24
IP4.ゲートウェイ: 192.168.1.1
IP4.DNS[1]: 8.8.8.8
IP4.DNS[2]: 192.168.1.1
IP6.ゲートウェイ:
IP6.DNS[1]: 2404:1a8:7f01:b::3
IP6.DNS[2]: 2404:1a8:7f01:a::3
DHCP6.オプション[1]: dhcp6_client_id = 0:4:69:63:b4:18:db:f0:e4:ee:f:50:6d:94:4d:19:85:88
DHCP6.オプション[2]: dhcp6_name_servers = 2404:1a8:7f01:b::3 2404:1a8:7f01:a::3
DHCP6.オプション[3]: requested_dhcp6_name_servers = 1
DHCP6.オプション[4]: requested_dhcp6_domain_search = 1
DHCP6.オプション[5]: requested_dhcp6_client_id = 1
DHCP6.オプション[6]: dhcp6_sntp_servers = 2404:1a8:1102::b 2404:1a8:1102::a
DHCP6.オプション[7]: dhcp6_domain_search = flets-east.jp. iptvf.jp.
DHCP6.オプション[8]: dhcp6_server_id = 0:3:0:1:0:19:e7:13:6c:1b
[root@test07 ~]#

 

 

ルートの設定を確認する(ルーティングテーブルを見る)

ルーティングテーブルは「route」コマンドでも確認できます。

[root@test07 ~]# route -n
Kernel IP routing table
Destination    Gateway         Genmask          Flags   Metric  Ref  Use Iface
0.0.0.0        192.168.1.1     0.0.0.0          UG      100     0    0   ens160
192.168.1.0    0.0.0.0         255.255.255.0    U       100     0    0   ens160

 

 

「ip route(ip r)」コマンドでもルーティングの設定を確認できます。

[root@test07 ~]# ip route
default via 192.168.1.1 dev ens160 proto static metric 100
192.168.1.0/24 dev ens160 proto kernel scope link src 192.168.1.10 metric 100

 

 

 

ip a コマンドを実行したら「down」だったので「up」にするコマンド

サーバーと通信できないため、コンソールからログインしてネットワークインターフェイスの状況を調べたら「down」していた場合です。

「nmcli connection up <デバイス名>」でインターフェイスを「up」することができます。

[root@test07 ~]# nmcli connection up ens160
接続が正常にアクティベートされました (D-Bus アクティブパス: /org/freedesktop/NetworkManager/ActiveConnection/5)
[root@test07 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    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
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    link/ether 00:0c:29:af:89:22 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.10/24 brd 192.168.1.255 scope global ens160
        valid_lft forever preferred_lft forever
    inet6 2408:210:8105:9500:268b:5f3a:6aac:c7b1/64 scope global noprefixroute dynamic
        valid_lft 2591956sec preferred_lft 604756sec
    inet6 fe80::80ec:1873:ccf:1eb5/64 scope link
        valid_lft forever preferred_lft forever
[root@test07 ~]#

 

 

 

 

nmtui コマンド

CentOS7 からは「nmtui」コマンドも使えるようになりました。

私はあまりお勧めしません。

確かに便利ですが、欠点としてはコマンドラインで再現できないというところです。

historyコマンドでも何をやったのかが出てきません。

手順書としては再現できますが、その場合は「IPアドレスに●●を入力する」→ 「OK」を選択するというような手順になります。

個人が自分専用の CentOS7 を管理する分にはいいかもしれませんが組織が大きくなると、誰が何をしたのかが見えにくくなります。

その結果、ヒューマンエラーが発生する確率が高くなります。

 

nmtuiコマンドの使い方

コンソールにログインし、「nmtui」コマンドを実行します。

CentOS7 nmtui コマンドの使い方

 

ネットワークを編集する場合は「Edit a connection」を選択します。

CentOS7 nmtui コマンドの使い方

 

 

編集したいインターフェイスを選択します。

※複数のネットワークインターフェイスを持っている場合は複数表示されます。

CentOS7 nmtui コマンドの使い方

 

下図のような感じでネットワークの設定をします。

CentOS7 nmtui コマンドの使い方

 

 

 

まとめ

nmcli コマンド 1つでネットワーク関連の設定はすべて可能です。

以前まで、ネットワークの設定はファイルを編集する方がいいと思っていましたが、CentOS7になり「nmcli」コマンドですべての設定が可能ということを知り、「nmcli」コマンドで設定する方が運用的にいいと思うようになりました。

 

Posted by 100%レンタルサーバーを使いこなすサイト管理人

コメントを残す

メールアドレスが公開されることはありません。