Jak zachować opcje resolv.conf, takie jak obracanie, limit czasu w CentOS?

9

CentOS usunie wszelkie /etc/resolv.confokresowe zmiany wprowadzone ręcznie . Domyślne wartości w Linuksie są kiepskie, jeśli chodzi o awarię w rozsądnym czasie (zapytania serwerów nazw w tej samej kolejności za każdym razem, 5 sekund, 2 próby).

Dlatego pierwszy DNS w twojej resolv.confjest zasadniczo ścieżką krytyczną. Jeśli się nie powiedzie, możesz patrzeć na 10 sekund przed przejściem do trybu failover.

Te wartości domyślne można modyfikować (patrz strona podręcznika resolv.conf ), ale w jaki sposób można wprowadzić trwałe zmiany w CentOS i zachować je poprzez ponowne uruchomienie itp.?

Adam C.
źródło

Odpowiedzi:

12

Odpowiedź można znaleźć w /sbin/dhclient-script:

if [ -n "${RES_OPTIONS}" ]; then
    echo "options ${RES_OPTIONS}" >> ${rscf}
fi

Ale nie jest strasznie oczywiste, gdzie można ustawić, RES_OPTIONSaby skrypt go pobierał - niektóre rzeczy, takie jak domena wyszukiwania, można ustawić w ifcfg-ethXpliku, ale opcje resolvera są ustawione gdzie indziej. Właściwie plik, który chcesz /etc/sysconfig/network. Aby ustawić odpowiednie opcje, dodaj coś takiego jak ten wiersz do tego pliku:

RES_OPTIONS="rotate timeout:1 retries:1"

Spowoduje to ustawienie limitu czasu na 1 sekundę, skorzystanie z jednej ponownej próby i poinformowanie klienta, aby obrócił swoje programy rozpoznające polecenia na żądanie zamiast sekwencyjnego przeglądania listy za każdym razem.

Jeśli chcesz, aby zmiany zaczęły obowiązywać natychmiast, wydaj service network restartpolecenie i sprawdź swoją nową /etc/resolv.confw pełnej krasie. Oto jak wyglądał mój podczas testowania tego:

# cat /etc/resolv.conf 
; generated by /sbin/dhclient-script
search example.com
options rotate timeout:1 retries:1
nameserver 10.1.1.2
nameserver 10.1.1.1
Adam C.
źródło
1

Akceptowana odpowiedź dotyczy korzystania ze starszych skryptów sieciowych. Jeśli używasz NetworkManagera, możesz go nawet nie mieć /etc/sysconfig/network, a jeśli to zrobisz, nadal nie będzie używany do połączeń zarządzanych przez NetworkManager .

Jeśli używasz NetworkManager :

Aby dodać opcje, np. Dodaj rotatedo bond0:

nmcli con mod bond0 +ipv4.dns-options rotate

Aby usunąć tę opcję:

nmcli con mod bond0 -ipv4.dns-options rotate

Warto +też zmieniać opcje; NetworkManager jest wystarczająco inteligentny, aby wykryć istniejące opcje i je zaktualizować. Na przykład zmiana wartości limitu czasu:

root@debian:~# nmcli con show bond0 |grep ipv4.dns-options
ipv4.dns-options:                       "rotate,timeout:5"
root@debian:~# nmcli con mod bond0 +ipv4.dns-options timeout:3
root@debian:~# nmcli con show bond0 |grep ipv4.dns-options
ipv4.dns-options:                       "rotate,timeout:3"

Oznacza to, że wartość jest ignorowana do usunięcia i nawet nie jest potrzebna. Aby usunąć limit czasu:

nmcli con mod bond0 -ipv4.dns-options timeout

Będzie również działał z wartością limitu czasu, ale ta wartość zostanie zignorowana , więc usunięcie timeout:5spowoduje również usunięcie każdej innej wartości limitu czasu.

NB: Patrząc na to, natknąłem się na podobny błąd, który został naprawiony w menedżerze sieci v1.14.6 , v1.15.2-dev i v1.16 . Jeśli wystąpi jakikolwiek problem, sprawdź najpierw wersję menedżera sieci .

Thomas Guyot-Sionnest
źródło
1
Dodając nową odpowiedź do starej zaakceptowanej odpowiedzi, dobrze jest zanotować, ile lat ma pytanie i odpowiedź. To, co uważane jest za dziedzictwo, niekoniecznie było już ponad 4 lata temu, kiedy zadano pytanie. Zamiast oznaczać jako starszą wersję, jeśli zauważysz, kiedy zmieniły się ustawienia domyślne (jaka wersja CentOS - być może 8?), A następnie przystąpisz do dodawania informacji, będzie to o wiele bardziej pomocna odpowiedź. Ewentualnie ponownie zapytaj i odpowiedz na swoją własną wersję (w przypadku nowszych wersji CentOS lub np. Przy korzystaniu z Network Managera) i połącz się z tą starszą wersją w celach informacyjnych.
Adam C
Stary sposób może być nadal aktualny ... NetworkManager istnieje już od dawna, ale nadal możesz skonfigurować stary sposób zarówno w Debianie, jak i CentOS.
Thomas Guyot-Sionnest
0

Jeśli musisz to zrobić przy użyciu płaskich plików, a nie nmclipoleceń (takich jak narzędzie do zarządzania konfiguracją), Red Hat oferuje inne rozwiązanie.

Utwórz skrypt /etc/NetworkManager/dispatcher.d/15-resolv, który kopiuje niestandardowe /etc/resolv.confmiejsce.

#!/bin/bash
#
# Description : script to override default resolv.conf file
# with customized file.
cp -f /etc/resolv.conf.custom /etc/resolv.conf

Po zrestartowaniu NetworkManager skrypt zostanie wykonany, zastępując plik własnym.

https://access.redhat.com/solutions/61921

Aaron Copley
źródło
0

Możesz powiedzieć NetworkManagerowi, aby nie zarządzał /etc/resolv.confplikiem razem.

  1. Utwórz /etc/NetworkManager/conf.d/90-dns-none.confplik o następującej treści:

    [main]
    dns=none
    
  2. Ponownie załaduj usługę NetworkManager:

    systemctl reload NetworkManager
    

Dokumentacja, z której pochodzi, zawiera drugie rozwiązanie polegające na zastąpieniu /etc/resolv.confdowiązaniem symbolicznym do pliku.

Przeczytaj: 22. Ręczne konfigurowanie pliku /etc/resolv.conf

Aaron Copley
źródło
-1

poprostu dodaj

resolv_conf_options=rotate\ timeout:1\ retries:1

w Twoim resolvconf.conf

Jewgienij F.
źródło
Jesteś pewien, że jest to opcja w CentOS (masz link do dokumentów / coś, aby to pokazać)? Widzę to jako opcję FreeBSD i Ubuntu, ale nie znajduję jej w CentOS
Adam C
Jest to część pakietu openresolv
Evgeny F
1
to nie wydaje się być standardowym pakietem, więc tak naprawdę nie jest opcją dla CentOS, szczególnie w kontrolowanych środowiskach, ale nie jest złą opcją gdzie indziej
Adam C
-3

Ostatni raz napotkałem ten sam problem z moim nowym subskrybowanym systemem Linux VPS. Rozwiązałem problem, używając komendy chattr + i, aby plik był niezmienny. Po prostu przejdź do folderu / etc i uruchom to po wprowadzeniu niezbędnych zmian w pliku resolv.conf:

chattr + i resolv.conf

Jeśli chcesz przywrócić ustawienie, po prostu wykonaj następujące czynności:

chattr -i resolv.conf

Pełna wskazówka dla odniesienia: http://boxtutor.com/fix-etcresolv-conf-is-not-saving-after-server-reboot/

Chuichi
źródło
Byłby to potencjalny problem, ponieważ nie byłby wówczas w stanie odbierać zmian na serwerach nazw z DHCP - nie zmieniałby się często, ale nadal chciałbym, żeby działał
Adam C