配置 dnsmasq 以将搜索域传递到 LXC 客户机?(Ubuntu 16.04)

配置 dnsmasq 以将搜索域传递到 LXC 客户机?(Ubuntu 16.04)

我们的网络依靠 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 容器内运行服务。容器通过dnsmasqLXC 主机上运行的本地实例获取其网络信息,这是 LXC 客户机的 DNS/DHCP 默认方法。然后 LXC 客户机在本地 NAT 网络上获取 IP 地址。

问题出在我们的标记方案上。LXC 客户端无法收到推送给他们的搜索域,因为它们没有从我们主网络范围的 DHCP 服务器接收 DCHP。LXC 客户端可以 ping 更广泛网络上的 IP 地址,但搜索域的 DNS 解析失败。如果我手动设置正确的搜索域,则解析将按预期进行。

有没有办法将该搜索域从主机传递到客户机?

请注意,我们没有跑步lxd

答案1

因此,我没有找到确切的解决方案,但我确实找到了一种解决方法。基本上,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 和搜索路径选项。

相关内容