Всем добрый день, попытаюсь описать подробно, но могу предоставить ещё другую информацию
Задача: настроить роутинг прокси сервера так, что бы по acl Прокси-сервер выводил в интернет через разные сетевые интерфейсы (
enp1s0
и
tun0
) в зависимости от домена веб-сайта или IP-адреса.
Схема:
Суть решения: узнал, что можно в
Сервер №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, что является правильным поведением.
А ещё, почему нельзя в настройках в Прокси-клиентах добавить исключение, потому что их много. А колличество исключений будет увеличиваться в будущем.