В наше время сети IPv6 набирают очень большую популярность, и множество провайдеров даёт в комплекте с VPS подсеть IPv6 бесплатно. Допустим, вам нужно очень много адресов прокси, и у вас есть сервер с одним публичным адресом IPv4 и подсетью адресов IPv6. Используя эти адреса и прокси сервер Squid, вы можете очень просто получить необходимое количество прокси-серверов IPv6 .

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

Теперь перезагрузите сеть:

systemctl restart network

Эти команды актауальны для CentOS 7, в Ubuntu всё будет выглядеть по другому. Далее настроим аутентификацию: для этого создаём файл пользователей и паролей с помощью команды htpasswd:

htpasswd /etc/squid/passwd

На запрос команды надо ввести логин пользователя и пароль для него. Только теперь мы можем перебраться к конфигурационному файлу Squid. Продолжаем настраивать аутентификацию, для этого добавьте в самом начале такие строки:

auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/passwd
auth_param basic children 5
auth_param basic realm losst proxy server
auth_param basic credentialsttl 2 hours
acl authusers proxy_auth REQUIRED

  • basic program — в первой строке мы загружаем модуль аутентификации /usr/lib64/squid/basic_ncsa_auth, в вашей системе путь к библиотеке может отличаться, вам надо найти правильный. В параметры модулю передаётся путь к файлу с паролями /etc/squid/passwd;
  • basic children — количество обрабатываемых за раз запросов;
  • basic realm — приветствие;
  • basic credentialsttl — время, на протяжении которого пользователь считается аутентифицированным.

В последней строке мы создаем acl-список для всех аутентифицированных пользователей и позже с помощью него разрешим им доступ к нашему прокси. Дальше удаляем заголовки, которые нарушают приватность:

request_header_access X-Forwarded-For deny all
request_header_access Via deny all
request_header_access Proxy deny all
request_header_access Cache-Control deny all

Запрещаем все исходящие подключения, не через IPv6, с помощью acl-списков:

dns_v4_first off
acl to_ipv6 dst ipv6
http_access deny !to_ipv6
http_access allow to_ipv6

Разрешаем подключение аутентифицированным пользователям:

http_access allow authusers

Запрещаем всем остальным:

http_access deny all

Теперь работа с портами. По умолчанию Squid запущен на порту 3128, эту строчку надо закомментировать:

#http_port 3128

Вместо неё добавим пять портов и каждому присвоим имя с помощью параметра name:

http_port ип_сервера:3128 name=port3128
http_port ип_сервера:3129 name=port3129
http_port ип_сервера:3130 name=port3130
http_port ип_сервера:3131 name=port3131
http_port ип_сервера:3132 name=port3132

Теперь для каждого порта создаем acl-список, а затем с помощью директивы outgoing_ip_address указываем, через какой IP будет передаваться запрос во вне:

acl from_port3128 myportname port3128
tcp_outgoing_address 2a00:1838:36:1ba::eac2 from_port3128
tcp_outgoing_address 2a00:1838:36:1ba::eac2 !all
acl from_port3129 myportname port3129
tcp_outgoing_address 2a00:1838:36:1ba::eac3 from_port3129
tcp_outgoing_address 2a00:1838:36:1ba::eac3 !all
acl from_port3130 myportname port3130
tcp_outgoing_address 2a00:1838:36:1ba::eac4 from_port3130
tcp_outgoing_address 2a00:1838:36:1ba::eac4 !all
acl from_port3131 myportname port3131
tcp_outgoing_address 2a00:1838:36:1ba::eac5 from_port3131
tcp_outgoing_address 2a00:1838:36:1ba::eac5 !all
acl from_port3131 myportname port3132
tcp_outgoing_address 2a00:1838:36:1ba::eac6 from_port3132
tcp_outgoing_address 2a00:1838:36:1ba::eac6 !all

Готово, сохраните конфигурационный файл, и проверьте его на ошибки с помощью команды:

squid -k parse

Перезапустите Squid:

sudo systemctl restart squid

И не забудьте добавить порты в исключение брэндмауэера:

sudo iptables -A INPUT -p tcp --match multiport --dports 3128:3132 -j ACCEPT

Теперь вы можете попытаться подключиться через ваш прокси, например, используя Firefox, и проверить, какой адрес используется. Обратите внимание, что сервис не может определить ваш адрес IPv6, а если бы мы не запретили запросы к IPv4, то любой ресурс мог бы подставить вам сайт, который не поддерживает IPv6. Squid просто взял бы его по IPv4, чем выдал бы свой адрес.

Выводы

В этой статье мы рассмотрели, как выполняется настройка Squid для IPv6 и использования нескольких исходящих IP-адресов. Конечно, решение описывать каждый порт и IP отдельно не очень удобно при больших объёмах, и что-то мне подсказывает, что можно решить задачу иначе, если вы знаете более эффективный способ, напишите в комментариях.

Источник: losst.ru