zaLinux.ru

Настройка прокси-сервера Squid с множеством IP-адресов


Предположим, у сервера имеется несколько IP адресов — на одном интерфейсе или на разных — не важно.

Задача: использовать разные внешние IP адреса в зависимости от того, к какому порту прокси-сервера происходит обращение.

Итак, как вы можете видеть, на моём тестовом сервере 5 IP адресов, 1 IPv4 адрес и 4 IPv6 адресов:

  • 185.117.153.79
  • 2a02:f680:1:1100::3d5f
  • 2a02:f680:1:1100::3d60
  • 2a02:f680:1:1100::3d61
  • 2a02:f680:1:1100::3d62

Смотрите также:

Для решения указанной задачи содержимое файла /etc/squid/squid.conf следующее:

# Прокси-сервер будут использовать только локальные утилиты, поэтому разрешён доступ только от localhost.
# Если вы хотите подключаться к прокси-серверу из вне, то добавьте к разрешённым соответствующие IP,
# либо настройте аутентификацию по паролю.
http_access allow localhost
http_access deny all

# Для подключения к прокси-серверу выбраны порты 24000-24004, следующие строки включают прослушивание этих портов
# Обратите внимание, чтобы прокси-сервер не прослушивал внешние IP адреса, кроме порта, указан IP адрес localhost'а
http_port 127.0.0.1:24000
http_port 127.0.0.1:24001
http_port 127.0.0.1:24002
http_port 127.0.0.1:24003
http_port 127.0.0.1:24004

# Для каждого порта создаём acl с типом localport
acl portA localport 24000
acl portB localport 24001
acl portC localport 24002
acl portD localport 24003
acl portE localport 24004

# Связываем порты и IP адреса
tcp_outgoing_address 2a02:f680:1:1100::3d5f portA
tcp_outgoing_address 2a02:f680:1:1100::3d60 portB
tcp_outgoing_address 2a02:f680:1:1100::3d61 portC
tcp_outgoing_address 2a02:f680:1:1100::3d62 portD
tcp_outgoing_address 185.117.153.79 portE

# Нам не нужен кэш
cache deny all

При обращении к странице https://w-e-b.site/ip/ показывается IP адрес клиента, сделавшего запрос. Проверим:

curl https://w-e-b.site/ip/

Выведено:

2a02:f680:1:1100::3d61

Запомним это.


Теперь сделаем обращение к указанной странице через порты прокси-сервера от 24000 до 24003:

curl --proxy localhost:24000 https://w-e-b.site/ip/
curl --proxy localhost:24001 https://w-e-b.site/ip/
curl --proxy localhost:24002 https://w-e-b.site/ip/
curl --proxy localhost:24003 https://w-e-b.site/ip/

Как вы можете видеть, каждый раз выводится разный IPv6 адрес — в соответствии с тем, который из них привязан к определённому порту прокси-сервера.

Как вы думаете, какой IP адрес выведет следующая команда?

curl --proxy localhost:24004 https://w-e-b.site/ip/

Напомню, что к порту 24004 привязан IPv4 185.117.153.79. Если ваш ответ «185.117.153.79», то вы ошибаетесь.

Проверим:

curl --proxy localhost:24004 https://w-e-b.site/ip/

Выведено: 2a02:f680:1:1100::3d61 — это тот же самый IPv6 адрес, который используется по умолчанию.

Причина в том, что на самом деле привязка происходит не к IP адресу как к таковому, а к сетевому интерфейсу, на котором настроен данный IP. Кстати поэтому можно делать привязку и по MAC-адресу. При этом Squid работает следующим образом: если есть техническая возможность (локальный сервер и удалённый хост имеют IPv6 адреса), то по умолчанию используется именно IPv6.

У сайта w-e-b.site есть IPv4 и IPv6 адреса, Squid делает DNS запросы пытаясь получить A и AAAA записи, и если у удалённого хоста есть IPv6 адрес, то используется именно он. Чтобы подключиться к IPv6, сервер также должен использовать IPv6, поэтому выбирается один из доступных IPv6, а не привязанный к порту IPv4.


Смотрите также: Введение в DNS терминологию, компоненты и концепции

Можно ли было бы при привязке порта к IPv4 использовать именно IPv4 соединение даже если доступно IPv6? Технически для этого нет преград, но авторы Squid не сделали такой опции. Но вариант использовать IPv4 также есть, правда, не столь удобный.

Связанная статья: Как настроить Squid на использование IPv4

Смотрите также руководство по настройке Squid: Как создать и настроить прокси-сервер Squid


Рекомендуемые статьи:

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *