Предположим, у сервера имеется несколько 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
Смотрите также:
- Введение в IPv6 адреса: как пользоваться и как исследовать сеть (часть 1)
- Введение в IPv6 адреса: как пользоваться и как исследовать сеть (часть 2)
Для решения указанной задачи содержимое файла /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
Связанные статьи:
- Как настроить Squid на использование IPv4 (100%)
- Как работает ACL в Squid (100%)
- Ошибка «Authentication helper program /usr/lib64/squid/basic_ncsa_auth: (2) No such file or directory» (РЕШЕНО) (100%)
- Как настроить HTTP Digest аутентификацию в Squid (95.2%)
- Как настроить работы прокси Squid с множеством пользователей (95.2%)
- IPv6 аналог для «arp -an» в IPv4 (RANDOM - 54.8%)