Ubuntu

如何從 Ubuntu 上的 DHCP 伺服器請求主機名?

  • May 29, 2014

我有一個 Ubuntu 11.04 伺服器虛擬機。我想從辦公室的 DHCP 伺服器請求一個特定的主機名。由於我不經常執行它,因此幾乎每次啟動它時 IP 都會發生變化。顯然,通過主機名引用它是首選選項。

我知道我的 DHCP 伺服器尊重 DHCP 客戶端主機名請求。在我的 windows 7 機器上,我可以重命名電腦、重新啟動、查詢 DHCP 伺服器,然後在 ANSWER SECTION 中查看新名稱。我使用的查詢命令是:

dig @192.168.225.5 -x 192.168.235.XXX

並且每次它都會以新的電腦主機名進行響應。我現在也可以使用該新主機名從其他機器 ping 和 ssh。

我在 Ubuntu VM 上沒有這樣的運氣。我修改了 /etc/dhcp/dhclient.conf 以包含一行:

send host-name "MYRQUESTEDHOSTNAME";

然後執行

sudo /etc/init.d/networking restart

但是使用虛擬機的 IP 地址通過 dig 查詢不會產生 ANSWER SECTION。

我錯過了什麼?

我找到了適用於我的網路的解決方案,但您的里程可能會有所不同。我不確定為什麼它不會自動發生。無論如何,這是一個簡單的 shell 腳本,它應該使用正確的 IP 在正確的網路介面上更新正確的名稱伺服器(也適用於 VPN 連接)並且應該在 OSX/BSD 和 Linux 上執行。

#!/bin/bash

# the host information to send
DOMAIN=$(awk '/^search/ {print $2}' /etc/resolv.conf | head -1)
HOST=$(hostname -s)

# nameserver to update
NAMESERVER=$(awk '/nameserver/ {print $2}' /etc/resolv.conf | head -1)

# linux version to find interace that routes to nameserver 
if [[ -e /sbin/ip ]]; then
   INTERFACE=$(ip -o route get ${NAMESERVER} | awk '{print $5}')
else # osx / bsd version
   INTERFACE=$(route get ${NAMESERVER} | awk '/interface/ {print $2}')
fi

# ip of the interface
IP=$(ifconfig ${INTERFACE} | perl -ne 'print "$1" if /inet.*?(\d+\.\d+\.\d+\.\d+)/')


nsupdate -d <(

echo server ${NAMESERVER} 53
echo update add ${HOST}.${DOMAIN} 86400 A ${IP}
echo show
echo send

)

您需要檢查主機名是否實際發送。如果是,則問題在於 dhcp 伺服器未更新 DNS 記錄。

send 指定要發送到 DHCP 伺服器的選項。您假設這send host-name "foo.bar"意味著將 foo.bar 作為主機名發送。然而,這意味著將主機名和字元串“foo.bar”發送到 dhcp 伺服器。你需要兩行: option host-name “foo.bar”; 發送主機名;

引用自:https://unix.stackexchange.com/questions/13117