私は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
他の接続より優先されるため、イーサネットインターフェイスはenp3s0
IP静的に設定されます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
これにより、インターフェイスはデフォルトのenp3s0
IPアドレスを持ちます。