Ubuntu
如何從 Ubuntu 上的 DHCP 伺服器請求主機名?
我有一個 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”; 發送主機名;