DHCP IP 주소를 "예측"하는 방법은 무엇입니까?

DHCP IP 주소를 "예측"하는 방법은 무엇입니까?

내 스크립트에서 가상 머신을 시작하기 전에 어떤 IP 주소를 받게 될지 파악해야 합니다.

그래서 나는 이렇게 했습니다:

dhclient <interface>

dhclient이는 지정된 인터페이스의 MAC 주소가 사용되고 macvtapDHCP 서버에서 IP 주소가 반환되기 때문에 작동합니다 .

동일한 MAC에 대해 항상 동일한 IP를 반환하지 않는 라우터가 집에 있는 일부 사람들이 있을 수 있으므로 이는 완벽한 솔루션은 아닙니다. 하지만 그건 제가 소유한 모든 라우터에 해당됩니다. 따라서 99%의 시간 동안 작동한다면 그것으로 충분합니다.

하지만 문제는 dhclient호스트 시스템에서 해당 주소를 실제로 사용하고 싶다고 생각하기 때문에 로컬 구성도 변경한다는 것입니다. 이를 방지하는 플래그가 있지만 -n데비안이나 대부분의 다른 배포판에서는 지원되지 않습니다.

그렇다면 실제로 호스트의 설정을 수정하지 않고 특정 MAC 주소를 제공할 IP를 DHCP 서버에 물어보는 가장 좋은 방법은 무엇일까요?

답변1

dhcp로컬 구성을 직접 변경하지 않고 임대를 획득한 후 스크립트를 호출합니다( /sbin/dhclient-scriptDebian에서는 기본값).

자신만의 스크립트를 지정 -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 주소를 물어본 다음 해당 주소에 의존하여 앞으로 나아갈 수는 없습니다. 최소한 서버가 사용자에게 제공한 주소를 "기억"하도록 구성 데이터베이스를 업데이트할 수 없다면 말입니다.

주소를 발급한 경우 사실을 기록해야 하며, 주소를 발급하지 않았으며 다른 장치에서 주소를 요청할 수 있습니다.

관련 정보