Renovar IP com dhclient em diferentes interfaces

16

Eu tenho duas interfaces no meu computador eth0e eth1.

Ambas as sub-redes possuem um servidor DHCP. Como eu poderia usar dhclientpara renovar o endereço IP das duas interfaces?

Se eu fizer:

dhclient -r && dhclient eth0

Renova o IP ativado eth0. Então, se eu quiser apenas fazer:

dhclient eth1

Falha com erro:

dhclient(22421) is already running - exiting.

Eu posso fazer:

dhclient -r && dhclient eth1

Mas a dhclient -rparte libera a concessão e eu também perco o endereço IP eth0.

Por enquanto, a única maneira que eu consegui fazer o que eu quero é correr dhclientpara eth0, brutalmente matá-lo e executá-lo em eth1: Eu acabar com um IP renovado em ambas as interfaces.

Eu também testei com, em dhclient -xvez de dhclient -r, sem sorte.

Certamente, este não é o caminho a seguir!

EDITAR:

Duas respostas sugeridas para fazer dhclient -r eth0 eth1 && dhclient eth0 eth1 isso, de fato, limitam as chamadas de transmissão para essas interfaces. Mas o primeiro servidor DHCP a responder será o único usado, resultando em um novo IP em uma única interface e não em ambos. Veja aqui, podemos ver as DHCPDISCOVERchamadas nas duas interfaces, mas a primeira interface DHCPREQUESTé feita apenas eth0através da qual um servidor DHCP foi encontrado:

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
fonte

Respostas:

11

Ou

dhclient -r && dhclient

ou

dhclient -r eth0 eth1 && dhclient eth0 eth1

Editar 1:

Próxima tentativa: você provavelmente pode se livrar do erro "dhclient (22421) já está executando - saindo" "fazendo uma das instâncias usar arquivos diferentes. Use PATH_DHCLIENT_PIDand PATH_DHCLIENT_DBvariables (ou as opções de linha de comando equivalentes, consulte a página de manual) para separá-las.

Hauke ​​Laging
fonte
O problema é que, com isso, o dhclient envia os pacotes para descobrir o servidor dhcp como transmitido nas duas interfaces, mas para com o PRIMEIRO servidor recebido. Eu quero usar o primeiro servidor recebido via eth0 para eth0 ip e o primeiro servidor recebido via eth1 para eth1 ip.
Noé Malzieu
Se eu não era clara: ele envia DHCPDISCOVER em ambas as interfaces, mas enviar DHCPREQUEST apenas nas primeiras interfaces nas quais ela recebe uma resposta de um servidor DHCP
Noé Malzieu
@ NoéMalzieu Você deve colocar essas informações em sua pergunta de qualquer forma. Engraçado: você recebeu uma resposta inútil "no valor de 11K repetições"; isso não acontece todos os dias :-)
Hauke ​​Laging
@HaukeLaging - quem é a resposta que você está chamando de inútil 8-).
slm
@ NoéMalzieu Veja minha edição.
Hauke ​​Laging
4

Idéia # 1: tente passar 2 interfaces para o dhclient

Se você olhar a página de manual, dhclientperceberá que, no final do exemplo, use o bit [ if0 [ ...ifN ]. Isso implica que você pode executar dhcliente transmitir várias interfaces nas quais deseja executar.

trecho da página de manual do dhclient

dhclient [-4 | -6] [-S] [-N [-N ...]] [-T [-T ...]] [-P [-P ...]] [-p port] [-d] [ -e VAR = valor] [-q] [-1] [-r | -x] [-lf lease-file] [-pf pid-file] [-cf config-file] [-sf script-file] [-s server] [-g relay] [-n] [-nc] [ -nw] [-w] [-B] [-I dhcp-client-identifier] [-H host-name] [-F fqdn.fqdn] [-V vendor-class-identifier] [-R request-option- lista] [-timeout timeout] [-v] [--version] [if0 [... ifN]]

Portanto, você deve conseguir dhclientlançar em várias interfaces e se conectar a elas também.

dhclient -r eth0 eth1
dhclient eth0 eth1

Idéia # 2: veja como o NetworkManager faz isso

Veja como o NetworkManager é configurado dhclientno meu sistema. Você pode tentar chamar o segundo dhclient explicitamente com argumentos.

/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
fonte
Obrigado pela sua resposta. No entanto, por favor, verifique meu comentário na resposta @HaukeLaging
Noé Malzieu
@ NoéMalzieu - Podemos ver uma saída detalhada do segundo dhclient? dhclient -r && dhclient eth0 && dhclient -v eth1
slm
Com isso, o segundo cliente dizdhclient(1155) is already running - exiting.
Noé Malzieu
Sim, está fazendo o mesmo para mim também.
slm