ProxyChains-NG no crea un túnel. Precarga una biblioteca que sustituye las llamadas libc relacionadas con la red dentro del único programa que lanza, así que el límite es una llamada dentro de un proceso, no una ruta para todo el dispositivo. Esa distinción decide qué demuestra en realidad una prueba correcta. Un curl que funciona a través de la cadena confirma una sola llamada enganchada, no que la resolución de nombres, UDP o cada proceso hijo hayan seguido el mismo camino. La guía siguiente verifica la cobertura en tres pasos y después enumera qué no puede alcanzar el enganche.

Cómo llega la precarga hasta una conexión

Al arrancar, el lanzador coloca libproxychains dentro de LD_PRELOAD y luego ejecuta el programa objetivo. La biblioteca resuelve los símbolos reales de libc y los sustituye por sus propias versiones de funciones como connect y getaddrinfo. Las llamadas que pasan por esos símbolos se reescriben hacia el proxy SOCKS o HTTP del archivo de configuración. Las llamadas que toman otra ruta nunca encuentran el enganche, y por eso la garantía es por llamada y no por máquina.

Solo participan los programas enlazados dinámicamente, y los binarios setuid bajo ejecución segura ignoran por completo la precarga. Los hijos heredan el entorno, pero solo mientras el lanzador lo mantiene en su sitio.

Confirme que la biblioteca está cargada en ese proceso

Inicie la petición e inspeccione el proceso vivo en lugar de la consola que lo lanzó. El archivo maps muestra cada objeto compartido que está mapeado en el proceso en ese momento.

proxychains4 -q curl -sS --max-time 8 https://example.com/ -o /dev/null &
pgrep -a curl
grep libproxychains /proc/$(pgrep -n curl)/maps

Una coincidencia confirma que la biblioteca enganchada está presente, lo cual es necesario pero no suficiente. Un resultado vacío suele significar que inspeccionó otro proceso, por ejemplo un navegador que entregó la URL a una instancia iniciada antes del lanzador. Compruebe con ldd que el binario esté enlazado dinámicamente antes de perseguir cualquier otra cosa, porque una compilación estática no puede cargar la precarga en absoluto. Después lea la lista de proxies de la configuración que el lanzador usó de verdad, ya que una ruta obsoleta o un puerto cerrado producen un enganche que funciona sin una cadena que funcione.

Rastree las conexiones que salen del proceso

La presencia de la biblioteca no demuestra que cada llamada se haya reescrito, así que siga las llamadas al sistema. Ejecute una petición bajo el rastreador y lea adónde fueron realmente los sockets.

strace -f -e trace=connect -o /tmp/pc.trace proxychains4 -q curl -sS https://example.com/ -o /dev/null
grep -o "sin_port=htons([0-9]*)" /tmp/pc.trace | sort -u

El rastro debería mostrar solo conexiones hacia su extremo de proxy, con el puerto que coincida con la entrada del archivo de configuración. Si las direcciones de destino del sitio objetivo aparecen directamente en el rastro, esa llamada eludió el enganche, y ese es justo el hallazgo que buscaba. Compare los números de puerto con la lista de proxies en lugar de confiar en el nombre del archivo, porque una configuración sobrante de otro proyecto es una fuente habitual de acceso directo silencioso. Guarde el rastro para el registro de aceptación; tarda segundos y zanja discusiones sobre la cobertura.

Decida qué no puede cubrir el enganche

El proyecto proxychains-ng limita la redirección a TCP y advierte de que los scripts, los procesos en segundo plano y los módulos cargados pueden comportarse de forma distinta al programa principal. UDP e ICMP quedan fuera del mecanismo, así que todo lo que dependa de ellos necesita su propia ruta compatible. DNS sigue el ajuste proxy_dns y el comportamiento propio del resolutor de la aplicación, lo que significa que una petición HTTPS correcta no le dice nada sobre la resolución de nombres. Mantenga también la validación de certificados donde corresponde: llegar a un servidor a través de un proxy no es motivo para desactivar las comprobaciones de identidad.

Si el retroceso directo debe ser imposible, use una frontera de aplicación que controle el tráfico mismo, como un espacio de nombres de red, reglas de cortafuegos o una VPN, y manténgala separada del enganche de biblioteca. El enganche es una herramienta de compatibilidad para un programa concreto, no un kill switch. Anote el programa, el comando exacto, el puerto de proxy visto en el rastro y si DNS se resolvió de forma remota; esos cuatro hechos son la diferencia entre un alcance verificado y un alcance de esperanza.

Artículos relacionados