Proxy transparente para el tráfico de IPv6 bajo Linux
Pregunta
Cuando se mantienen redes, a menudo es conveniente realizar un proxy transparente. Por proxy transparente me refiero a un proxy que "secuestra" las conexiones salientes y las ejecuta a través de un servicio local. Específicamente, ejecuto un firewall de Linux con squid configurado para que todas las conexiones tcp / ip desarrolladas en el puerto 80 sean procesadas por squid.
Esto se logra utilizando la tabla 'nat' de iptables, usando IPv4.
Pero iptables para IPv6 no tiene una tabla 'nat', por lo que no puedo usar la misma implementación. ¿Qué es una técnica que puedo usar para representar de forma transparente el tráfico para las conexiones IPv6?
Solución
Una forma viable de hacerlo es con la regla TPROXY en iptables, la documentación está disponible aquí:
- http://wiki.squid-cache.org/Features/Tproxy4#IPv6_Support
- http://www.mjmwired.net/kernel/Documentation/networking /tproxy.txt
Esto debería ser compatible con Squid (> = versión 3.2). Utilizando --enable-linux-netfilter
y la regla iptables -t mangle -j TPROXY
.
Otros consejos
iptables tiene un destino QUEUE, que puede usar para entregar paquetes al espacio de usuario. No estoy seguro, pero quizás se pueda implementar algo allí.
Más allá de eso, podría intentar añadir algo al kernel para realizar la redirección.
No puedes. Cita de squid-cache.org :
NAT simplemente no existe en IPv6. Por Diseño.
Dada esa transparencia / intercepción es en realidad una característica ganada por torciendo en secreto las rutas NAT dentro salir y volver sobre sí mismos. Es silencioso Lógico que un protocolo sin NAT no puede hacer la transparencia y intercepción de esa manera.
Aquí hay una implementación:
Otro tipo de truco feo:
- MARCAR todo el tráfico con iptables (parece que hay un objetivo CONNMARK para IPv6)
- enrutar todo el tráfico marcado al dispositivo tun
- haga NAT en el espacio de usuario en el daemon escuchando en el dispositivo tun
- ...
Escriba su propia implementación de NAT en la pila de IPv6.