skip to content

Why does RFC 8598 make an IKEv2 client ignore split-DNS attributes on a full tunnel and accept DNSSEC trust anchors only for whitelisted domains?

level: seniorimportance: nice to knowfreq 8%

answer

  1. who answers for a domain
  2. a trust anchor is a CA
  3. enterprise split tunnels only
  4. TLSA can override TLS trust
  5. root and TLDs are refused

basics

~20 s

Split-DNS attributes let the VPN gateway choose who answers for a domain, and a trust anchor lets it vouch for signatures. RFC 8598 confines both to enterprise split tunnels and whitelisted domains so a VPN provider cannot override public DNS or DNSSEC.

solid answer

~50 s

`INTERNAL_DNS_DOMAIN` redirects a domain's resolution to the gateway's resolvers, and `INTERNAL_DNSSEC_TA` installs a DS-style trust anchor for it: both are power over how the client sees names. RFC 8598 section 2 says that if the connection is not a split tunnel the client MUST ignore them, so a generic VPN service cannot override the public DNS hierarchy; a full tunnel should use `INTERNAL_IP4_DNS` and `INTERNAL_IP6_DNS` for every query instead. Section 6 treats an accepted trust anchor as the equivalent of installing an enterprise CA, because it can vouch for TLSA records and so override TLS certificate trust. Clients therefore MUST keep a whitelist of domains updated out of band, use no anchors when it is empty, and ignore the root and TLDs in it. Section 8 adds: ignore split DNS from anonymous or opportunistic peers, and never run two unrelated profiles claiming the same domain at once.

go deeper

for a junior

Recall that a VPN gateway can tell the client which resolver to use for certain domains, and that this only belongs on an organisation's split tunnel.

for a middle

Explain what INTERNAL_DNS_DOMAIN and INTERNAL_DNSSEC_TA each carry, and why the internal view of a signed public domain needs a trust anchor at all.

for a senior

Argue the client-side rules from the threat: a gateway that can name resolvers and trust anchors can rewrite names and, through TLSA, certificate trust. Name the whitelist, root and TLD rules.

for a principal

Treat VPN-pushed DNS policy as delegated trust equal to an enterprise CA, and decide what provisioning channel, not the tunnel itself, is allowed to grant it.

## Two attributes that change how a client sees names RFC 8598 (Standards Track, 2019) adds two IKEv2 configuration attributes that a VPN gateway can send in its `CFG_REPLY`: | Attribute | Type | Carries | Power it gives the gateway | |---|---|---|---| | `INTERNAL_DNS_DOMAIN` | 25 | a domain name, such as `corp.example.com` | decides which resolver answers every name under that domain | | `INTERNAL_DNSSEC_TA` | 26 | key tag, algorithm, digest type and digest of a DS record | decides which DNSSEC key the client trusts for that domain | The first exists so internal names resolve on internal servers; the second exists because an organisation often runs an internal view of a domain it also publishes, signed, on the internet. A validating client that sees the internal answers would otherwise find that the public, signed view "would prove the internal view does not exist" or expects a different key. Both attributes are useful, and both let whoever runs the gateway rewrite what the client believes about names. Much of RFC 8598 is about limiting that. ## Rule 1: only on split tunnels Section 2: "If the negotiated IPsec connection is not a split-tunnel configuration, the INTERNAL_DNS_DOMAIN and INTERNAL_DNSSEC_TA Configuration Payloads MUST be ignored." The reasoning is about who runs full tunnels: a consumer VPN service routes all of a user's traffic and has no business claiming that it is authoritative for public domains. Such deployments should send only `INTERNAL_IP4_DNS` and `INTERNAL_IP6_DNS`, so all queries go through the tunnel, rather than redirecting individual domains. Split DNS is an enterprise tool for internal names, and the RFC keeps it there. ## Rule 2: a trust anchor is a certificate authority Section 6 makes the comparison explicitly: installing an `INTERNAL_DNSSEC_TA` "can be seen as the equivalent of installing an Enterprise CA certificate". A DNSSEC trust anchor lets the gateway's resolvers produce answers the client will treat as authenticated, including records that carry keys or certificate data: - **TLSA** records (DANE) say which certificate to expect for a TLS service, so a forged one could override certificate trust; - **OPENPGPKEY**, **SMIMEA** and **IPSECKEY** records carry keys for mail encryption, signed mail and IPsec. So a compromised or malicious IKE server with an accepted trust anchor could redirect more than names. The client-side rules follow from that: 1. A client willing to accept trust anchors MUST use a **whitelist** of domains that can be updated out of band; with an empty whitelist it MUST NOT use any received anchor. 2. The root zone MUST be ignored if it appears in the whitelist, and so must TLDs and other generic public domains unless the entity really operates them. 3. Updates to the whitelist MUST come from explicit human action or a trusted provisioning system, never silently over IKE. 4. Anchors for subdomains of a whitelisted domain SHOULD be accepted; anchors for a name with no accepted `INTERNAL_DNS_DOMAIN` MUST be ignored. ## Rule 3: trust comes from IKE authentication Section 8 ties all of this to the IKE SA's authentication. If IKEv2 runs with an anonymous or unknown peer, as in opportunistic security, the client MUST ignore split-DNS configuration. If two connections claim the same domain, the client SHOULD use the information only when both belong to the same logical entity; two profiles from unrelated organisations both claiming, say, `.internal` MUST NOT be active at once. It also covers the case without an anchor: a client that validates a publicly signed domain and receives `INTERNAL_DNS_DOMAIN` for it with no `INTERNAL_DNSSEC_TA` needs to allow an insecure delegation, and SHOULD NOT accept one for a publicly signed domain it did not request. ## What the operator does with this - Ship the whitelist of internal domains with the VPN profile, through the same provisioning that installs it, so anchors received over IKE can be accepted. - Send `INTERNAL_DNSSEC_TA` when the internal view of a publicly signed domain differs from the public one; otherwise validating clients reject internal answers. - List every internal domain that internal records point into through CNAME, MX or SRV targets, so resolver choice and anchors cover them too. - Expect clients to refuse anchors for domains their provisioned whitelist lacks; RFC 8598 lets a client treat such an anchor as a signal to update the whitelist out of band, never as the update itself. - On a full tunnel, rely on the gateway's resolvers for everything instead of per-domain attributes, which the client will ignore anyway.

  • Why would validating clients reject internal answers for example.com if the gateway sends no INTERNAL_DNSSEC_TA?
    The public example.com is signed, so a validating resolver expects every answer under it to chain to the public key through the parent's DS record. An internal view signed with a different key, or unsigned, fails that check, and the public view can even prove the internal names do not exist. The trust anchor tells the client which key to trust for the internal view instead.
  • A user installs two VPN profiles from unrelated organisations, both pushing INTERNAL_DNS_DOMAIN for .internal. What does RFC 8598 require?
    When two IKE connections claim the same domain, the client should process the DNS information only if both belong to the same logical entity; otherwise it should refuse it and may warn the user. For profiles from unrelated organisations, RFC 8598 is firm: the two connections MUST NOT be active at the same time.

saying these in an interview costs you the question

  • Any authenticated IKEv2 gateway may redirect any domain it likes to its resolvers.
  • A trust anchor received over IKE affects DNS lookups only, never TLS certificate trust.
  • A full-tunnel VPN service should push INTERNAL_DNS_DOMAIN for every domain.
  • Whitelisting the root zone lets one trust anchor cover every internal domain.
  • Split-DNS settings from an unauthenticated opportunistic IKE peer are safe to apply.