同じイーサネットインターフェイスの複数のNetworkManager接続プロファイルが常に正常に動作するわけではありません。

同じイーサネットインターフェイスの複数のNetworkManager接続プロファイルが常に正常に動作するわけではありません。

私はLinuxディストリビューションで3つのNetworkManager接続プロファイルを使用しており、すべて同じイーサネットインターフェイスを参照していますenp3s0。私は以下を管理するためにこれらの接続を使用しています。

  • デフォルトの固定IP構成
  • 新しい固定IP構成設定
  • DHCP アドレス要求

残りの質問では、この用語を使用します。つながる言葉を意味する接続プロファイル

イーサネット構成を変更するには接続の優先順位を変更するため、デフォルトの静的IP構成を有効にするには、静的IP構成とDHCP構成よりも優先順位を高く設定します。
この段落を読んでください「3つの接続のプロパティ設定」続く質問で、接続優先順位の設定に関する詳細を確認してください。

質問

systemdサービスの起動時にbashスクリプトを介して接続を作成するとすべてがうまく機能しますが、起動が完了した後にbashスクリプトを実行すると、NetworkManagerとその接続プロファイルがIP設定を正しく管理できなくなります。この段落に移動「質問」質問の最後で、エラーの詳細な説明を確認してください。

質問の残りの部分は、問題を理解するために必要なすべての詳細を提供します。
質問が長くなってすみません。多くの情報が必要です。


3つのNetworkManager接続プロファイルの作成

nmcli接続を作成するには、次のコマンドを使用します。

# for default static
nmcli c add ifname enp3s0 type ethernet con-name ethernet_default_ipstatic
# for ethernet_ipstatic
nmcli c add ifname enp3s0 type ethernet con-name ethernet_ipstatic
# for ethernet_dhcp
nmcli c add ifname enp3s0 type ethernet con-name ethernet_dhcp

パスで前のコマンドを実行すると、/etc/NetworkManager/system-connections次の3つのファイルが表示されます。

  • ethernet_default_ipstatic.nmconnection
  • ethernet_ipstatic.nmconnection
  • ethernet_dhcp.nmconnection

3つの接続のプロパティ設定

前のコマンドはデフォルト属性を使用して3つの接続を作成したため、接続を作成した後にその属性を設定する必要があります。この目的のために、私はまだnmcli以下のコマンドを使用します。

ethernet_default_ipstatic接続に次のプロパティを設定します。

nmcli con mod ethernet_default_ipstatic ipv4.method manual ipv4.addresses 192.168.1.1/24 ipv6.method disabled

前のコマンドは、接続に対して次の属性を設定します。

  • ipv4.method = manual(DHCPの代わりに静的IPを設定)
  • IPアドレス192.168.1.1、ネットマスク255.255.255.0(ゲートウェイなし)
  • IPv6が無効
  • 自動接続プロパティはデフォルト値yesのままです。
  • 優先順位属性はまだデフォルト値0

ethernet_ipstatic属性の場合、次のようになります。

nmcli con mod ethernet_ipstatic ipv4.method manual ipv4.addresses 192.168.1.1/24 ipv4.gateway 192.168.1.100 ipv4.may-fail no ipv6.method disabled connection.autoconnect no connection.autoconnect-priority -1

前のコマンドは、接続に対して次の属性を設定します。

  • ipv4.method = manual(DHCPの代わりに静的IPを設定)
  • IPアドレス192.168.1.1、ネットマスク255.255.255.0、ゲートウェイ192.168.1.100
  • IPV6 無効、自動接続なし、優先順位-1

ethernet_dhcp属性の場合、次のようになります。

nmcli con mod ethernet_dhcp ipv4.method auto ipv4.addresses '' ipv4.gateway '' ipv4.may-fail no ipv4.dhcp-timeout 20 ipv6.method disabled connection.autoconnect no connection.autoconnect-priority -1 connection.autoconnect-retries 3

前のコマンドは、接続に対して次の属性を設定します。

  • ipv4.method = auto(固定IPアドレスの代わりにDHCP設定)
  • IPアドレス「「ゲートウェイ」」
  • IPV6 無効、自動接続なし、優先順位-1

基本割り当て

前のコマンドを使用すると、接続がethernet_default_ipstatic他の接続より優先されるため、イーサネットインターフェイスはenp3s0IP静的に設定されます192.168.1.1/24

nmcliサービス別にコマンドを実行する

nmcli次のサービス()を介して起動時に前のコマンドを実行すると、すべてがうまく機能しますmy_custom_nm_service.service

[Unit]
Description=Init NetworkManager Ethernet Connections
Requires=NetworkManager.service
After=NetworkManager.service
Before=network.target

[Service]
Type=oneshot
ExecStart=/home/<username>/script_services/init_connections.sh
User=<username>

[Install]
WantedBy=multi-user.target

init_connections.sh前のコマンドを実行しますnmcli

メモ。ユニットファイルにオプションがあることを確認してください。

  • リクエスト=NetworkManager.service
  • 以降=NetworkManager.service
  • 前=network.target

質問

起動が完了した後、コマンドを介してすべての接続を削除してスクリプトをnmcli con del実行すると、init_connections.shシステムに対して予測不能なIP設定が表示されます。
発生する一般的な構成エラーは次のとおりです。

  • アクティブ接続(nmcli conコマンドとして表示)ethernet_default_ipstaticなので、システムに静的IPアドレスが必要です。192.168.1.1/24
  • しかし、システムはDHCPサーバーを介してIPアドレスを取得しました。

init_connections.shサービスがスクリプトを実行すると、以下が実行されます。network.targetより前しかし、正直なところ、この違いが問題を理解するのに重要かどうかはわかりません。

答え1

nmcli con up問題を発見しました。デフォルト設定を正しく設定するには、次のコマンドを実行する必要があります。

nmcli con up "ethernet_default_ipstatic" iface enp3s0

また示していますこの投稿

メモ。現時点では、init_connections.shサービスの起動時にスクリプトの実行が正しく機能する理由を理解することは重要ではありませんmy_custom_nm_service.service。私が本当に興味を持っているのは、起動プロセスの終わりにスクリプトを実行することです。


完全性のためにテストステップを作成しました。

1) サービスの削除

my_custom_nm_service.serviceスクリプトの実行を開始するサービスを無効にしました。init_connections.sh

2) すべての接続を削除

起動が完了したら、次のスクリプト(delete_connections.sh)を介してすべての接続を削除しました。

nmcli c del ethernet_default_ipstatic
nmcli c del ethernet_ipstatic
nmcli c del ethernet_dhcp

3) 3 つの接続の作成: 失敗が発生しました。

スクリプトを実行しますinit_connections.sh

nmcli con add ifname enp3s0 type ethernet con-name ethernet_default_ipstatic
nmcli con mod ethernet_default_ipstatic ipv4.method manual ipv4.addresses 192.168.1.1/24 ipv6.method disabled
nmcli con add ifname enp3s0 type ethernet con-name ethernet_ipstatic
nmcli con mod ethernet_ipstatic ipv4.method manual ipv4.addresses 192.168.1.1/24 ipv4.gateway 192.168.1.100 ipv4.may-fail no ipv6.method disabled connection.autoconnect no connection.autoconnect-priority -1
nmcli con add ifname enp3s0 type ethernet con-name ethernet_dhcp
nmcli con mod ethernet_dhcp ipv4.method auto ipv4.addresses '' ipv4.gateway '' ipv4.may-fail no ipv4.dhcp-timeout 20 ipv6.method disabled connection.autoconnect no connection.autoconnect-priority -1 connection.autoconnect-retries 3

スクリプトを実行した後、私のLinuxシステムで質問に記載されている問題が発生しました。

  • nmcli conコマンドはアクティブな接続が何であるかを示しますethernet_default_ipstatic(優先順位が高いため)。
  • IP アドレスは DHCP サーバーによって割り当てられました。

4) 解決: 実行nmcli con up

解決策は、次のコマンドを実行することです。

nmcli con up "ethernet_default_ipstatic" iface enp3s0

これにより、インターフェイスはデフォルトのenp3s0IPアドレスを持ちます。

関連情報