systemd-resolved namespacing

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




I'm not sure this is the right place to pose this question, nor that I'm asking the "right" question, so kindly direct me if I "have it all wrong."

Question:

Having looked at the "namespace" features such as those of `ip netns` and/or those available via `unshare` or even `systemd-nspawn` it seems there is a rather large hole in that DNS resolution and the associated caches cross namespace boundaries. I suppose this is a general problem faced by any system/node level caching service accessed by APIs from within namespaces.

Maybe I'm thinking about this wrong, but it would seem to me that network services such as the DNS cache should respect namespace boundaries. Otherwise, a container that has (for example) set an /etc/netns/othernamespace/resolv.conf pointing to a different DNS server than the node's main resolv.conf will receive cached responses from queries made outside its namespace.

Probably this is an issue that goes beyond systemd-resolved and should also be addressed in glibc's "nss" helpers such as nss-resolve and nss-dns and/or any associated caches.

Are there plans to address this issue? I'm assuming there's enough information about the context of a resolution request at the time systemd-resolved receives that request, for it to know the namespace into which it is vending its response? Perhaps this would not be the case for queries sent to the stub 127.0.0.53 address, but I imagine even this could at be dealt with by providing multiple stub responders on separate IPs that can be targeted appropriately from within each network namespace.

It's possible the "safe" solution is to turn of name resolution and other caches or to use a more complete container solution (e.g. a more complete virtual OS instance) and that pushing namespace support into the resolver is some kind of slippery slope -- but it seems like a clear and present (and common) need, if not danger.



Things I've read before posting this:

man 8 nsenter
man 8 ip-netns
man 8 systemd-resolved
man 1 systemd-nspawn
man nss-resolve
https://gist.github.com/zoilomora/f7d264cefbb589f3f1b1fc2cea2c844c

The motivating usecase:

client apps operating in a namespace, through a Wireguard VPN device with default routes and DNS via the far end should resolve names always as if the DNS server configured in the namespace's resolv.conf sourced the response.

Thanks!
Andrew


[Index of Archives]     [LARTC]     [Bugtraq]     [Yosemite Forum]     [Photo]

  Powered by Linux