Domain-Name-System

將 dnsmasq 配置為將搜尋域傳遞給 LXC 來賓?(Ubuntu 16.04)

  • January 22, 2018

我們的網路依靠 DHCP 標籤將客戶端路由到正確的上游主機,而無需知道這些主機的 FQDN。我們使用dnsmasqMAC地址為客戶端設置標籤,然後根據標籤向客戶端推送不同的搜尋域。例如,我們有這兩行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 和搜尋路徑選項。

引用自:https://serverfault.com/questions/891802