deviceとconnection
nmcliでdeviceとconnectionの紐付けがよくわからなかったので調べたメモ。
ネットでは「deviceは物理インターフェースでconnectionは論理的な設定」的な記述があるが、connectionをup/downしたとき、deviceとどう関係しているかよくわからなかった。
nmcli connection up [connection名]
コマンドはdevice名指定していないのに、なんで特定のdeviceと紐づくの?と不思議だった。
例えば、deviceとconnectionが紐づいていない状態を無理やり作ってみる。
以下ではdeviceeth2,eth3
と、connectionSystem eth2, System eth3
はそれぞれ切り離され、deviceとconnectionは紐づいていない。
deviceのeth2,eth3のCONNECTIONが設定されていない状態
[root@wb01 ~]# nmcli device status
DEVICE TYPE STATE CONNECTION
eth0 ethernet connected System eth0
eth1 ethernet connected System eth1
lo loopback connected (externally) lo
eth2 ethernet disconnected --
eth3 ethernet disconnected --
connectionもSystem eth2, System eth3のDEVICEが設定されていない
[root@wb01 ~]# nmcli connection show
NAME UUID TYPE DEVICE
System eth0 5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03 ethernet eth0
System eth1 9c92fad9-6ecb-3e6c-eb4d-8a47c6f50c04 ethernet eth1
lo 8f170e18-c5f8-4484-a147-1a58d2fe2d2f loopback lo
System eth2 3a73717e-65ab-93e8-b518-24f5af32dc0d ethernet --
System eth3 c5ca8081-6db2-4602-4b46-d771f4330a6d ethernet --
このとき、connection up
すると、device指定していないのになんで特定のdevice(今回はeth2)に紐づくのか?どうしてeth3に紐づかないのか謎だった。
System eth2
のconnectionをupすると・・・
[root@wb01 ~]# nmcli connection up System\ eth2
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/9)
### eth2のdeviceにSystem eth2が紐づいている
[root@wb01 ~]# nmcli device status
DEVICE TYPE STATE CONNECTION
eth0 ethernet connected System eth0
eth1 ethernet connected System eth1
eth2 ethernet connected System eth2
lo loopback connected (externally) lo
eth3 ethernet disconnected --
なんでeth3でなくeth2のdeviceに勝手に紐づくのか、とモヤモヤしていたが・・
connectionの中に接続するdeviceが書いているだけだった
なんのことはない、単にconnectionの設定情報に接続するdevice情報が書かれていて、それに従ってconnection up
すると設定情報の内容に従ってdeviceに紐づいているだけだった。
connectionSystem eth2
の設定情報
[root@wb01 ~]# nmcli connection show System\ eth2
connection.id: System eth2
connection.uuid: 3a73717e-65ab-93e8-b518-24f5af32dc0d
connection.stable-id: --
connection.type: 802-3-ethernet
⭐どのdeviceと紐づくか書いてた!
connection.interface-name: eth2
connection.autoconnect: yes
...
で、この単純な事実からわかったこと。
- 論理的な接続情報であるconnectionを複数作成し、deviceと紐づを切り替えることでインタフェースの設定情報を変更できる
- connectionの接続先を変えれば、connectionは変更先のdeviceと紐づけることができる
nmcli connection up/down コネクション名
でdeviceと紐づいたり解除されるのは、connectionがdevice情報を持っているので、そりゃーそうだわ・・と納得。
そうすると、以下のようなケースにも対応できそう。
eth0のインターフェース情報を変える場合、元のconnectionをcloneして、cloneしたconnectionとeth0を紐づける
元のconnection情報はそのままに、コピー(clone)したconnectionを書き換えてdeviceと紐づけことで、eth0の情報を変更できる。失敗したら元のconnection情報に戻せばいい。
試しにeth2インタフェースの設定を変更したい場合、nmcli connection modify System\ eth2 ...
のやり方もあるが、cloneしたconnectionのほうをいじるやり方はこんな感じ。
### System eth2コネクションをクローン
[root@wb01 ~]# nmcli connection clone System\ eth2 clone_eth2
System eth2 (3a73717e-65ab-93e8-b518-24f5af32dc0d) cloned as clone_eth2 (ea971115-5c78-4c57-ab93-f9493fc20fd7).
### clone_eth2のクローンされたconnectionができた
[root@wb01 ~]# nmcli connection show
NAME UUID TYPE DEVICE
System eth0 5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03 ethernet eth0
System eth1 9c92fad9-6ecb-3e6c-eb4d-8a47c6f50c04 ethernet eth1
System eth2 3a73717e-65ab-93e8-b518-24f5af32dc0d ethernet eth2
lo 0bbc47d5-9614-4588-857b-84f53cab8f5b loopback lo
clone_eth2 ea971115-5c78-4c57-ab93-f9493fc20fd7 ethernet --
System eth3 c5ca8081-6db2-4602-4b46-d771f4330a6d ethernet --
あとはクローンしたclone_eth2
のconnectionを修正する。
### 設定は一例
nmcli connection modify clone_eth2 autoconnect yes
nmcli connection modify clone_eth2 ipv4.method auto
・・・(修正したい分、好きなだけ)
変更したら、eth2
のインタフェース(device)と修正後のclone_eth2
を紐づける
### eth2デバイスはSystem eth2のコネクションと紐づいている
[root@wb01 ~]# nmcli connection show
NAME UUID TYPE DEVICE
...
System eth2 3a73717e-65ab-93e8-b518-24f5af32dc0d ethernet eth2
...(省略)
### なので、紐付けを外して・・
[root@wb01 ~]# nmcli connection down System\ eth2
### 今度はclone_eth2と紐づける
[root@wb01 ~]# nmcli connection up clone_eth2
### 新たなコネクション情報と紐づいた
[root@wb01 ~]# nmcli connection show
NAME UUID TYPE DEVICE
...
clone_eth2 ea971115-5c78-4c57-ab93-f9493fc20fd7 ethernet eth2
...(省略)
このやり方だと元のconnection情報がバックアップとしてあるので、勇猛果敢に設定変更して、万が一失敗しても元のconnectionに戻すことができる。(インタフェース全滅してアクセス不可とならない前提で)
いままでnmcliがよくわからないまま使ってた・・・