Наша сеть полагается на теги DHCP для маршрутизации клиентов на правильные вышестоящие хосты без необходимости знать FQDN этих хостов. Мы используем dnsmasq
чтобы установить теги для клиентов по MAC-адресу, а затем мы проталкиваем клиентам разные поисковые домены на основе тега. Например, у нас есть эти две строки в dnsmasq.conf
:
dhcp-option=tag:foo,option:domain-search,foo.company.net
dhcp-host=00:11:22:33:44:55,foo-client,set:foo
Здесь, когда foo-client
пытается получить доступ к любым неквалифицированным хостам, он попытается посмотреть на <unqualified-hostname>.foo.company.net
.
На некоторых клиентских машинах также выполняются службы внутри контейнера LXC. Контейнер получает свою сетевую информацию, назначенную локальным экземпляром dnsmasq
выполняется на хосте LXC, который является методом по умолчанию для DNS / DHCP гостевых систем LXC. Затем гость LXC получает IP-адрес в локальной сети NAT.
Проблема заключается в нашей схеме тегов. Гости LXC не получают домен поиска, потому что они не получают DCHP от нашего основного общесетевого DHCP-сервера. Гости LXC могут пинговать IP-адреса в более широкой сети, но разрешение DNS с поисковым доменом не удается. Если я вручную установил правильный домен поиска, разрешение будет работать должным образом.
Есть ли способ пройти через этот поисковый домен от хоста к гостю?
Обратите внимание, мы НЕ запускаем lxd
.
Поэтому я не нашел точного решения для этого, но нашел обходной путь. Обычно LXC может запустить сценарий на гостевой машине перед подключением сети. Этот вариант конфигурации называется lxc.network.script.up
. Я использовал эту функцию для копирования информации DNS с хоста:
#!/bin/bash
CONTAINER=$1
SECTION=$2
OPERATION=$3
NAMESERVER=$(grep nameserver /etc/resolv.conf | sed 's/^nameserver //g')
SEARCHDOMAIN=$(grep search /etc/resolv.conf | sed 's/^search //g')
cat > /var/lib/lxc/$CONTAINER/rootfs/etc/network/interfaces <<EOF
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet manual
dns-search $SEARCHDOMAIN
dns-nameservers $NAMESERVER
EOF
Я поместил этот скрипт в /var/lib/lxc/guest/setup-dns.sh
и добавил следующую строку в /var/lib/lxc/guest/config
:
lxc.network.script.up = /var/lib/lxc/guest/setup-dns.sh
После выполнения этих шагов появляется гость и правильно настроены параметры DNS и пути поиска.