2020/07/20 CentOS7.2





nmcliでIPアドレスを設定する

CentOSでnmcliによるIPアドレスを設定するコマンドです。
ちょっと長く見えますが、慣れれば簡単…だと思います。

DHCPのNICを静的アドレスへ変更する
SSHからのIPアドレス変更
設定したIPアドレスの反映
デバイスの命名規則について
なぜデバイス名とコネクション名で分かれているのか?



DHCPのNICを静的アドレスへ変更する(初回)
# アドレスの確認
#ip addr

# 変更したい接続名を確認し、以降それを指定する
#nmcli connect show

# 静的アドレスへ変更
#nmcli con mod enp0s3 ipv4.method manual

# IPアドレスとサブネットを指定
#nmcli con mod enp0s3 ipv4.address "192.168.1.100/24"

# DNSを上書き
#nmcli con mod enp0s3 ipv4.dns "192.168.1.1 192.168.1.2"

# デフォルトゲートウェイの指定
#nmcli con mod enp0s3 ipv4.gateway "192.168.1.1"

# 自動接続を有効
#nmcli con mod enp0s3 connection.autoconnect yes

#反映
#nmcli con up enp0s3

すでに静的アドレスが設定済みのNICなら、以下だけで変更
#nmcli connect show
#nmcli con mod enp0s3 ipv4.address "192.168.1.100/24"
#nmcli con up enp0s3

1行にまとめることもできます。
#nmcli con mod enp0s3 ipv4.method manual ipv4.address "192.168.1.100/24" ipv4.dns "192.168.1.1 192.168.1.1" ipv4.gateway "192.168.1.1"

nmcliは「とりあえずconnectionだけ覚えておけばいい」
「nmcli con mod コネクション名」 「nmcli con up コネクション名」と覚えておけば、なんとかなる。
deviceからもアドレス変更ができるので、混乱しないよう一つにしぼった方がいいと思います。





SSHからのIPアドレス変更

SSHでリモートからIPアドレスを変更する必要に迫られることもあります。
その場合も
#nmcli connect show
#nmcli con mod enp0s3 ipv4.address "192.168.1.100/24"
#nmcli con up enp0s3

とすればIPアドレスが変更できるので、新アドレスで再接続すればいいだけです。

アドレス変更なら、nmcliを使うよりnmtuiを使用する方が楽です。
しかしSSH接続しているとき、nmtuiは注意が必要です。

nmtuiでIPアドレス変更後、反映のためdeactivate/activateしようとすると、deactivateの時点でネットワークが切れてしまい、それっきりになってしまいます。
つまりIPアドレスの設定はnmtuiで行い、活性化はnmcliでやる必要があります。

1.nmtuiでIPアドレス変更、保存
2.nmtui終了
3.コマンド「nmcli con up ens0s3」でアドレス有効

もしうっかりミスをする可能性があるのなら、アドレスをnmtuiではなくいつもnmcliでアドレス変更するクセをつけておけば、トラブルを回避できるのでは。



設定したIPアドレスの反映

設定したIPアドレスはコマンドで反映させます。以前ならif-down/if-upですが、nmcliになってコマンドが変わっています。

その1 NICをUPさせる(事前にダウンさせる必要はありません)
#nmcli con up enp0s3

その2 NICのデバイスを、切断/接続させる
#nmcli device disconnect enp0s3
#nmcli device connect enp0s3
一旦切断されるので、SSHなどではコマンドをセミコロンでつなげないといけません。


その3 サービスを再起動する
#systemctl retart network
昔ながらの方法ですが、必要がなければネットワーク全体を再起動しなくてもいいでしょう。


その4 コネクションをリロードする
#nmcli con reload
これはIPアドレスの反映ではなく、コネクションファイルの再読み込みにあたります。
リロードでは、IPアドレスやゲートウェイ設定情報が再読み込みされても、変更まではされません。
一方、ifcfg-XXX ファイルの中のDNS設定を直接編集しリロードすると、DNS設定は変更されます。
Redhat本家にも、コネクションのリロードが必要な場合が記載してありますが、登場の機会は少なそうです。




デバイスの命名規則について

NetworkManagerが導入されたとき、最初に苦しんだのはNICに与えられる名前でした。
意味が分かれば、少し見えてきます。

命名にはルールがあり、例えば
enp0s3なら、 en / p0 / s3 と分解できます。

命名ルールの早見表は、ネットのどこででも見つかります。

インターフェースタイプ
en
Ethernet
wl
無線LAN
ww
wwan。無線WANのこと。例えばLTE接続のモデムがこれにあたります
sl
SLIP。シリアル接続のモデムとか

タイプ名
o
オンボードのNIC
p
PCI接続のNIC。この後にバス番号がつく
s
PCI接続のNICの、スロット番号を示す数字がつく。enp0s3とか
u
USB接続を示す。PCI接続扱いなので、enp0s3uなどとなる

デバイス名の例
eno1
en(Ethernet) / o(オンボード) / 1(1番)
BIOSが、ハードウェア情報も接続位置を特定できている
ens1
en(Ethernet) / s(PCIスロット) / 1(1番)
BIOSが、ハードウェア情報も接続位置も特定できている
enp0s3 en(EtherNet) / p0(PCIバス0) / s3(スロット3)
BIOSから接続位置しか特定できない
eth0
BIOSからハードウェア情報も接続位置も特定できないので、デフォルト名を設定




なぜデバイス名とコネクション名で分かれているのか?

デバイスとコネクション名が二つあるとどちらででもIPアドレスが設定可能なので、nmcliで戸惑います。
別れている理由の一つは管理のしやすさです。

デバイスのens1という名前は物理的情報を示しますので、なんの用途で使用するかの管理がしづらいと言えます。
データセンターのような遠隔環境では、デバイス情報だけではそこになんのケーブルが接続されているかは不明です。また、複数のメーカーの違うサーバなら、同じセグメント向けでも別のNIC名になってしまうでしょう。

そこでコネクション名を使用し、「ens1」という物理デバイスは、「dmz-interface」として接続名管理する、というアイデアが考えられます。
これにより、例えば設定ファイルを画一化できたり、異なるハードウェアの間でも共通の管理ができます。
システムボード交換や物理NIC追加などでデバイス名が変化しても、コネクション名を引き継ぐことができれば管理ツールやスクリプトの変更はいりません。

Windowsでは、ずっと以前より「物理デバイス」と「接続名」を分けて管理してします。

「イーサネット」の部分が、コネクション名
「Realtek PCIe GBE〜」の部分が、物理的なデバイス名。
こう考えると容易にわかるのではないでしょうか。

Windowsコマンドから各種ネットワーク設定をする場合、物理デバイスではなく接続名を使用します。
また接続名の変更も右クリックから行えるので、容易です。







prev.gif