1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

nmcliでのdeviceとconnectionの紐付け

Posted at

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と紐づけることができる

image.png

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がよくわからないまま使ってた・・・

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?