From 5faaed5b62d5ed88d8df2802c5ab4d3ab2eb755a Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Fri, 18 Nov 2022 16:52:01 +0100 Subject: [PATCH 1/2] resolved: use right conditionalization when setting unicast ifindex on UDP sockets --- src/resolve/resolved-dns-scope.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/resolve/resolved-dns-scope.c b/src/resolve/resolved-dns-scope.c index 852829569d..4f744499aa 100644 --- a/src/resolve/resolved-dns-scope.c +++ b/src/resolve/resolved-dns-scope.c @@ -424,7 +424,7 @@ static int dns_scope_socket( return r; } - if (s->link) { + if (ifindex != 0) { r = socket_set_unicast_if(fd, sa.sa.sa_family, ifindex); if (r < 0) return r; From 6e32414a66ff8dbcef233981a7066684d903ee9f Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Fri, 18 Nov 2022 16:52:06 +0100 Subject: [PATCH 2/2] resolved: when configuring 127.0.0.1 as per-interface DNS server, contact it via "lo" always ussually if you specify a DNS server on some interface then we'll use that interface to talk to it. Let's override this for localhost addresses, as they only really make sense on "lo". Fixes: #25397 --- src/resolve/resolved-dns-server.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/resolve/resolved-dns-server.c b/src/resolve/resolved-dns-server.c index 04a4f53ed0..8ff513fa33 100644 --- a/src/resolve/resolved-dns-server.c +++ b/src/resolve/resolved-dns-server.c @@ -648,6 +648,11 @@ int dns_server_adjust_opt(DnsServer *server, DnsPacket *packet, DnsServerFeature int dns_server_ifindex(const DnsServer *s) { assert(s); + /* For loopback addresses, go via the loopback interface, regardless which interface this is linked + * to. */ + if (in_addr_is_localhost(s->family, &s->address)) + return LOOPBACK_IFINDEX; + /* The link ifindex always takes precedence */ if (s->link) return s->link->ifindex;