Трафик Squid, туннелированный через VPN

Вопрос или проблема

Итак, что я пытаюсь сделать, это запустить прокси Squid на одной машине вместе с подключением к VPN. Я хочу, чтобы весь трафик, проходящий через прокси Squid, шёл через VPN для исходящих соединений. То есть: настольный ПК -> (прокси Squid -> VPN)

Цель заключается в том, чтобы позволить моему настольному ПК выбирать туннелирование через VPN. Так, чтобы сообщения мгновенной связи и подобные им, которые не нуждаются в работе через VPN, могли проходить через мой обычный трафик. Обычно я использовал бы SSH-прокси, но в настоящее время вынужден использовать VPN, чтобы получить доступ в офис, и прокси Squid показался мне самым простым вариантом для того, что мне нужно.

EDIT> Понял, что забыл указать, с какой проблемой я сталкиваюсь. Я настроил Squid и подтвердил, что он работает, но как только я подключаюсь к VPN, все запросы к Squid принимаются, но Squid не может сделать запрос через VPN. В результате клиент просто сидит без дела.

Я делаю что-то похожее. Я делаю это с помощью двух частей:

$ cat bin/openproxy
#!/bin/bash
ssh -C -o ServerAliveInterval=150 -L 3128:proxy:3128 gateway.company.com

Затем в Firefox я использую FoxyProxy, чтобы использовать localhost:3128 в качестве прокси для машин в *.company.com.

Это работает почти для всего, что мне нужно.

Это то, что вы пытаетесь сделать?

Ну, требуется дополнительная информация:

  1. войдите в вашу машину squid/vpn. Включите vpn. Можете ли вы достичь какого-либо внешнего адреса? Можете ли вы достичь конечной точки vpn и сети конечной точки vpn?

  2. Какой это тип vpn (openvpn/pptp и т.д.)?

  3. Как выглядит таблица маршрутизации до и после включения vpn? В Linux вы можете вывести таблицу маршрутизации с помощью /sbin/route -n или ip route show

Похоже, это проблема с маршрутизацией. Когда вы подключаетесь к VPN, шлюз по умолчанию может не изменяться автоматически.

Это может быть немного сложнее, чем изначальный вопрос, но я пытаюсь сделать то же самое с Squid, где у меня уже настроен VPN-туннель для трафика Transmission, а трафик администратора для http-интерфейса, который управляет Transmission, реверсивно проксируется через Nginx, чтобы он был доступен для хостов в той же локальной сети. Это подход «раздельного туннеля», потому что я хочу, чтобы только некоторые приложения использовали туннель, а другие — нет, поэтому у меня есть правила iptables, а также маршруты, чтобы облегчить это, перенаправляя трафик от пользователя Transmission и маршрутизируя этот трафик на tun1, виртуальный сетевой интерфейс VPN, но когда VPN отключен, никакой трафик не отправляется в качестве меры предосторожности.

Я хочу применить тот же принцип к прокси Squid на этом же хосте, но в этом случае добавить пользователя, от имени которого работает Squid (прокси), чтобы он вел себя аналогичным образом. Я полагаю, что могу реверсивно проксировать трафик от веб-браузеров, который будет отправлять прокси-трафик на Squid, который, среди прочего, отправит трафик через VPN-туннель. Я не совсем уверен, как это будет работать, но у меня есть несколько возможных подходов.

Для получения дополнительной информации о том, что я пытаюсь сделать, загляните в мой пост на Reddit. Я обновлю этот ответ (поскольку он фактически оставляет вас с большим количеством вопросов, чем ответов на данный момент), чтобы это действительно было полезно для кого-то, кто пытается сделать то же самое!

Ответ или решение

Настройка трафика Squid, туннелируемого через VPN

Краткая информация о проблеме: у вас есть Squid Proxy, запущенный на одной машине, рядом с VPN-соединением. Вы хотите, чтобы весь трафик, проходящий через Squid Proxy, использовал VPN для исходящего маршрута с вашей рабочей станции, позволяя при этом другим приложениям (например, мгновенным сообщениям) использовать обычные маршруты. Однако, после подключения к VPN, ваш Squid Proxy принимает запросы, но не может отправлять их через VPN.

1. Основные понятия и настройки

Для достижения вашей цели вам нужно выполнить несколько ключевых шагов:

  • Настройка VPN.
  • Настройка Squid Proxy.
  • Настройка маршрутизации трафика.

2. Проверка подключения и маршрутизации

Первоначально необходимо проверить, можете ли вы подключиться к внешним адресам после назначения VPN. Используйте следующие команды для проверки маршрутизации:

/sbin/route -n

или

ip route show

Это необходимо для того, чтобы понять, как изменяется таблица маршрутизации после подключения к VPN. Часто при соединении с VPN может не изменяться шлюз по умолчанию, что может блокировать трафик Squid Proxy.

3. Проблема маршрутизации

Если вы столкнулись с проблемой, когда Squid не может отправлять трафик через VPN, это скорее всего связано с настройками маршрутизации. Проверьте следующее:

  • Существует ли маршрут, направляющий трафик к целевым адресам через интерфейс VPN?
  • Обратите внимание на оригинальный маршрут до и после подключения к VPN.
Пример команды для настройки маршрутов

Возможно, вам нужно будет вручную добавить маршрут для Squid Proxy для выхода через интерфейс VPN. Используйте команду вида:

ip route add <цель> via <адрес VPN>

4. Использование IPTables для управления трафиком

Для того чтобы достичь цели "разделения туннеля", когда некоторые приложения используют VPN, а другие – обычный трафик, рекомендуется использовать правила IPTables. Например, чтобы направлять трафик от определенного пользователя Squid через VPN, вы можете установить правила следующего вида:

iptables -t mangle -A OUTPUT -p tcp --dport 80 -m owner --uid-owner proxy -j MARK --set-mark 1
ip rule add fwmark 1 table 100
ip route add default via <адрес VPN> dev <интерфейс VPN> table 100

5. Альтернативные решения и полезные инструменты

В вашем случае, чтобы облегчить управление состоянием VPN и вопросы маршрутизации, вы можете рассмотреть использование скриптов для автоматизации. Например, создайте исполняемый файл для подключения к прокси через SSH:

#!/bin/bash
ssh -C -o ServerAliveInterval=150 -L 3128:proxy:3128 gateway.company.com

Эта команда будет поддерживать соединение с вашим прокси-сервером, используя SSH туннелирование.

Заключение

Для достижения корректной работы вашего Squid Proxy в сочетании с VPN важно учитывать настройки маршрутизации и, при необходимости, управлять правилами IPTables. Убедитесь, что вы можете пинговать целевые адреса и проверьте, какие правила маршрутизации включены в момент подключения к VPN. Дополнительная автоматизация через скрипты может значительно упростить процесс.

Оцените материал
Добавить комментарий

Капча загружается...