Ответ 1
Я сам изучил этот вопрос.
Что происходит, когда создается сетевое пространство имен, вы видите /etc/resolv.conf
хост-машины, если вы явно не создадите /etc/netns/<namespace_name>/resolv.conf
, который автоматически привяжет mount к /etc/resolv.conf
при поиске в пространстве имен в сети. Поэтому, просто создав этот путь, resolv.conf
хоста больше не будет видимым в пространстве имен в сети, у которого будет свой собственный resolv.conf
.
справочная страница ip netns
объясняет это:
Для приложений, которые знают о пространствах имен сетей, соглашение заключается в том, чтобы сначала искать файлы конфигурации глобальной сети в /etc/netns/NAME/ затем в /etc/. Например, если вы хотите версия /etc/resolv.conf для сетевого пространства имен, используемого для выделения ваш vpn вы бы назвали его /etc/netns/myvpn/resolv.conf.
Ip netns exec автоматизирует обработку этой конфигурации, файл соглашения для пространства имен сетей, не знающих приложения, путем создания монтировать пространство имен и связывать установку всего пространства сетевых имен настроить файлы в их традиционное расположение в /etc.
Что касается обновления 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
работает правильно.