Resolve unqualified domains in the weave.local domain.
This commit is contained in:
1 parent
8b061fd555
commit
361ed1b4a6
3 files changed
+28
-17
No files matched your search
+19
-5
@@ -129,7 +129,11 @@ func (d *DNSServer) handleLocal(defaultMaxResponseSize int) func(dns.ResponseWri
|
||||
return
|
||||
}
|
||||
|
||||
hostname := req.Question[0].Name
|
||||
hostname := dns.Fqdn(req.Question[0].Name)
|
||||
if strings.Count(hostname, ".") == 1 {
|
||||
hostname = hostname + d.domain
|
||||
}
|
||||
|
||||
addrs := d.ns.Lookup(hostname)
|
||||
|
||||
response := dns.Msg{}
|
||||
@@ -139,7 +143,7 @@ func (d *DNSServer) handleLocal(defaultMaxResponseSize int) func(dns.ResponseWri
|
||||
response.Answer = make([]dns.RR, len(addrs))
|
||||
|
||||
header := dns.RR_Header{
|
||||
Name: hostname,
|
||||
Name: req.Question[0].Name,
|
||||
Rrtype: dns.TypeA,
|
||||
Class: dns.ClassINET,
|
||||
Ttl: d.ttl,
|
||||
@@ -211,15 +215,25 @@ func (d *DNSServer) handleReverse(client *dns.Client, defaultMaxResponseSize int
|
||||
|
||||
func (d *DNSServer) handleRecursive(client *dns.Client, defaultMaxResponseSize int) func(dns.ResponseWriter, *dns.Msg) {
|
||||
return func(w dns.ResponseWriter, req *dns.Msg) {
|
||||
d.ns.debugf("recursive cdrequest: %+v", *req)
|
||||
d.ns.debugf("recursive request: %+v", *req)
|
||||
|
||||
// Resolve unqualified names locally
|
||||
if len(req.Question) == 1 && req.Question[0].Qtype == dns.TypeA {
|
||||
hostname := dns.Fqdn(req.Question[0].Name)
|
||||
if strings.Count(hostname, ".") == 1 {
|
||||
d.handleLocal(defaultMaxResponseSize)(w, req)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
for _, server := range d.upstream.Servers {
|
||||
response, _, err := client.Exchange(req, fmt.Sprintf("%s:%s", server, d.upstream.Port))
|
||||
if err != nil || response == nil {
|
||||
d.ns.debugf("network error trying %s (%s)", server, err)
|
||||
d.ns.debugf("error trying %s: %v", server, err)
|
||||
continue
|
||||
}
|
||||
if response.Rcode != dns.RcodeSuccess && !response.Authoritative {
|
||||
d.ns.debugf("network error trying %s (%s)", server, err)
|
||||
d.ns.debugf("non-authoritative error trying %s: %v", server, response.Rcode)
|
||||
continue
|
||||
}
|
||||
d.ns.debugf("response: %+v", response)
|
||||
|
||||
@@ -18,12 +18,12 @@ start_container_with_dns $HOST1 $C2/24 --name=c2 -h seetwo.$DOMAIN
|
||||
start_container_with_dns $HOST1 $C3/24 --name=c3 --dns-search=$DOMAIN
|
||||
container=$(start_container_with_dns $HOST1 $C4/24)
|
||||
|
||||
check() {
|
||||
assert "exec_on $HOST1 $1 getent hosts seeone | tr -s ' '" "$C1 $NAME"
|
||||
}
|
||||
assert_dns_a_record $HOST1 c2 seeone $C1 $NAME
|
||||
assert_dns_a_record $HOST1 c3 seeone $C1 $NAME
|
||||
assert_dns_a_record $HOST1 "$container" seeone $C1 $NAME
|
||||
|
||||
check c2
|
||||
check c3
|
||||
check "$container"
|
||||
# check that unqualified names are automatically qualified for broken resolvers
|
||||
weave_on $HOST1 dns-add $C1 c1 -h mysql.weave.local
|
||||
assert_dns_a_record $HOST1 c1 mysql $C1
|
||||
|
||||
end_suite
|
||||
+3
-6
@@ -43,10 +43,6 @@ CHECK_ETHWE_UP="grep ^1$ /sys/class/net/ethwe/carrier"
|
||||
|
||||
DOCKER_PORT=2375
|
||||
|
||||
WEAVEDNS_ARGS="--no-cache"
|
||||
[ -n "$DEBUG" ] && WEAVEDNS_ARGS="$WEAVEDNS_ARGS --log-level=debug"
|
||||
|
||||
|
||||
upload_executable() {
|
||||
host=$1
|
||||
file=$2
|
||||
@@ -182,9 +178,10 @@ assert_no_dns_record() {
|
||||
assert_raises "exec_on $host $container getent hosts $name" 2
|
||||
}
|
||||
|
||||
# assert_dns_a_record <host> <container> <name> <ip>
|
||||
# assert_dns_a_record <host> <container> <name> <ip> [<expected_name>]
|
||||
assert_dns_a_record() {
|
||||
assert "exec_on $1 $2 getent hosts $3 | tr -s ' '" "$4 $3"
|
||||
exp_name=${5:-$3}
|
||||
assert "exec_on $1 $2 getent hosts $3 | tr -s ' ' | cut -d ' ' -f 1,2" "$4 $exp_name"
|
||||
}
|
||||
|
||||
# assert_dns_ptr_record <host> <container> <name> <ip>
|
||||
|
||||
Reference in new issue
Block a user