DNS sobre túnel SSH

DNS sobre túnel SSH

Quiero configurar mi sistema OSX de manera que todo el tráfico de la red se realice a través de un túnel SSH.

He escrito un pequeño script para este propósito y estos son los comandos que ejecuta:

# setup tunnel
ssh -fN -D 1080 -p 22 user@remote

# start up redsocks
sudo redsocks -c /tmp/redsocks.conf -p /tmp/redsocks.pid

# forward all tcp traffic to tunnel
sudo ipfw add 0010 \
    fwd 127.0.0.1,12345 \
    tcp from me \
    to any not dst-port 12345 \
           not dst-port 1080 \
           not dst-ip REMOTE_IP

Utilizo redsocks para crear un proxy http para mi túnel ssh (para poder reenviartodotráfico tcp a través de ipfw), redsocks.conf se ve así:

base {
    log_debug = on;
    log_info = on;
    log = "file:/tmp/redsocks.log";
    redirector = generic;
}
redsocks {
    local_ip = 127.0.0.1;
    local_port = 55660;
    ip = 127.0.0.1;
    port = 1080;
    type = socks4;
}

Todo parece funcionar hasta ahora, todo el tráfico TCP en mi sistema OSX se realiza a través del túnel ssh, pero el problema está en el tráfico UDP y por eso las consultas DNS no funcionan.

¿Cómo puedo hacer que DNS en mi máquina local funcione a través del túnel SSH?

Respuesta1

Su ipfw …línea sólo reenvía tráfico TCP. ¿Quizás agregar la siguiente línea?

sudo ipfw add 0011 fwd 127.0.0.1,12345 \
                   udp from me \
                   to any not dst-port 12345 \
                          not dst-port 1080 \
                          not dst-ip REMOTE_IP

También es una buena idea agregar set -x(para depurar) y set -e(para fallar inmediatamente si alguno de los comandos falla).

  • Generalmente se debería utilizar el término 'túnel SSH' para referirse a tun/ tapcon SSH.
  • El reenvío de puertos es una forma específica de tunelización, pero en este contexto debería denominarse únicamente "reenvío de puertos".
  • No utilice túneles SSH (como en -oTunnely -oTunnelDevice) excepto para trabajos rápidos ad hoc.
  • DNS puede utilizar TCP como transporte. No está restringido a UDP, aunque ese es elprivilegiadotransporte.

Respuesta2

Usarlanzadera¿en cambio? sshuttle afirma manejar DNS y TCP correctamente, sin tanta manipulación, solo la --dnsopción.

IME SOCKS parecía un poco viejo y poco querido. Y realmente no entiendo este uso de ipfw y redsocks.

Sin embargo, señalaría que SOCKS4 no admite la tunelización de DNS, por lo que no me sorprende que tengas problemas. Las versiones posteriores de SOCKS lo admiten, por lo que puedes consultarlo. Y aparentemente SSH puede soportar SOCKS5.

Respuesta3

Además de lo que ya estás usando, sSH permite tunelizar todo el tráfico IP, independientemente del protocolo de capa 4 empleado. Su servidor remoto debe tener PermitTunnel yesy el cliente debe solicitar un túnel usando la Tunneldirectiva. Luego podrá utilizar ese nuevo enlace como puerta de enlace predeterminada. Verinstrucciones detalladas para el túnel aquí.

información relacionada