Задать вопрос
@maksimwork1980

Squid: почему маршрутизация работает только для доменов?

Всем добрый день, попытаюсь описать подробно, но могу предоставить ещё другую информацию
Задача: настроить роутинг прокси сервера так, что бы по acl Прокси-сервер выводил в интернет через разные сетевые интерфейсы (enp1s0 и tun0) в зависимости от домена веб-сайта или IP-адреса.
Схема:
66bdda536fad3117063262.png

Суть решения: узнал, что можно в Сервер №1 вместо того, что бы перенаправлять на разные сетевые интерфейсы можно перенаправлять на другой Прокси-сервер. Для этого нужно Сервер №2 сделать как узел кеша Squid. А в конфигурации Сервер №1 добавить параметр cache_peer_access.

Что работает: прокси сервер полностью успешно направляет клиента на разные сетевые интерфейсы в зависимости от домена.
Что не работает: прокси сервер всегда направляет на сетевой интерфейс tun0, когда в него поступают IP, а не домены.

Конфигурационные файлы Squid:
Сервер №1

http_port 34004

acl all src 0.0.0.0/0.0.0.0
http_access allow all

forwarded_for delete

# IP, которые не должны идти через Сервер №2
acl novpn_ip4 localip 10.8.0.1/24

# Домены, которые не должны идти через Сервер №2
acl novpn_domain dstdomain .ru
acl novpn_domain dstdomain .vk.com
acl novpn_domain dstdomain .archlinux.org

cache_peer 10.8.1.1 parent 34004 0 default

never_direct allow !novpn_domain
never_direct allow !novpn_ip4


Сервер №2

http_port 10.8.1.1:34004
# forwarded_for delete
http_access allow all



Примечение: рассматривал возможность решить данную задачу не используя узел кеша Прокси-сервер на Сервер №2, а через tcp_outgoing_address. И используя не название сетевого интерфейса, а адрес, присвоенный сетевому интерфейсу (через ifconfg). Однако тогда вообще не получится выходить через Сервер №2, выдавая Timeout.
Пример использования tcp_outgoing_address

# Нет разницы что использовать - адрес "Сервер №2" (10.8.1.1) или адрес клиента OpenVPN на "Сервер №1" (10.8.1.2) - результат один.

tcp_outgoing_address 10.8.1.1 !novpn_ip4
tcp_outgoing_address 10.8.1.1 !novpn_domain


А правильность работы Прокси-сервера для доменов проверял через сайты 2ip.ru и whatismyipaddress.com. Через IP, которые они выдают я понял, что 1-ый выходит через eps1s0, а 2-ой через tun0, что является правильным поведением.

А ещё, почему нельзя в настройках в Прокси-клиентах добавить исключение, потому что их много. А колличество исключений будет увеличиваться в будущем.
  • Вопрос задан
  • 702 просмотра
Подписаться 4 Средний 11 комментариев
Решения вопроса 1
@asmelnik
По-моемому у вас бардак с правилами и недопонимание принципа работы...

Почему-то мне кажется, что например в наборе
never_direct allow !novpn_domain
never_direct allow !novpn_ip4

Второе правило просто никогда не сработает на acl novpn_ip4, т.к. уже первое выдаст для него allow.

С первого взгляда может показаться, что это эквивалент набора:
never_direct deny novpn_domain
never_direct deny novpn_ip4


Однако это не так.
в первом (вашем) варианте запрос вида http://1.2.3.4 уже на never_direct allow !novpn_domain получит allow и все.
Во втором варианте http://1.2.3.4 не попадает в acl novpn_domain, следовательно анализ пойдет дальше.

Попробуйте конфиг что-то вроде:
acl all src 0.0.0.0/0.0.0.0

# IP, которые не должны идти через Сервер №2
acl novpn_ip4 dst 10.8.0.1/24

# Домены, которые не должны идти через Сервер №2
acl novpn_domain dstdomain .ru
acl novpn_domain dstdomain .vk.com
acl novpn_domain dstdomain .archlinux.org

http_port 34004

forwarded_for delete

cache_peer 10.8.1.1 parent 34004 0 default

always_direct allow novpn_domain
always_direct allow novpn_ip4
never_direct allow all
http_access allow all
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
MaxLK
@MaxLK
сети, виртуализация, СХД...
Для каждой задачи свой инструмент. Вам нужен простой маршрутизатор, а не вот это все.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы