2016-06-29 3 views
10

Я использую пространства имен для разделения нескольких физических интерфейсов на сервере. Маршрутизация работает отлично. Также у меня есть папка для каждого пространства имен в/etc/netns/например. /etc/netns/namespaceA/resolv.conf, чтобы DNS работал отлично.Каким образом dhclient может быть передано в пространство имен?

Проблема возникает при использовании DHCP с dhclient. Я запускаю dhclient из пространства имен и получаю эту ошибку.

(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 

я узнал, что мв в /etc/resolvconf/update.d/libc содержит мв, которые могут вызвать проблемы.

Как можно сообщать о пространстве имен через dhclient?

ответ

6

Я сам изучил этот вопрос.

Что происходит, что при создании сети имен, вы видите /etc/resolv.conf принимающей машины, если вы не создавать явно /etc/netns/<namespace_name>/resolv.conf, который будет связывать гору автоматически /etc/resolv.conf когда посмотрел внутри сеть пространства имен. Поэтому, просто создав этот путь, resolv.conf хоста больше не будет виден в пространстве имен сетей, у которого будет свой собственный resolv.conf.

manual page из ip netns объясняет это:

Для приложений, которые знают о сетевых пространств имен, конвенция является поиск глобальных файлов конфигурации сети первый в /и т.д./netns/NAME/затем в/и т.д/. Например, если вам нужна другая версия /etc/resolv.conf для для сетевого пространства имен, используемого для выделения вашего vpn, вы бы назвали его /etc/netns/myvpn/resolv.conf.

Ip netns Exec автоматизирует обработку этой конфигурации, файл соглашение для сети пространства имен не знают приложений, создавая монтирование имен и связать монтирование всех в сеть пространства имен конфигурационных файлов в их традиционное место в/и т.д..

Что касается обновления resolv.conf, dhclient не работает в сети пространств имен из коробки, когда /etc/netns/<namespace_name>/resolv.conf существует (с другой стороны, если она не существует, он будет перезаписан resolv.conf из хост-машине , так как это единственный доступный, но это не очень желательно). Как показывает ошибка в вышеприведенном вопросе, происходит то, что dhclient готовит временный файл с новыми данными сервера имен в /etc/resolv.conf.dhclient-new.2740, а затем пытается переименовать его как /etc/resolv.conf. Он генерирует ошибку, потому что /etc/resolv.conf уже привязан и, видимо, mv не разрешается делать этот трюк.

Для того, чтобы сделать dhclient работу в сетевых пространствах имен, /sbin/dhclient-script следует изменить. я удалил это:

mv -f $new_resolv_conf /etc/resolv.conf 

И заменить его:

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

В противном случае, dhcpcd кажется, чтобы сделать эту работу правильно.

+0

Это крутой обходной путь. Обратите внимание, что есть два раздела, где вам нужно изменить mv на cat. Интересно, что делает mv. Удаляет ли файл сначала? – 0xAffe

Смежные вопросы