Ubuntu'nun bir DHCP istemcisinden ana bilgisayar adını ve DNS adını almasını istiyorum . Varsayılan Ubuntu 11.10 (Oneiric Ocelot) kurulumu bunu yapmaz.
Ubuntu'nun bir DHCP istemcisinden ana bilgisayar adını ve DNS adını almasını istiyorum . Varsayılan Ubuntu 11.10 (Oneiric Ocelot) kurulumu bunu yapmaz.
Yanıtlar:
Açıklandığı gibi bir dhcp kanca için küçük komut dosyası ile bunu yapmanın bir yolu yoktur burada .
Yeni bir dosya oluşturun:
sudoedit /etc/dhcp/dhclient-exit-hooks.d/hostname
ve aşağıdaki kodu yapıştırın:
#!/bin/sh
# Filename: /etc/dhcp/dhclient-exit-hooks.d/hostname
# Purpose: Used by dhclient-script to set the hostname of the system
# to match the DNS information for the host as provided by
# DHCP.
#
# Do not update hostname for virtual machine IP assignments
if [ "$interface" != "eth0" ] && [ "$interface" != "wlan0" ]
then
return
fi
if [ "$reason" != BOUND ] && [ "$reason" != RENEW ] \
&& [ "$reason" != REBIND ] && [ "$reason" != REBOOT ]
then
return
fi
echo dhclient-exit-hooks.d/hostname: Dynamic IP address = $new_ip_address
hostname=$(host $new_ip_address | cut -d ' ' -f 5 | sed -r 's/((.*)[^\.])\.?/\1/g' )
echo $hostname > /etc/hostname
hostname $hostname
echo dhclient-exit-hooks.d/hostname: Dynamic Hostname = $hostname
Değiştir eth0
ve wlan0
sen host alabilmek istediğiniz arayüzleri adlarla. Çoğu durumda eth0
ve wlan0
aynı kalmalıdır.
Okunabilir olduğundan emin olun ...
chmod a+r /etc/dhcp/dhclient-exit-hooks.d/hostname
Bu kadar. Sonraki dhcp yanıtında ana makine adınız otomatik olarak güncellenir.
Sen edebilirsiniz DHCP sunucusundan hostnamenizi olsun - bu DHCP özelliğinin bir parçasıdır.
https://tools.ietf.org/html/rfc1533#section-3.14
"Bu seçenek istemcinin adını belirtir"
d_inevitable'ın cevabı neredeyse sorunumu çözdü, ama tamamen değil. Sorun şuydu:
DHCP sunucusu bir ana bilgisayar adı gönderiyor (
option host name 'client1'
dhcpd.conf'da) ve aslında DHCP teklifinin içeriğini wireshark ile yakalayıp analiz ederek doğruladım
DHCP istemcisi ana bilgisayar adını DHCP sunucusundan bekliyordu (ekleyerek
request host-name
dhclient.conf içinde)
İstemci oldu değil yeni sunucu adını (kolayca yazarak doğrulanması için
hostname
terminalde ve eski ana makine adını alıyorum veya içeriği / dosyayı silmiş olsaydım ana bilgisayar adı yok). Sonuç olarak, d_inevitable tarafından önerilen çözüm yalnızca boş bir dize kopyalamaktı.
Bunu çözmek için, benim yaptığım gibi çaresiz olmadıkça genellikle takip edilmemesi gereken bir kabartma çözümü uyguladım.
İlk olarak, DHCP istemci kontrol komut dosyasını düzenleme özelliğiyle açın:
sudo vi /sbin/dhclient-script
Orada, işlevi bulmanız gerekecek
set_hostname()
Sadece aramayı kullanın ve hemen gelmelidir. Şimdi, en azından bilgisayarımda, bu fonksiyonun birbiriyle kapsüllenmiş üç if-then-else koşulu var:
# set ana bilgisayar adı set_hostname () {local current_hostname
if [ -n "$new_host_name" ]; then current_hostname=$(hostname) # current host name is empty, '(none)' or 'localhost' or differs from new one from DHCP if [ -z "$current_hostname" ] || [ "$current_hostname" = '(none)' ] || [ "$current_hostname" = 'localhost' ] || [ "$current_hostname" = "$old_host_name" ]; then if [ "$new_host_name" != "$old_host_name" ]; then hostname "$new_host_name" fi fi fi }
Şimdi, ihtiyacınız olan şey, ne olursa olsun, yeni ana bilgisayar adının ana makinenize atanmasını sağlamaktır. Bu nedenle, iki kapsüllenmiş if-then-else yorumunu yapmak istersiniz. Sonuç şöyle görünmelidir:
# set ana bilgisayar adı set_hostname () {local current_hostname
if [ -n "$new_host_name" ]; then current_hostname=$(hostname) # current host name is empty, '(none)' or 'localhost' or differs from new one from DHCP #if [ -z "$current_hostname" ] || # [ "$current_hostname" = '(none)' ] || # [ "$current_hostname" = 'localhost' ] || # [ "$current_hostname" = "$old_host_name" ]; then # if [ "$new_host_name" != "$old_host_name" ]; then hostname "$new_host_name" # fi #fi fi }
Şimdi d_inevitable veya bu beklendiği gibi çalışmalıdır. Benim gibi umutsuz bir hayal kırıklığı yaşıyorsanız yardımcı olur umarım.
Oli'nin yanıtı, buradaki diğer yanıtların ve ayrıca bir RHEL7 sistemindeki son deneyimlerimin de gösterdiği gibi, yanlıştır ("Ana bilgisayar adınızı DHCP sunucusundan almazsınız"). Bahsedilen sistem ana bilgisayar adını DHCP sunucusundan aldı.
Ve aslında, DHCP yapılandırma dosyalarında gerçekleşmesi gereken şeyler vardır. Örneğin:
host host4 { # verified
hardware ethernet 41:88:22:11:33:22;
fixed-address 192.168.0.4;
option host-name "host4";
}
Bu sunucuya adının host olduğunu söylemesi gerekiyor4.
Anlaşıldığı üzere, isc'in dhclient'i DESTEKLEMEYİ GELMEZ!
Ancak, dhcpcd5 kutudan çıkar. DHCP istemcisini durdurun, dhcpcd5'i yükleyin, dhcpcd'yi çalıştırın, kira sözleşmenizi yenileyin ve pof'u seçin, DHCP istemcinizdeki ana bilgisayar adınız DHCP sunucusundan gönderilen ada ayarlanır. Hiçbir dhclient-exit-hooks.d
kodlama, hiçbir gardiyanlar rc.local
, hiçbir şey.
Bir son not olarak, bunu ISC'nin dhclient'ini kullanmaya çalışmak için çok zaman harcadım. Sunucu ana bilgisayar adını gönderdiğinde bile kesinlikle sevinç yok.
Soruna ilk çözümüm rc.local
, ağın ne zaman geldiğini tespit etmek için bazı sevimli kodlar yazmak /etc/hosts
ve ana bilgisayar adını almak için (benim durumumda) bir aramayı zorlamak ve daha sonra hostname
bu ana bilgisayar adıyla çalışmaktı. Çalışıyor, ancak ağ ortaya çıkana kadar ana bilgisayar adınız büyük olasılıkla yanlıştır (bir ana bilgisayarı ilk dağıtırken kaldırırım /etc/hostname
, bu yüzden ana bilgisayar adı ağ geldiğinde localhost
çalışana /etc/init.d/hostname.sh start
kadar olur - bu yüzden yeni bir ad aldığınızda önyükleme yapmanız gerekir iki kez - bir kez ana bilgisayar adınızı almak ve bir kez de bu adın her şey başladığında kullanılabilir olması ...).
Ana bilgisayar adınızı DHCP sunucusundan alamazsınız.
Ana bilgisayar adınızı sunucuya gönderebilirsiniz , bu da atanmış olduğunuz IP'yi değiştirebilir. Ağ Yöneticisi bağlantınızı düzenleyerek (alana DHCP İstemci Kimliği adı verilir) ya da düzenleyerek (kök olarak) gönderilecek adı değiştirebilirsiniz /etc/dhcp/dhclient.conf
. Şu satırı arayın:
send host-name "<hostname>";
... ve <hostname>
ne istersen değiştir .
Varsayılan olarak Ubuntu, DNS ayarlarını yönlendiriciden alacaktır (gönderirse), ancak diğer bilgisayarlara ana bilgisayar adlarıyla erişebileceğiniz yerel DNS / mDNS hakkında konuştuğunuzdan şüpheleniyorum . Buna Ubuntu'da Ahavi veya Zeroconf denir ve varsayılan olarak yüklenir.
Bilgisayarınıza şu şekilde erişebilmeniz gerekir: <hostname>.local
hostname
ve etki alanını yazarak görebilmeliyim hostname -d
. bu yüzden fqdn hostname.domain olmalı
send host-name "example.com";
belirli bir IP adresi elde etmek için, sadece de olabilir istemek ile bir request host-name;
.
Bulunursa dhcpclient komut dosyası hatası olabilir. http://blog.schlomo.schapiro.org/2013/11/setting-hostname-from-dhcp-in-debian.html
IP yenilemede $ old_host_name dosyasını temizlemeye çalışın
echo unset old_host_name> /etc/dhcp/dhclient-enter-hooks.d/unset_old_hostname
Ayrıca statik / etc / hostname, dhcp cevabı üzerinde bir öneme sahip görünüyor, bu yüzden boş bırakın
> / etc / hostname
Ubuntu 14.04 ve dnsmasq sunucusunda test edilmiştir.
Ubuntu 18.04 kullanırken bağlantı komut dosyalarının artık gerekli olmadığını unutmayın. Yüklemek ana makine adı olarak ayarlanırsa localhost
içinde /etc/hostname
DHCP istemcisi eğer varsa, DHCP tarafından verilen adını kullanarak açılışta otomatik olarak hostname ayarlayacaktır. Çalıştırırken hostnamectl
o listeler localhost
kalıcı hostname olarak ve geçici ana makine olarak her ne DHCP konular.
testaccount@dhcp-hostname:~$ hostnamectl
Static hostname: localhost
Transient hostname: dhcp-hostname
Yanıt, DHCP sunucunuzda statik kiralama kullanıp kullanmadığınıza bağlıdır. Eğer öyleyse, ana bilgisayar adını DNS'den almak gereksizdir. Bu satırı d_inevitable'ın çözümünde değiştirebilirsiniz
hostname=$(host $new_ip_address | cut -d ' ' -f 5)
için
hostname=${new_host_name}
Ancak, ana makine adınız başlangıçta localhost.localdomain olarak ayarlanmışsa, otomatik olarak gerçekleşmelidir, bu nedenle bir komut dosyası yazmanıza gerek yoktur. Ancak, ana bilgisayar adını FQDN olarak ayarlamak istiyorsanız, d_inevitable'ın komut dosyasını şu şekilde değiştirmeniz gerekir:
hostname=${new_host_name}.${new_domain_name}
Yine, tüm bunlar sadece statik kiralar kullanıyorsanız işe yarar.
Yorum yapmak için yeterli üne sahip değilim, ama bir dhclient kanca kullanarak benim için neredeyse sorunu çözdüğü için önceki cevaba piggy-back yapmak istiyorum.
Bir nedenden dolayı standart ISC DHCP Sunucusu'nu kullanarak, yukarıda belirtilen kanca bir '.' herhangi bir nedenle ana bilgisayar adının sonundaki nokta karakteri.
Yani, önceki cevapta yabancı dönemi bir sed ile "kesmeniz" gerekebilir:
hostname=$(host $new_ip_address | cut -d ' ' -f 5)
Olacaktı:
hostname=$(host $new_ip_address | cut -d ' ' -f 5 | sed -e "s/\.$//g")
host
, atanan IP adresiyle ilişkili ana bilgisayar adını ayıklamak için aslında bir DNS sorgusu ( komutu kullanarak ) kullanır. DHCP sunucuları, IP üzerindeki bir DNS sorgusundan elde ettiğiniz ana bilgisayar adından potansiyel olarak farklı olabilecek bir ana bilgisayar adı seçeneğini (seçenek 12) açıkça ayarlayabilir (DNS'de IP için PTR kaydı yoksa bu da başarısız olabilir) )