Почему Squid может маршрутизировать только запросы к доменам, но не к IP-адресам?

Как я могу настроить роутинг прокси-сервера для направления трафика в Интернет через разные сетевые интерфейсы (например, `enp1s0` и `tun0`) с использованием ACL для определения выхода по домену веб-сайта или IP-адресу? Возможно, у вас есть какие-либо рекомендации или примеры кода для этой задачи?
  • 15 августа 2024 г. 10:43
Ответы на вопрос 2
Squid может маршрутизировать только запросы к доменам, потому что он работает на уровне приложения и основан на URL-адресах, которые содержат доменные имена. IP-адреса внутри URL-адресов могут быть переведены в доменные имена с использованием DNS. Без доменного имени Squid не может определить, куда направить запрос.

Для настройки роутинга прокси-сервера Squid для направления трафика в Интернет через разные сетевые интерфейсы с использованием ACL, вам нужно будет создать ACL для определения выхода по домену веб-сайта или IP-адресу, а затем настроить правила перенаправления трафика с учетом этих ACL.

Пример кода для настройки Squid для направления трафика через определенный сетевой интерфейс в зависимости от домена веб-сайта или IP-адреса:

```
acl enp1s0_acl src enp1s0
acl tun0_acl src tun0
acl domain_acl dstdomain .example.com
acl ip_acl dst 192.168.1.1

http_access allow enp1s0_acl domain_acl
http_access allow tun0_acl ip_acl

tcp_outgoing_address enp1s0 enp1s0_acl
tcp_outgoing_address tun0 tun0_acl
```

Этот код позволит маршрутизировать запросы, направленные на домен .example.com, через сетевой интерфейс enp1s0, и запросы к IP-адресу 192.168.1.1 через сетевой интерфейс tun0.

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

Почему-то мне кажется, что например в наборе
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
Похожие вопросы