2016-06-29 14 views
10

Sto usando gli spazi dei nomi per separare alcune interfacce fisiche su un server. Il routing funziona perfettamente. Inoltre ho una cartella per ogni spazio dei nomi in/etc/netns/e.g. /etc/netns/namespaceA/resolv.conf in modo che anche il DNS funzioni bene.Come può essere reso disponibile lo spazio dei nomi di dhclient?

Il problema si pone quando si utilizza DHCP con dhclient. Sto eseguendo dhclient dall'interno di un namespace e sto ottenendo questo errore.

(namespaceA)[email protected]:~#dhclient 
RTNETLINK answers: File exists 
mv: cannot move '/etc/resolv.conf.dhclient-new.2740' to '/etc/resolv.conf': Device or resource busy 

ho scoperto che la MV in /etc/resolvconf/update.d/libc contiene un mv, che potrebbe causare il problema.

Come può essere reso disponibile lo spazio dei nomi di dhclient?

risposta

6

Ho esaminato personalmente il problema.

quello che succede è che quando si crea uno spazio dei nomi di rete, si vede /etc/resolv.conf della macchina host a meno che non si crea esplicitamente /etc/netns/<namespace_name>/resolv.conf, che legherà monte automaticamente /etc/resolv.conf quando alzò gli occhi all'interno lo spazio dei nomi di rete. Pertanto, semplicemente creando tale percorso, lo resolv.conf dell'host non sarà più visibile sul namespace della rete, che avrà il proprio resolv.conf.

La manual page di ip netns spiega questo:

Per le applicazioni che sono a conoscenza di spazi dei nomi di rete, la convenzione è quello di cercare i file di configurazione di rete a livello mondiale prima in /etc/netns/NOME/poi/eccetera/. Ad esempio, se si desidera una diversa versione di /etc/resolv.conf per uno spazio dei nomi di rete utilizzato per isolare il proprio VPN, lo si chiamerebbe /etc/netns/myvpn/resolv.conf.

Ip netns exec automatizza la gestione di questa configurazione, il file convenzione per le applicazioni di rete ignari dello spazio dei nomi, con la creazione di un monte namespace e rilegare il montaggio tutti i file di configurazione per rete namespace nella loro posizione tradizionale in/etc.

quanto riguarda l'aggiornamento resolv.conf, dhclient non funziona nei namespace rete fuori della scatola quando /etc/netns/<namespace_name>/resolv.conf esiste (d'altra parte, quando non esiste, verrà sovrascritta la resolv.conf della macchina host , poiché è l'unico disponibile, ma non è davvero desiderabile). Come mostra l'errore nella domanda precedente, ciò che accade è che dhclient prepara un file temporaneo con i nuovi dettagli del server dei nomi in /etc/resolv.conf.dhclient-new.2740 e prova a rinominarlo come /etc/resolv.conf. Genera un errore perché /etc/resolv.conf è già montato su bind e apparentemente mv non è autorizzato a fare questo trucco.

Per fare in modo che dhclient funzioni negli spazi dei nomi di rete, è necessario modificare /sbin/dhclient-script. Ho rimosso questo:

mv -f $new_resolv_conf /etc/resolv.conf 

e lo ha sostituito con:

cat $new_resolv_conf > /etc/resolv.conf 
rm -f $new_resolv_conf 

In caso contrario, dhcpcd sembra fare questo lavoro in modo corretto.

+0

Questa è una soluzione alternativa. Nota che ci sono due sezioni in cui devi cambiare mv in cat. Mi chiedo cosa stia facendo intermentalmente. Rimuove prima il file? – 0xAffe

Problemi correlati