Domain-Name-System
將 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 容器內執行服務。容器獲取由在 LXC 主機上執行的本地實例分配的網路資訊
dnsmasq
,這是 LXC 來賓的 DNS/DHCP 的預設方法。LXC 來賓然後在本地 NAT 網路上獲得一個 IP 地址。麻煩來自我們的標記方案。LXC 來賓沒有將搜尋域推送給他們,因為他們沒有從我們的主網路範圍的 DHCP 伺服器接收 DCHP。LXC 來賓可以 ping 更廣泛網路上的 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 和搜尋路徑選項。