Odnów adres IP za pomocą dhclient na różnych interfejsach

16

Mam dwa interfejsy na moim komputerze eth0i eth1.

Obie podsieci mają na sobie serwer DHCP. Jak mogę użyć dhclientdo odnowienia adresu IP dla obu interfejsów?

Jeśli zrobię:

dhclient -r && dhclient eth0

Odnawia adres IP eth0. Następnie, jeśli chcę po prostu zrobić:

dhclient eth1

Błąd kończy się błędem:

dhclient(22421) is already running - exiting.

Mogę zrobić:

dhclient -r && dhclient eth1

Ale dhclient -rczęść zwalnia dzierżawę i tracę również adres IP eth0.

Do tej pory jedynym sposobem udało mi się zrobić to, co chcę, to uruchomienie dhclientdla eth0brutalnie zabić go i uruchomić go na eth1: I skończyć z odnowioną IP na obu interfejsach.

Testowałem też dhclient -xzamiast dhclient -r, bez powodzenia.

Z pewnością nie jest to dobra droga!

EDYTOWAĆ:

Sugerowane zrobienie dwóch odpowiedzi dhclient -r eth0 eth1 && dhclient eth0 eth1 To rzeczywiście ogranicza połączenia rozgłoszeniowe do tych interfejsów. Ale pierwszy serwer DHCP, który odpowie, będzie jedynym używanym, w wyniku czego powstanie nowy adres IP na jednym interfejsie, a nie na obu. Zobacz tutaj, widzimy DHCPDISCOVERwywołania na obu interfejsach, ale DHCPREQUESTodbywa się to tylko na eth0pierwszym interfejsie, przez który znaleziono serwer DHCP:

Listening on LPF/eth0/0a:00:27:00:00:00
Sending on   LPF/eth0/0a:00:27:00:00:00
Listening on LPF/eth1/84:8f:69:d3:d4:a1
Sending on   LPF/eth1/84:8f:69:d3:d4:a1
Sending on   Socket/fallback
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 5 (xid=0x170fcb67)
DHCPDISCOVER on eth1 to 255.255.255.255 port 67 interval 4 (xid=0x115a24c3)
DHCPREQUEST on eth0 to 255.255.255.255 port 67 (xid=0x170fcb67)
DHCPOFFER from 192.168.1.1
DHCPACK from 192.168.1.1 (xid=0x170fcb67)
bound to 192.168.1.4 -- renewal in 1710 seconds.
Noé Malzieu
źródło

Odpowiedzi:

11

Zarówno

dhclient -r && dhclient

lub

dhclient -r eth0 eth1 && dhclient eth0 eth1

Edycja 1:

Następna próba: Prawdopodobnie możesz pozbyć się błędu „dhclient (22421) już działa - wychodzenie”, zmuszając jedną z instancji do używania innych plików. Użyj PATH_DHCLIENT_PIDi PATH_DHCLIENT_DBzmiennych (lub równoważnych opcji wiersza poleceń, patrz strona podręcznika), aby je rozdzielić.

Hauke ​​Laging
źródło
Problem polega na tym, że dzięki temu dhclient wysyła pakiety w celu wykrycia serwera dhcp w formie rzeczywiście nadawanej na obu interfejsach, ale zatrzymuje się na pierwszym odebranym serwerze. Chcę użyć pierwszego serwera otrzymanego przez eth0 dla eth0 ip, a pierwszego serwera otrzymanego przez eth1 dla eth1 ip.
Noé Malzieu
Gdybym nie był jasny: wysyła DHCPDISCOVER na obu interfejsach, ale wysyła DHCPREQUEST tylko na pierwszych interfejsach, na które otrzymuje odpowiedź z serwera dhcp
Noé Malzieu
@ NoéMalzieu W każdym razie powinieneś umieścić te informacje w swoim pytaniu. Trochę zabawne: masz bezużyteczną odpowiedź „wartą 11 000 powtórzeń”; to nie zdarza się codziennie :-)
Hauke ​​Laging
@HaukeLaging - kto odpowiada, nazywasz bezużytecznym 8-).
slm
@ NoéMalzieu Zobacz moją edycję.
Hauke ​​Laging
4

Pomysł nr 1: Spróbuj przekazać 2 interfejsy do dhclient

Jeśli spojrzysz na stronę manuala dhclient, zauważysz, że na końcu przykładowego użycia nieco [ if0 [ ...ifN ]. Oznaczałoby to, że możesz uruchomić dhclienti przekazać mu wiele interfejsów, na których chcesz uruchomić.

fragment strony podręcznika dhclient

dhclient [-4 | -6] [-S] [-N [-N ...]] [-T [-T ...]] [-P [-P ...]] [-p port] [-d] [ -e VAR = wartość] [-q] [-1] [-r | -x] [-lf plik-dzierżawy] [-pf plik-pid] [-cf plik-konfiguracji] [-sf plik-skryptu] [-s serwer] [-g przekaźnik] [-n] [-nc] [ -nw] [-w] [-B] [-I identyfikator klienta dhcp] [-H nazwa hosta] [-F fqdn.fqdn] [-V identyfikator klasy dostawcy] [-R opcja-żądania- lista] [limit czasu] [-v] [--wersja] [if0 [... ifN]]

Powinieneś być w stanie dhclientuwolnić się na wielu interfejsach i połączyć się z nimi.

dhclient -r eth0 eth1
dhclient eth0 eth1

Pomysł nr 2: Zobacz, jak robi to NetworkManager

Oto jak NetworkManager konfiguruje się dhclientw moim systemie. Możesz spróbować wywołać drugi dhclient jawnie z argumentami.

/sbin/dhclient -d -4 \
   -sf /usr/libexec/nm-dhcp-client.action \
   -pf /var/run/dhclient-wlan0.pid \
   -lf /var/lib/dhclient/dhclient-01f0476d-04bf-4ce7-8ced-844fae73f430-wlan0.lease \
   -cf /var/run/nm-dhclient-wlan0.conf wlan0
slm
źródło
Dziękuję za odpowiedź. Proszę jednak sprawdzić mój komentarz do odpowiedzi na @HaukeLaging
Noé Malzieu
@ NoéMalzieu - Czy możemy zobaczyć pełne wyjście z 2. dhclient? dhclient -r && dhclient eth0 && dhclient -v eth1
slm
Po tym, drugi klient mówidhclient(1155) is already running - exiting.
Noé Malzieu
Tak, robi to samo dla mnie.
slm