[Pdns-users] SNAT and notify messages
Michael Hallager
michael at nettrust.nz
Thu Nov 17 22:48:33 UTC 2022
Are you using double NAT? If so then its likely to double your issues.
I recommend you fix your underlying issues now by getting all your
servers onto the same net block or net blocks which can route between
each other without NAT.
On 2022-11-18 11:37, ch via Pdns-users wrote:
> Hi PDNS users, I need your advice: (Note: there's a TL;DR: section at
> the bottom)
>
> We've set up three nameservers (ns1, ns2 and ns3) with two ip
> addresses each: an internal 10.x.x.x and an external public ip.
>
> Each server runs dnsdist, pdns_recursor, and two copies of
> pdns_server, like this:
>
> dnsdist -> pdns_recursor -> pdns_server [internal]
> \
> pdns_server [external]
>
> * Dnsdist is listening on 127.0.0.1, 10.x.x.x, and the external
> public ip, all on port 53.
> * pdns_recursor is listening on 127.0.0.2
> * pdns_server (internal) is listening on 127.0.0.3
> * pdns_server (external) is listening on 127.0.0.4
> * systemd_resolved is listening on 127.0.0.53 to satisfy local dns
> requests (Ubuntu 20.04 default configuration, with 127.0.0.2 as its
> resolver)
>
> Requests come in to dnsdist, and based on their source address they're
> forwarded to 127.0.0.2 (internal) or 127.0.0.4 (external).
> Pdns_recursor forwards requests to 127.0.0.3 (pdns_server internal)
> for zones listed in the forward zones file and recursively answers the
> rest.
>
> So far, so good; requests come in, replies go out, and external
> clients can't abuse our recursor or see our internal dns entries,
> yayyy!
>
> =====
>
> Here's where things start go off the rails:
>
> Our internal network grew "organically", and for reasons lost in the
> mists of time, we've got NAT gateways in our network, one of which is
> between ns3 and the other two name servers.
>
> * When a zone is updated on ns1, it sends a notify to ns3, but the
> source ip is changed by the NAT gateway.
> * The notify-acknowledgement is sent back through the NAT gateway
> and ns1 gets it, since the gateway expected the response.
> * Ns3 then sends an SOA request to the NAT gateway (as that's where
> the notify came from), but it's lost because it's not related to the
> previous conversation.
> * Pdns_recursor seems to eat Notify and AXFR messages, so we've told
> Dnsdist to direct those to 127.0.0.3
>
> We've temporarily worked around the problem by adding an iptables rule
> to ns3 that says 'redirect packets sent to "port 53 on the gateway" to
> ns1', and it works.
>
> ======
>
> Things are now going further off the rails here:
>
> * Now we've added a bunch of independent sub-zones on small name
> servers in different parts of our company, and they're going to be
> using ns1, ns2 and ns3 as their secondary servers, whichever is
> closest.
> * Notifies are going to be flying all over, and packets from some of
> them will be going through the same NAT gateway that ns1 uses to get
> to ns3.
> * Because of that, the iptables rule is going to mess things up, as
> it assumes outgoing DNS requests to the NAT gateway should really go
> to ns1's internal address.
>
> Is there a way to get the SOA request from ns3 to go to the right
> place using pdns or dnsdist?
>
> ======
>
> Now we're so far off the rails, we're in the middle of a cornfield:
>
> * The internal and external pdns servers have different zone files
> (internal/external ip addresses, some hosts not listed in the external
> zones).
> * We're using the internal ips on ns1,2,3 for transferring internal
> zones, and the external ips for external ones.
> * We're attempting to use NetmaskGroupRule [1] with src=false to
> have dnsdist direct requests internally/externally based on that.
> * The independent sub-zone name servers will be notifying the
> ns1,2,3 on both internal and external ips, and the NAT is going to
> mess up the source ips, iptables can't handle this.
>
> Can we use DoH/DoT to establish a TCP connection for the NOTIFY and
> reuse it for the SOA and AXFR? The NAT respects open TCP connections
> much more than UDP conversations.
>
> Should we manually add entries to the zone metadata to specify where
> zones are really hosted? I really wanted to use the auto-secondary
> feature, but sometimes we can't have nice things. :-/
>
> Oh god, please don't tell me I have to set up a VPN between all the
> name servers.... :-(
>
> Anyhow, I'd love to hear someone write a happy ending to this story.
>
> ======
>
> TL;DR: How do you get notifies + zone transfers to work when the
> source ip addresses of NOTIFY packets are unreliable?
>
> Thanks!
>
> --
> CH (ch-and-pdns-users at ch.pkts.ca)
>
> Links:
> ------
> [1] https://dnsdist.org/rules-actions.html#NetmaskGroupRule
> _______________________________________________
> Pdns-users mailing list
> Pdns-users at mailman.powerdns.com
> https://mailman.powerdns.com/mailman/listinfo/pdns-users
--
Net Trust Ltd
Internet Servers and Network Systems Administration
p: (06) 374 0880 | (09) 839 1000
m: 021 963 878
e: michael at nettrust.nz
w: nettrust.nz
More information about the Pdns-users
mailing list