dns-over-ping(8)

 Hemos oído hablar de DNS-over-HTTP, DNS-over-TLS, DNS-over-GRPC... y hoy traemos DNS-over-ping gracias a una pequeña herramienta de James Williams que básicamente nos permite resolver nombres directamente desde la herramienta ping estándar de inetutils/iptools.

Primero lanzamos levantamos el servidor:

$ git clone https://github.com/jamespwilliams/dns-over-ping.git
$ cd dns-over-ping
$ go build ./cmd/pingdns
$ sudo setcap cap_net_raw+ep pingdns
$ ./pingdns


Luego en otra shell ejecutamos:

$ ping localhost -4 -p "$(printf "hackplayers.com?" | xxd -p -c0)" -c1
PATTERN: 0x6861636b706c61796572732e636f6d3f
PING localhost (127.0.0.1) 56(84) bytes of data.
72 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=1669247245496 ms
wrong data byte #16 should be 0x68 but was 0xd8
#16    d8 ef 26 15 d8 ef 20 15 d8 ef 22 15 d8 ef 24 15 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
#48    0 0 0 0 0 0 0 0

--- localhost ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 1669247245496.409/1669247245496.409/1669247245496.409/0.000 ms


Y luego simplemente vemos la resolución en el wrong data del volcado en hexadecimal:

d8 ef 26 15
0xd8.0xef.0x26.0x15
216.239.38.21


Opcionalmente podemos evitar que nuestra máquina envíe sus propias respuestas ICMP a las solicitudes de eco ICMP entrantes:

# echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all

Limitaciones

- Solo funcionan resoluciones de registros A
- Los nombres pueden tener una longitud máxima de 15 bytes.
- Se pueden devolver como máximo 14 IPs

Ninguna de estas son limitaciones inherentes de ICMP, sino que son limitaciones de la herramienta de ping y su salida. Se podría hacer que DNS-over-ICMP funcione bastante bien (pero sería menos divertido).

Proyecto: https://github.com/jamespwilliams/dns-over-ping

Comentarios