Tutoriel Linux

Een Linux-server hernoemen met hostnamectl zonder DNS-problemen te veroorzaken

Débutant5 min de lecture

Het hernoemen van een Linux-server gaat niet alleen over het wijzigen van de tekst die in de SSH-prompt wordt weergegeven. De naam kan ook worden gebruikt in /etc/hostsDNS, certificaten, monitoring, back-ups of inventarisatie van het wagenpark.

hostnaamectl De systeemnaam wordt gewijzigd, maar uw DNS-zone en de tools die de machine nog steeds met de oude naam identificeren, blijven ongewijzigd. Daarom raad ik u aan deze afhankelijkheden te noteren vóór de wijziging en ze vervolgens één voor één te controleren.

Tux vervangt de identiteit van een server tijdens DNS-netwerkverificatie.
De systeemhostnaam, lokale resolutie en DNS moeten afzonderlijk worden gecontroleerd.

Noteer de huidige naam en adressen van de server.

Begin met het openhouden van een SSH-sessie. Als de server zich op afstand bevindt, zorg er dan ook voor dat u een back-upconsole bij uw hostingprovider hebt. Het wijzigen van de hostnaam zorgt er normaal gesproken niet voor dat SSH wordt afgesloten, maar een fout in de configuratie kan dat wel veroorzaken. /etc/hostsDNS of automatisering kan het herverbinden bemoeilijken.

hostnamectl status
hostnaam
hostnaam -f
cat /etc/hostname
getent hosts "$(hostname)"
ip -br adres

hostnaam Geeft de naam weer die door de kernel wordt gebruikt. Het bestand /etc/hostname Bevat de statische naam die bij het opstarten wordt geladen op een systeem dat wordt beheerd door systemd. Het commando hostnaam -f Er wordt geprobeerd de volledig gekwalificeerde naam op te halen via lokale resolutie. Als dit mislukt of een onverwacht resultaat oplevert, forceer de wijziging dan niet onmiddellijk: controleer eerst. /etc/hosts en DNS.

IP-adres onder Linux Dit helpt je bij het onderscheiden van het interfaceadres, de gebruikte route en elk openbaar IP-adres dat door een NAT wordt verstrekt.

Sla, voordat u begint met schrijven, de twee bestanden op die mogelijk gecorrigeerd moeten worden:

sudo cp -a /etc/hostname "/etc/hostname.bak-$(date +%F-%H%M)"
sudo cp -a /etc/hosts "/etc/hosts.bak-$(date +%F-%H%M)"

Wijzig de hostnaam met behulp van hostnamectl

Kies een korte, stabiele en DNS-compatibele naam, bijvoorbeeld srv-app-02Vermijd spaties, accenten, underscores en namen die een IP-adres beschrijven dat waarschijnlijk zal veranderen. Een statische hostnaam heeft voorrang op een tijdelijke naam die via DHCP is verkregen.

sudo hostnamectl set-hostname srv-app-02
hostnamectl status
hostnaam
cat /etc/hostname

Zonder targetingopties, hostnamectl set-hostname De mooie, statische en tijdelijke namen worden bijgewerkt. Voor een server wordt bijvoorbeeld een korte naam gebruikt, zoals srv-app-02 Voorkomt dat de hostnaam van het systeem wordt vermengd met de FQDN. srv-app-02.example.netDe handleidingpagina voor hostnaamectl Dit beschrijft deze drie niveaus.

De opdracht zou direct van kracht moeten worden. Het is echter mogelijk dat de prompt in uw SSH-sessie de oude naam behoudt totdat een nieuwe shell wordt geopend. Start de server niet opnieuw op om de prompt te vernieuwen. Open in plaats daarvan een tweede sessie en vergelijk de uitvoer van de opdracht. hostnaam

Het /etc/hosts-bestand repareren zonder de lokale resolutie te verstoren.

hostnaamectl herschrijf het niet /etc/hostsZoek eerst naar de oude naam voordat je het bestand wijzigt:

[:space:]grep -nE '(^|[])srv-app-01([]|$)' /etc/hosts[:space:]
sudoedit /etc/hosts

Op Debian en Ubuntu, een regel in 127.0.1.1 wordt vaak gebruikt om de FQDN en de korte naam lokaal aan elkaar te koppelen:

127.0.0.1 localhost
127.0.1.1 srv-app-02.example.net srv-app-02

Op een server met een stabiel privé-adres kunt u bijvoorbeeld een directe koppeling met dat adres vinden. 192.0.2.25 srv-app-02.example.net srv-app-02Kopieer een sjabloon niet zomaar. Corrigeer alleen de regel die de machine al aangeeft en behoud de overige gegevens. lokalehost IPv4 en IPv6.

getent hosts srv-app-02
getent hosts srv-app-02.example.net
hostnaam -f

krijgen de resolutie opvragen die is geconfigureerd door /etc/nsswitch.confHet houdt daarom rekening met /etc/hostsDNS en, afhankelijk van uw omgeving, bronnen zoals LDAP. Dit geeft een beter beeld dan simpelweg het bestand te lezen.

Werk de forward- en reverse-DNS afzonderlijk bij.

De nieuwe lokale naam maakt geen DNS-records aan. Voeg in de betreffende zone het A-record, het AAAA-record (indien van toepassing) en, indien u dit beheert, het PTR-record voor het adres toe of wijzig dit. Bewaar het oude record tijdens de overgang als er nog applicaties zijn die het gebruiken, en verwijder het na verificatie.

dig +short A srv-app-02.example.net
dig +kort AAAA srv-app-02.example.net
dig +short -x 192.0.2.25

Voer deze tests uit vanaf een andere machine en, indien nodig, met meerdere resolvers. Het artikel over graven onder Linux Dit laat zien hoe je lokale DNS, een openbare server en de gezaghebbende server kunt vergelijken zonder willekeurig caches te legen.

Een correcte DNS-server garandeert niet dat alles gereed is. Controleer TLS-certificaten, configuratiebestanden met de oude FQDN en op namen gebaseerde firewallregels. Voor SSH gebruikt een verbinding met de nieuwe naam nog steeds de host-sleutel van de server, maar er wordt een nieuwe logische vermelding aangemaakt. bekende_hostsVergelijk de vingerafdruk voordat u deze accepteert.

Beheer SSH, logboeken en monitoring na het hernoemen.

Open een tweede SSH-verbinding met de nieuwe FQDN zonder de eerste te sluiten. Controleer vervolgens op mislukte services en berichten die verband houden met de wijziging.

hostnamectl status
systemctl --failed
journalctl -u systemd-hostnamed --since "-15 minutes" --no-pager
journalctl --since "-15 minutes" --no-pager | grep -iE 'hostname|srv-app-01|srv-app-02'

Het is normaal dat de oude naam nog voorkomt in de regels die vóór de wijziging zijn geschreven. Waar het om gaat, is de naam die in de nieuwe gebeurtenissen wordt gebruikt. Start niet automatisch alle services opnieuw op. Controleer eerst de services die de hostnaam expliciet opgeven bij het opstarten, zoals bepaalde log-, back-up- of monitoringagents.

Controleer in uw monitoringtool of de machine niet als een nieuwe, lege host verschijnt terwijl de oude offline gaat. Voer dezelfde controle uit voor inventaris, back-ups en waarschuwingen. Anders kan een succesvolle hernoeming aan de Linux-kant twee afzonderlijke objecten op die platforms creëren.

Als de oude hostnaam na de herstart terugkeert

Als de naam terugkeert naar de vorige waarde, controleer dan of er een provisioninglaag aanwezig is voordat u opnieuw opstart. hostnaamectlEen cloudimage kan de hostnaam bij het opstarten instellen met behulp van cloud-init:

grep -R "preserve_hostname" /etc/cloud/cloud.cfg /etc/cloud/cloud.cfg.d 2>/dev/null
journalctl -b -u cloud-init --no-pager
cat /etc/hostname
hostnamectl status

Controleer ook het hostingcontrolepaneel, Terraform, Ansible of het initialisatiescript dat de VM beheert. Corrigeer de bron van waarheid in plaats van er bij elke opstart tegen te moeten vechten. Zodra de naam stabiel is, herhaal je de controles. krijgen, gravenSSH, logbestanden en monitoring. Dan weet je dat de server overal is hernoemd waar deze wijziging daadwerkelijk van belang is.

sudo apt update && sudo apt upgrade