私のスクリプトで仮想マシンを起動する前に、どのIPアドレスを受け取るのかを知る必要があります。
だから私はこれをしました:
dhclient <interface>
dhclient
これは、指定されたインターフェイスのMACアドレスが使用され、macvtap
DHCPサーバーからIPアドレスが返されるために機能します。
同じMACに対して常に同じIPを返さないルーターが自宅にいる人がいる可能性があるため、これは完璧なソリューションではありません。しかし、それは私が所有しているすべてのルーターに当てはまります。したがって、99%の時間で動作する場合はそれで十分です。
しかし、問題は、dhclient
ホストシステムでそのアドレスを実際に使用したいと思うので、ローカル設定も変更することです。これを防ぐフラグがありますが、-n
Debian や他のほとんどのディストリビューションではサポートされません。
それでは、実際にホストの設定を変更せずに特定のMACアドレスを提供するIPをDHCPサーバーに尋ねる最善の方法は何ですか?
答え1
dhcp
ローカル設定を直接変更せずにリースを取得し、スクリプトを呼び出します(/sbin/dhclient-script
Debianではデフォルト)。
独自のスクリプトを指定-sf
し、$new_ip_address
リースされたIPを見つけるために使用できます。一つある専用マンページこのタイプのスクリプトについてです。
dhcp
リースを受け取ると実行が継続されるため、停止する必要があります。デフォルトではpidはに保存されますが、を/var/run/dhclient.pid
使用して変更できます-pf
。
サンプルスクリプト:
#!/bin/sh
case $reason in
BOUND|RENEW|REBIND|REBOOT)
echo "MY IP IS " $new_ip_address
kill $(cat /var/run/dhclient.pid)
;;
*)
;;
esac
その後、実行すると:
dhclient -sf /path/to/your_script -d interface 2>&1 | grep "MY IP"
価値を得るでしょう。
この場合、結果が異なる可能性があるため、他のDHCPクライアントプロセス(dhclient
、、...)との対話を避けてください。NetworkManager
答え2
DHCPサーバーに発行するIPアドレスを尋ねてから、そのアドレスに依存して前進することはできません。少なくとも、サーバーがユーザーに提供したアドレスを「記憶」するように構成データベースを更新できない場合。
住所を発行した場合は、事実を記録する必要があり、住所を発行せず、他のデバイスから住所を要求できます。