私のコンピュータには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
部分はリースを解放し、eth0
IPアドレスを解放します。
現在私が望むことをする唯一の方法はdhclient
forを実行しeth0
、残酷にシャットダウンして実行することですeth1
。結局、両方のインターフェイスで更新されたIPを取得します。
私も幸運をdhclient -x
置き換えてテストしましたdhclient -r
。
もちろん、これが唯一の方法ではありません!
編集する:
2つの答えはdhclient -r eth0 eth1 && dhclient eth0 eth1
これを行うことを示唆しています。これはこれらのインターフェースへのブロードキャスト呼び出しを制限します。ただし、応答する最初のDHCPサーバーのみが使用されるため、2つのインターフェイスではなく単一のインターフェイスで新しいIPが作成されます。ここではDHCPDISCOVER
、両方のインターフェイスで呼び出しが行われていますが、DHCPREQUEST
DHCPサーバーがある最初のインターフェイスでのみ呼び出しが行われていることがわかります。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 [-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ステートマシンのためだと思いますか?