Прозрачный прокси-сервер для трафика IPv6 в Linux
Вопрос
При обслуживании сетей часто бывает целесообразно запустить прозрачный прокси-сервер.Под прозрачным прокси-сервером я подразумеваю прокси, который "перехватывает" исходящие соединения и запускает их через локальную службу.В частности, я запускаю брандмауэр Linux с squid, настроенный так, что все tcp / ip-соединения, подключенные к порту 80, проксируются squid.
Это достигается с помощью таблицы iptables 'nat', использующей IPv4.
Но iptables для IPv6 не имеет таблицы 'nat', поэтому я не могу использовать ту же реализацию.Какой метод я могу использовать для прозрачного прокси-трафика для соединений IPv6?
Решение
Жизнеспособный способ сделать это - использовать правило TPROXY в iptables, документация доступна здесь:
- http://wiki.squid-cache.org/Features/Tproxy4#IPv6_Support
- http://www.mjmwired.net/kernel/Documentation/networking/tproxy.txt
Это должен поддерживать Squid (>= версия 3.2).Используя --enable-linux-netfilter
и тот iptables -t mangle -j TPROXY
правило.
Другие советы
У iptables есть цель QUEUE, которую вы можете использовать для доставки пакетов в пользовательское пространство. Я не уверен, но, возможно, что-то может быть реализовано там.
После этого вы можете попытаться добавить что-то в ядро, чтобы выполнить перенаправление.
Ты не можешь. Цитата из squid-cache.org :
NAT просто не существует в IPv6. От Дизайн. Р>
Учитывая, что прозрачность / перехват на самом деле особенность, приобретенная тайно крутить NAT-маршруты внутри и обратно на себя. Это довольно логично, что протокол без NAT не может сделать прозрачность и перехват таким образом.
Вот реализация:
Еще один вид уродливого взлома:
- ПОМЕТЬТЕ весь трафик с помощью iptables (кажется, есть цель CONNMARK для IPv6)
- направляйте весь отмеченный трафик на устройство tun
- выполните NAT в пользовательском пространстве в демоне, прослушивающем устройство tun
- ...
Напишите свою собственную реализацию NAT в стеке IPv6.