El proyecto dns2tcp es una herramienta diseñada para encapsular conexiones TCP a través de tráfico DNS, facilitando la tunelización de red en entornos donde otras comunicaciones están restringidas. A continuación, se detalla su estructura de directorios y los pasos clave para su configuración y operación.
Estructura del Proyecto dns2tcp
La organización de los archivos y directorios de dns2tcp se presenta de la siguiente manera:
alex-sector/dns2tcp/
├── client/
│ ├── common/
│ └── man/
├── common/
├── man/
├── server/
│ ├── AUTHORS
│ ├── ChangeLog
│ ├── INSTALL
│ ├── LICENSE
│ ├── Makefile.am
│ ├── Makefile.in
│ ├── NEWS
│ ├── README
│ ├── README.md
│ ├── aclocal.m4
│ ├── config.guess
│ ├── config.h.in
│ ├── config.sub
│ ├── configure
│ ├── configure.in
│ ├── depcomp
│ ├── install-sh
│ ├── missing
│ ├── mkinstalldirs
│ └── server/
└── ...
Descripción de los Componentes Clave:
client/: Contiene el código fuente y la documentación para la aplicación cliente, responsable de iniciar los túneles desde el lado del usuario.common/: Aloja código y recursos compartidos que son utilizados tanto por el componente cliente como por el servidor.server/: Incluye el código fuente y la documentación del componente servidor, que es el encargado de procesar las solicitudes de túnel DNS.AUTHORS: Documento que lista a los autores y contribuidores del proyecto.ChangeLog: Registro detallado de los cambios y actualizaciones realizadas en el código a lo largo del tiempo.INSTALL: Proporciona instrucciones sobre cómo instalar el software.LICENSE: Información sobre la licencia bajo la cual se distribuye el proyecto.Makefile.am,Makefile.in: Archivos de configuración para el sistema de construcción (Make) que automatizan el proceso de compilación.NEWS: Anuncios y novedades importantes sobre el desarrollo del proyecto.README,README.md: Documentación principal que ofrece una visión general del proyecto y su funcionamiento.- Otros archivos como
configure,aclocal.m4, entre otros, son scripts esenciales para la preparación y compilación del entorno.
Inicialización del Servidor dns2tcp
Los ejecutables principales de dns2tcp se encuentran en el directorio server/. Los elementos clave para el arranque del servidor son:
dns2tcpd: Este es el binario principle del servidor. Al ejecutarlo, se inicia el servicio de retransmisión de tráfico TCP a través de DNS.dns2tcpdrc: Es el archivo de configuración dedicado al servidor, donde se definen todos los parámetros operativos y de seguridad.
Para poner en marcha el servidor dns2tcp, se invoca el ejecutable dns2tcpd, especificando la ruta al archivo de configuración con la opción -f:
dns2tcpd -f dns2tcpdrc
Archivos de Configuración de dns2tcp
La funcionalidad de dns2tcp se personaliza a través de dos archivos de configuración distintos: uno para el servidor y otro para el cliente.
Configuración del Servidor: dns2tcpdrc
Este archivo es fundamental para determinar el comportamiento del demonio de dns2tcp. A continuación, se muestra un ejemplo de su contenido junto con la descripción de cada directiva:
listen = x.x.x.x
port = 53
user = nobody
key = miclavesecreta
chroot = /var/empty/dns2tcp/
domain = tunel.ejemplo.com
resources = ssh:127.0.0.1:22 web:127.0.0.1:8080 rdp:10.0.0.5:3389
listen: Establece la dirección IP en la que el servidor dns2tcp escuchará las solicitudes entrantes de DNS.port: Define el puerto de escucha del servidor, siendo 53 el puerto estándar para el servicio DNS.user: Especifica el usuario del sistema bajo el cual se ejecutará el proceso del servidor, una práctica recomendada por seguridad para evitar privilegios de root innecesarios.key: Una clave pre-compartida (PSK) que actúa como mecanismo de autenticación simple entre el cliente y el servidor. Es crucial mantenerla segura y compartida únicamente entre las partes.chroot: Determina un directorio raíz para el proceso del servidor, una medida de seguridad que aísla el servicio de otras partes del sistema de archivos.domain: El dominio DNS que el servidor monitoreará y porcesará para las solicitudes de tunelización.resources: Una lista de servicios (recursos) que pueden ser accedidos a través del túnel. Cada recurso se define con el formatonombre_recurso:IP_destino:Puerto_destino, mapeando un servicio interno a un nombre accesible por el cliente.
Configuración del Cliente: dns2tcprc
El cliente dns2tcp necesita su propio archivo de configuración para establecer la conexión deseada con el servidor remoto. Un modelo de configuración típica es el siguiente:
domain = tunel.ejemplo.com
resource = web
local_port = 8080
debug_level = 1
key = miclavesecreta
server = 192.0.2.1
domain: El dominio DNS que el cliente utilizará para sus consultas y la comunicación del túnel. Este valor debe coincidir con el configurado en el servidor.resource: El nombre del recurso específico que el cliente desea acceder a través del túnel. Este nombre debe estar previamente definido en la configuración del servidor.local_port: El puerto en la máquina cliente donde se establecerá un proxy local para reenviar el tráfico al túnel. El usuario se conectará a este puerto para acceder al recurso remoto.debug_level: El nivel de detalle para los mensajes de depuración que generará el cliente, útil para la resolución de problemas.key: La misma clave pre-compartida configurada en el servidor, utilizada para autenticar la conexión cliente-servidor.server: La dirección IP o el nombre de host del servidor DNS público que es capaz de resolver las consultas de túnel hacia el servidor dns2tcp.