Proxy trasparente per traffico IPv6 sotto Linux
Domanda
Quando si mantengono le reti, è spesso consigliabile eseguire un proxy trasparente. Per proxy trasparente intendo un proxy che "dirotta" le connessioni in uscita e le esegue attraverso un servizio locale. In particolare, eseguo un firewall linux con squid configurato in modo tale che tutte le connessioni tcp / ip fornite sulla porta 80 siano inviate da squid.
Questo viene ottenuto usando la tabella 'nat' di iptables, usando IPv4.
Ma iptables per IPv6 non ha una tabella 'nat', quindi non posso usare la stessa implementazione. Qual è una tecnica che posso usare per proxy in modo trasparente il traffico per le connessioni IPv6?
Soluzione
Un modo fattibile per farlo è con la regola TPROXY in iptables, la documentazione è disponibile qui:
- http://wiki.squid-cache.org/Features/Tproxy4#IPv6_Support
- http://www.mjmwired.net/kernel/Documentation/networking /tproxy.txt
Questo dovrebbe essere supportato da Squid (> = versione 3.2). Usando --enable-linux-netfilter
e la regola iptables -t mangle -j TPROXY
.
Altri suggerimenti
iptables ha un target QUEUE, che puoi usare per consegnare i pacchetti nello spazio utenti. Non ne sono sicuro, ma forse qualcosa potrebbe essere implementato lì.
Oltre questo, potresti prendere una pugnalata per aggiungere qualcosa al kernel per fare il reindirizzamento.
Non puoi. Citando da squid-cache.org :
NAT semplicemente non esiste in IPv6. Di Design.
Data la trasparenza / intercettazione è in realtà una funzionalità acquisita da torcendo segretamente percorsi NAT all'interno avanti e indietro su se stessi. È abbastanza logico che un protocollo senza NAT non posso fare trasparenza e intercettazione in questo modo.
Ecco un'implementazione:
Un altro tipo di brutto hack:
- CONTROLLA tutto il traffico con iptables (sembra che ci sia target CONNMARK per IPv6)
- indirizza tutto il traffico segnalato al dispositivo di sintonizzazione
- esegui NAT nello spazio utente nel demone in ascolto sul dispositivo tun
- ...
Scrivi la tua implementazione di NAT nello stack IPv6.