Split DNS de systemd-resolved

Publicado el lun 09 agosto 2021

systemd-resolved (resolver de DNS por defecto desde Fedora 33) tiene una característica muy útil que permite hacer las llamadas de resolución DNS en forma adecuada a la(s) interfaces que puedan resolverla.

Por ejemplo si tienes tu conexión de red doméstica y además una conexión VPN systemd-resolver podría resolver todos los nombres de host que pertenezcan a example.com por la VPN y el resto con el DNS doméstico. Ésto nos permite evitar que el DNS corporativo nos bloquee conexiones con resoluciones falsas.

Si la red doméstica es enp6s0 y la VPN es tun0 entonces podemos:

  1. validar los DNS que se emplean en cada interfaz:

    $ resolvectl dns        
    Global: 8.8.8.8
    Link 2 (enp6s0): 1.1.1.1 8.8.8.8
    Link 3 (virbr0):
    Link 5 (tun0): 152.139.102.83 152.139.104.83
    
  2. validar los dominios declarados por la VPN para la resolución exclusiva:

    $ resolvectl domain
    Global:
    Link 2 (enp6s0):
    Link 3 (virbr0):
    Link 5 (tun0): example.com
    

    En el caso anterior, los nombres de dominio example.com serán resueltos empleando los DNS declarados para tun0.

Si tienes activo DNS sobre TLS (DNSOverTLS=yes en /etc/systemd/resolved.conf) y el DNS de la VPN no lo soporta entonces las resoluciones contra el DNS de la VPN no tendrán resultado. En esos casos debes indicar que no se use DNS sobre TLS para dicha interfaz: # resolvectl dnsovertls tun0 no

tags: fedora, dns