Вопрос или проблема
Я хочу перенаправить все протоколы, tcp, udp, icmp и т.д. через все порты 1-65535 на прокси, работающий на моем локальном хосте 127.0.0.1:3128
Я могу установить глобальные правила прокси, но это будет только для http, https и ftp в /etc/environment
Я хочу, чтобы это было включено как для ipv4, так и для ipv6
У меня это уже работало с iptables, поэтому я знаю, что это возможно, просто не помню, как я это сделал
Я пробовал:
sudo iptables -t nat -A OUTPUT -p tcp --match multiport --dports 1:65535 -j DNAT --to-destination 127.0.0.1:3128
вместе с аналогичной командой для ip6tables с ipv6 локальным хостом на порту 3128
Это также было вместе с несколькими другими командами для udp и других протоколов
Я также пробовал настроить пересылку ipv4 и ipv6 в /etc/sysctl.conf
При всех моих попытках иногда пакеты выходят, но не приходит ничего, или возникают таймауты
Я пытался сделать это в течение нескольких часов, и ближе всего к ответу оказалось, что кто-то в комментарии сказал, что мне следует установить nginx в качестве обратного прокси, потому что это ‘правильный способ’ сделать это, но я не запускаю веб-сервер, я просто хочу, чтобы весь трафик проходил через мой локальный прокси
Ответ или решение
Для перенаправления всего трафика (включая все протоколы и порты) через SOCKS5-прокси, работающий на локальном хосте (127.0.0.1:3128), с использованием инструментов iptables
и ip6tables
, необходимо выполнить несколько шагов. Рассмотрим весь процесс подробно.
Общая Концепция
Первоначально важно понимать, что iptables
и ip6tables
предназначены в основном для работы с пакетами IP, и хотя вы можете настраивать NAT для TCP и UDP, ICMP-пакеты не могут быть перенаправлены таким образом. Однако, для большинства сценариев, включая HTTP(S) и другие протоколы, TCP и UDP решат вашу задачу.
Предварительная Подготовка
-
Убедитесь, что пакет
dante-server
(или другой SOCKS5-прокси) установлен и запущен на вашем локальном устройстве на порту 3128. Если у вас его нет, вы можете установить его с помощью:sudo apt-get install dante-server
-
Проверьте, что ваши правила iptables не блокируют локальный трафик. Вам может понадобиться временно сбросить свои правила или добавить новые, чтобы убедиться, что они не мешают локальному трафику.
Настройка iptables для IPv4
-
Перенаправление TCP и UDP трафика:
Чтобы перенаправить весь TCP и UDP трафик на ваш SOCKS5-прокси, используйте следующие команды:
# Для TCP sudo iptables -t nat -A OUTPUT -p tcp -m multiport --dports 1:65535 -j DNAT --to-destination 127.0.0.1:3128 # Для UDP sudo iptables -t nat -A OUTPUT -p udp -m multiport --dports 1:65535 -j DNAT --to-destination 127.0.0.1:3128
-
Не забудьте разрешить исходящие подключения к прокси-серверу:
sudo iptables -A OUTPUT -p tcp -d 127.0.0.1 --dport 3128 -j ACCEPT sudo iptables -A OUTPUT -p udp -d 127.0.0.1 --dport 3128 -j ACCEPT
Настройка ip6tables для IPv6
Аналогично для IPv6, используйте следующие команды:
# Для TCP
sudo ip6tables -t nat -A OUTPUT -p tcp -m multiport --dports 1:65535 -j DNAT --to-destination ::1:3128
# Для UDP
sudo ip6tables -t nat -A OUTPUT -p udp -m multiport --dports 1:65535 -j DNAT --to-destination ::1:3128
Проверка и Тестирование
После выполнения вышеуказанных команд рекомендуется протестировать, правильно ли перенаправляется трафик. Вы можете использовать утилиты вроде curl
, wget
или traceroute
, чтобы убедиться, что трафик проходит через прокси.
Важные Заметки
-
Настройки Sysctl: Убедитесь, что ваши настройки в
/etc/sysctl.conf
включают:net.ipv4.ip_forward = 1 net.ipv6.conf.all.forwarding = 1
Примените изменения с помощью:
sudo sysctl -p
-
Персистентность Правил: Чтобы ваши правила сохранялись после перезагрузки, вам может понадобится установить
iptables-persistent
или ручное добавление в сценарий инициализации системы. -
Безопасность: Убедитесь, что ваш прокси-сервер настроен безопасно и доступен только для локальных соединений.
Заключение
Используя вышеприведённые команды, вы сможете перенаправить весь трафик через локальный SOCKS5-прокси как для IPv4, так и для IPv6 с помощью iptables
и ip6tables
. Обязательно проводите тестирование и при необходимости корректируйте правила для достижения желаемых результатов. Сохраняйте хорошую практику в безопасности конфигурации сетевых правил.