@@ -32,11 +32,12 @@ var (
3232 // ipLocalhost is a regex pattern for IPv4 or IPv6 loopback range.
3333 ipLocalhost = `((127\.([0-9]{1,3}\.){2}[0-9]{1,3})|(::1)$)`
3434
35- localhostNSRegexp = regexp .Delayed (`(?m)^nameserver\s+` + ipLocalhost + `\s*\n*` )
36- nsIPv6Regexp = regexp .Delayed (`(?m)^nameserver\s+` + ipv6Address + `\s*\n*` )
37- nsRegexp = regexp .Delayed (`^\s*nameserver\s*((` + ipv4Address + `)|(` + ipv6Address + `))\s*$` )
38- searchRegexp = regexp .Delayed (`^\s*search\s*(([^\s]+\s*)*)$` )
39- optionsRegexp = regexp .Delayed (`^\s*options\s*(([^\s]+\s*)*)$` )
35+ localhostNSRegexp = regexp .Delayed (`(?m)^nameserver\s+` + ipLocalhost + `\s*\n*` )
36+ nsIPv6Regexp = regexp .Delayed (`(?m)^nameserver\s+` + ipv6Address + `\s*\n*` )
37+ nsIPv6LinkLocalRegexp = regexp .Delayed (`(?m)^nameserver\s+` + ipv6Address + `%.*\s*\n*` )
38+ nsRegexp = regexp .Delayed (`^\s*nameserver\s*((` + ipv4Address + `)|(` + ipv6Address + `))\s*$` )
39+ searchRegexp = regexp .Delayed (`^\s*search\s*(([^\s]+\s*)*)$` )
40+ optionsRegexp = regexp .Delayed (`^\s*options\s*(([^\s]+\s*)*)$` )
4041)
4142
4243// filterResolvDNS cleans up the config in resolvConf. It has two main jobs:
@@ -54,6 +55,10 @@ func filterResolvDNS(resolvConf []byte, ipv6Enabled bool, netnsEnabled bool) []b
5455 // if IPv6 is not enabled, also clean out any IPv6 address nameserver
5556 if ! ipv6Enabled {
5657 cleanedResolvConf = nsIPv6Regexp .ReplaceAll (cleanedResolvConf , []byte {})
58+ } else {
59+ // If ipv6 is we still must remove any ipv6 link-local addresses as
60+ // the zone will never match the interface name or index in the container.
61+ cleanedResolvConf = nsIPv6LinkLocalRegexp .ReplaceAll (cleanedResolvConf , []byte {})
5762 }
5863 // if the resulting resolvConf has no more nameservers defined, add appropriate
5964 // default DNS servers for IPv4 and (optionally) IPv6
0 commit comments