[lxc-devel] [lxd/master] Add `dns.search`
stgraber on Github
lxc-bot at linuxcontainers.org
Thu May 21 15:42:05 UTC 2020
A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 301 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20200521/e2588686/attachment-0001.bin>
-------------- next part --------------
From c11bf20310f0adbb15408b5ef67da64b56caa0ee Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber at ubuntu.com>
Date: Thu, 21 May 2020 11:28:18 -0400
Subject: [PATCH 1/4] lxd/networks: Warn on small IPv6 subnets
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Closes #7404
Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>
---
doc/networks.md | 10 ++++++++++
lxd/network/network.go | 7 ++++++-
2 files changed, 16 insertions(+), 1 deletion(-)
diff --git a/doc/networks.md b/doc/networks.md
index 389262da6e..6df258a2dd 100644
--- a/doc/networks.md
+++ b/doc/networks.md
@@ -146,6 +146,16 @@ exists, so you must repeat this command each reboot and after
LXD is restarted. Also note this only works if the bridge
`dns.mode` is not `none`.
+## IPv6 prefix size
+For optimal operation, a prefix size of 64 is preferred.
+Larger subnets (prefix smaller than 64) should work properly too but
+aren't typically that useful for SLAAC.
+
+Smaller subnets while in theory possible when using stateful DHCPv6 for
+IPv6 allocation aren't properly supported by dnsmasq and may be the
+source of issue. If you must use one of those, static allocation or
+another standalone RA daemon be used.
+
## Allow DHCP, DNS with Firewalld
In order to allow instances to access the DHCP and DNS server that LXD runs on the host when using firewalld
diff --git a/lxd/network/network.go b/lxd/network/network.go
index 37ae7fa203..93f6ea60e6 100644
--- a/lxd/network/network.go
+++ b/lxd/network/network.go
@@ -24,6 +24,7 @@ import (
"github.com/lxc/lxd/lxd/util"
"github.com/lxc/lxd/shared"
"github.com/lxc/lxd/shared/api"
+ log "github.com/lxc/lxd/shared/log15"
"github.com/lxc/lxd/shared/logger"
"github.com/lxc/lxd/shared/subprocess"
"github.com/lxc/lxd/shared/version"
@@ -536,6 +537,11 @@ func (n *Network) setup(oldConfig map[string]string) error {
if err != nil {
return err
}
+ subnetSize, _ := subnet.Mask.Size()
+
+ if subnetSize > 64 {
+ logger.Warn("IPv6 networks with a prefix larger than 64 aren't properly supported by dnsmasq", log.Ctx{"network": n.name})
+ }
// Update the dnsmasq config
dnsmasqCmd = append(dnsmasqCmd, []string{fmt.Sprintf("--listen-address=%s", ip.String()), "--enable-ra"}...)
@@ -559,7 +565,6 @@ func (n *Network) setup(oldConfig map[string]string) error {
}
if shared.IsTrue(n.config["ipv6.dhcp.stateful"]) {
- subnetSize, _ := subnet.Mask.Size()
if n.config["ipv6.dhcp.ranges"] != "" {
for _, dhcpRange := range strings.Split(n.config["ipv6.dhcp.ranges"], ",") {
dhcpRange = strings.TrimSpace(dhcpRange)
From b10d82bfd1f7fe7e377ea371898aa7a2aa60d77e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber at ubuntu.com>
Date: Thu, 21 May 2020 11:40:13 -0400
Subject: [PATCH 2/4] lxd/network: Force DHCP custom gateway
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>
---
lxd/network/network.go | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lxd/network/network.go b/lxd/network/network.go
index 93f6ea60e6..edd2d53910 100644
--- a/lxd/network/network.go
+++ b/lxd/network/network.go
@@ -431,7 +431,7 @@ func (n *Network) setup(oldConfig map[string]string) error {
}
if n.config["ipv4.dhcp.gateway"] != "" {
- dnsmasqCmd = append(dnsmasqCmd, fmt.Sprintf("--dhcp-option=3,%s", n.config["ipv4.dhcp.gateway"]))
+ dnsmasqCmd = append(dnsmasqCmd, fmt.Sprintf("--dhcp-option-force=3,%s", n.config["ipv4.dhcp.gateway"]))
}
if mtu != "1500" {
From 1af356dffa8ae28743af7dc05e3ee94963bd8984 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber at ubuntu.com>
Date: Thu, 21 May 2020 11:40:31 -0400
Subject: [PATCH 3/4] api: Add network_dns_search
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>
---
doc/api-extensions.md | 3 +++
shared/version/api.go | 1 +
2 files changed, 4 insertions(+)
diff --git a/doc/api-extensions.md b/doc/api-extensions.md
index 54bdb546e3..dfb2c878fa 100644
--- a/doc/api-extensions.md
+++ b/doc/api-extensions.md
@@ -1038,3 +1038,6 @@ This adds system information to the output of `/1.0/resources`.
This adds the push and relay modes to image copy.
It also introduces the following new endpoint:
- `POST 1.0/images/<fingerprint>/export`
+
+## network\_dns\_search
+This introduces the `dns.search` config option on networks.
diff --git a/shared/version/api.go b/shared/version/api.go
index da32e9921a..975d0221cf 100644
--- a/shared/version/api.go
+++ b/shared/version/api.go
@@ -210,6 +210,7 @@ var APIExtensions = []string{
"container_nic_ipvlan_mode",
"resources_system",
"images_push_relay",
+ "network_dns_search",
}
// APIExtensionsCount returns the number of available API extensions.
From 86bf750519e353cac343c855e7dcb92c2d9fa478 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber at ubuntu.com>
Date: Thu, 21 May 2020 11:40:37 -0400
Subject: [PATCH 4/4] lxd/network: Support specifying search domain
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Closes #7372
Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>
---
doc/networks.md | 1 +
lxd/network/network.go | 5 +++++
lxd/networks_config.go | 1 +
scripts/bash/lxd-client | 2 +-
4 files changed, 8 insertions(+), 1 deletion(-)
diff --git a/doc/networks.md b/doc/networks.md
index 6df258a2dd..94cb191bbb 100644
--- a/doc/networks.md
+++ b/doc/networks.md
@@ -59,6 +59,7 @@ bridge.hwaddr | string | - | -
bridge.mode | string | - | standard | Bridge operation mode ("standard" or "fan")
bridge.mtu | integer | - | 1500 | Bridge MTU (default varies if tunnel or fan setup)
dns.domain | string | - | lxd | Domain to advertise to DHCP clients and use for DNS resolution
+dns.search | string | - | - | Full comma eparate domain search list, defaulting to dns.domain
dns.mode | string | - | managed | DNS registration mode ("none" for no DNS record, "managed" for LXD generated static records or "dynamic" for client generated records)
fan.overlay\_subnet | string | fan mode | 240.0.0.0/8 | Subnet to use as the overlay for the FAN (CIDR notation)
fan.type | string | fan mode | vxlan | The tunneling type for the FAN ("vxlan" or "ipip")
diff --git a/lxd/network/network.go b/lxd/network/network.go
index edd2d53910..b033b673a4 100644
--- a/lxd/network/network.go
+++ b/lxd/network/network.go
@@ -438,6 +438,11 @@ func (n *Network) setup(oldConfig map[string]string) error {
dnsmasqCmd = append(dnsmasqCmd, fmt.Sprintf("--dhcp-option-force=26,%s", mtu))
}
+ dnsSearch := n.config["dns.search"]
+ if dnsSearch != "" {
+ dnsmasqCmd = append(dnsmasqCmd, fmt.Sprintf("--dhcp-option-force=119,%s", strings.Trim(dnsSearch, " ")))
+ }
+
expiry := "1h"
if n.config["ipv4.dhcp.expiry"] != "" {
expiry = n.config["ipv4.dhcp.expiry"]
diff --git a/lxd/networks_config.go b/lxd/networks_config.go
index 26c6b4c7a7..66b2ef5101 100644
--- a/lxd/networks_config.go
+++ b/lxd/networks_config.go
@@ -97,6 +97,7 @@ var networkConfigKeys = map[string]func(value string) error{
"ipv6.routing": shared.IsBool,
"dns.domain": shared.IsAny,
+ "dns.search": shared.IsAny,
"dns.mode": func(value string) error {
return shared.IsOneOf(value, []string{"dynamic", "managed", "none"})
},
diff --git a/scripts/bash/lxd-client b/scripts/bash/lxd-client
index c50e5ca295..173bf03a10 100644
--- a/scripts/bash/lxd-client
+++ b/scripts/bash/lxd-client
@@ -124,7 +124,7 @@ _have lxc && {
boot.priority"
networks_keys="bridge.driver bridge.external_interfaces bridge.mode \
- bridge.mtu bridge.hwaddr dns.domain dns.mode fan.overlay_subnet fan.type \
+ bridge.mtu bridge.hwaddr dns.domain dns.mode dns.search fan.overlay_subnet fan.type \
fan.underlay_subnet ipv4.address ipv4.dhcp ipv4.dhcp.expiry ipv4.dhcp.gateway \
ipv4.dhcp.ranges ipv4.firewall ipv4.nat ipv4.nat.address ipv4.nat.order \
ipv4.routes ipv4.routing ipv6.address ipv6.dhcp ipv6.dhcp.expiry ipv6.dhcp.ranges \
More information about the lxc-devel
mailing list