他のインターフェイスでdhclientを使用してIPを更新する

他のインターフェイスでdhclientを使用してIPを更新する

私のコンピュータには2つのインターフェイスがeth0ありますeth1

両方のサブネットにDHCPサーバーがあります。dhclient両方のインターフェイスのIPアドレスをどのように更新しますか?

私がするなら:

dhclient -r && dhclient eth0

でIPを更新しましたeth0。もしそうなら、私がこれをしたいなら:

dhclient eth1

エラーにより失敗します。

dhclient(22421) is already running - exiting.

私はできます:

dhclient -r && dhclient eth1

しかし、そのdhclient -r部分はリースを解放し、eth0IPアドレスを解放します。

現在私が望むことをする唯一の方法はdhclientforを実行しeth0、残酷にシャットダウンして実行することですeth1。結局、両方のインターフェイスで更新されたIPを取得します。

私も幸運をdhclient -x置き換えてテストしましたdhclient -r

もちろん、これが唯一の方法ではありません!

編集する:

2つの答えはdhclient -r eth0 eth1 && dhclient eth0 eth1 これを行うことを示唆しています。これはこれらのインターフェースへのブロードキャスト呼び出しを制限します。ただし、応答する最初のDHCPサーバーのみが使用されるため、2つのインターフェイスではなく単一のインターフェイスで新しいIPが作成されます。ここではDHCPDISCOVER、両方のインターフェイスで呼び出しが行われていますが、DHCPREQUESTDHCPサーバーがある最初のインターフェイスでのみ呼び出しが行われていることがわかります。eth0

Listening on LPF/eth0/0a:00:27:00:00:00
Sending on   LPF/eth0/0a:00:27:00:00:00
Listening on LPF/eth1/84:8f:69:d3:d4:a1
Sending on   LPF/eth1/84:8f:69:d3:d4:a1
Sending on   Socket/fallback
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 5 (xid=0x170fcb67)
DHCPDISCOVER on eth1 to 255.255.255.255 port 67 interval 4 (xid=0x115a24c3)
DHCPREQUEST on eth0 to 255.255.255.255 port 67 (xid=0x170fcb67)
DHCPOFFER from 192.168.1.1
DHCPACK from 192.168.1.1 (xid=0x170fcb67)
bound to 192.168.1.4 -- renewal in 1710 seconds.

答え1

誰でも

dhclient -r && dhclient

または

dhclient -r eth0 eth1 && dhclient eth0 eth1

編集1:

次の試行:インスタンスの1つに別のファイルを使用させることで、「dhclient(22421)がすでに実行中 - シャットダウン中」エラーを削除できます。PATH_DHCLIENT_PIDおよびPATH_DHCLIENT_DB変数(または同等のコマンドラインオプション、マニュアルページを参照)を使用して区切ります。

答え2

アイデア#1:dhclientに2つのインターフェースを渡す

マニュアルページを見ると、dhclient例の最後にビットが使用されていることがわかります[ if0 [ ...ifN ]。つまり、dhclient実行したいだけ多くのインターフェイスを実行して渡すことができます。

から抜粋dhclient のマニュアルページ

dhclient [-4 | ] -6] [ -S ] [ -N [ -N... ] ] [ -T [ -T... ] ] [ -P [ -P... ] ] [ -p ポート ] [ -d ] [-e VAR = value] [-q] [-1] [-r | -x] [ -lf リースファイル] [ -pf pid ファイル] [ -cf 構成ファイル] [ -sf スクリプトファイル ] [ -s サーバー ] [ -g リレー ] [ -n ] [ -nc ] [ -nw] [ -w ] [ -B ] [ -I dhcp クライアント識別子] [ -H ホスト名] [ -F fqdn.fqdn ] [ -V ベンダークラス識別子] [ -R 要求オプション一覧] [ -timeout タイムアウト] [ - v ] [ --version ] [ if0 [ ...ifN ] ]

dhclientしたがって、複数のインターフェイスに公開して接続できる必要があります。

dhclient -r eth0 eth1
dhclient eth0 eth1

アイデア#2:NetworkManagerがどのように機能するかをご覧ください。

dhclient私のシステムにNetworkManagerを設定する方法は次のとおりです。パラメータを使用して明示的に2番目のdhclientを呼び出すことができます。

/sbin/dhclient -d -4 \
   -sf /usr/libexec/nm-dhcp-client.action \
   -pf /var/run/dhclient-wlan0.pid \
   -lf /var/lib/dhclient/dhclient-01f0476d-04bf-4ce7-8ced-844fae73f430-wlan0.lease \
   -cf /var/run/nm-dhclient-wlan0.conf wlan0

答え3

解決策が見つかりました。明示的なdhclient-confを作成する必要がありました。

それでは、次のように呼び出してください。

dhclient -cf /etc/dhcp/dhclient.conf -v vmbr1 --no-pid

dhclient -cf /etc/dhcp/dhclient-vmbr3.conf -v vmbr3 --no-pid

標準段落にコメントできます。新しいインターフェイスを追加する場合、ここで明示的に指定しないと dhcp 要求は発生しません。

:/etc/dhcp# cat dhclient.conf

interface "vmbr1" {
send host-name = gethostname();
select-timeout 3;
request subnet-mask, broadcast-address, time-offset, routers,
        domain-name, domain-name-servers, domain-search, host-name,
        dhcp6.name-servers, dhcp6.domain-search, dhcp6.fqdn, dhcp6.sntp-servers,
        netbios-name-servers, netbios-scope, interface-mtu,
        rfc3442-classless-static-routes, ntp-servers;
}

#send host-name = gethostname();
#request subnet-mask, broadcast-address, time-offset, routers,
      #  domain-name, domain-name-servers, domain-search, host-name,
      #  dhcp6.name-servers, dhcp6.domain-search, dhcp6.fqdn, dhcp6.sntp-servers,
     #   netbios-name-servers, netbios-scope, interface-mtu,
      #  rfc3442-classless-static-routes, ntp-servers;

:/etc/dhcp# cat dhclient-vmbr3.conf

option rfc3442-classless-static-routes code 121 = array of unsigned integer 8;

interface "vmbr3" {
send host-name = gethostname();
request subnet-mask, broadcast-address, time-offset, routers,
        domain-name, domain-name-servers, domain-search, host-name,
        dhcp6.name-servers, dhcp6.domain-search, dhcp6.fqdn, dhcp6.sntp-servers,
        netbios-name-servers, netbios-scope, interface-mtu,
        rfc3442-classless-static-routes, ntp-servers;
}

これは、1つのdhclientが両方のインターフェースを提供できないようにするdhcpステートマシンのためだと思いますか?

関連情報