Прокси IPv6 с ротацией по запросу

Данная инструкция является логическим продолжением настройки прокси рассмотренной в этом посте

1. Подготовка конфигурационного файла 3proxy

Добавляем в конфигурационный файл 3proxy параметр monitor который «на лету» будет отслеживать изменения в файле конфигурации 3proxy. Это требуется для того что бы не перезагружать 3proxy после каждого изменения исходящего IPv6 адреса.
В итоге конфигурационный файл 3proxy должен иметь вид:

daemon
maxconn 20000
nserver 127.0.0.1
nserver 8.8.8.8
nserver 1.1.1.1
nscache 65536
nscache6 65536
timeouts 1 5 30 60 180 1800 15 60
setgid 65534
setuid 65534
pidfile /home/3proxy/3proxy.pid
monitor /home/3proxy/3proxy.cfg
flush
auth strong
users admin:CL:pzfdkdjbxtx
allow admin
proxy -6 -s0 -n -a -p30000 -i185.246.116.100 -e2a07:14c0:1:041e:b9dd:67f7:6e14:477d
proxy -6 -s0 -n -a -p30001 -i185.246.116.100 -e2a07:14c0:1:041e:918b:f264:e3bc:2731
proxy -6 -s0 -n -a -p30002 -i185.246.116.100 -e2a07:14c0:1:041e:ab62:ba84:cd43:1877
proxy -6 -s0 -n -a -p30003 -i185.246.116.100 -e2a07:14c0:1:041e:083f:7bca:32d5:22fa
proxy -6 -s0 -n -a -p30004 -i185.246.116.100 -e2a07:14c0:1:041e:0fcd:64c3:2834:57c2
proxy -6 -s0 -n -a -p30005 -i185.246.116.100 -e2a07:14c0:1:041e:e8e5:e580:21a0:4330
proxy -6 -s0 -n -a -p30006 -i185.246.116.100 -e2a07:14c0:1:041e:09ef:6481:f748:7d56
proxy -6 -s0 -n -a -p30007 -i185.246.116.100 -e2a07:14c0:1:041e:ef0e:5a91:8b4d:4331
proxy -6 -s0 -n -a -p30008 -i185.246.116.100 -e2a07:14c0:1:041e:9933:13ce:990f:9004
proxy -6 -s0 -n -a -p30009 -i185.246.116.100 -e2a07:14c0:1:041e:8fe6:f169:9329:73ea


2. Установка и настройка Apache+PHP

выполняем команду:

apt install php -y


Это установит вебсервер Apache и PHP.

В файле конфигурации /etc/apache2/mods-available/dir.conf вносим изменения в строке DirectoryIndex что бы первым выполнялись файлы index.php
Итоговый вид:

<IfModule mod_dir.c>
        DirectoryIndex index.php index.cgi index.pl index.html index.xhtml index.htm
</IfModule>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet


Выполняем рестарт Apache

/etc/init.d/apache2 restart


3. Создаем bash скрипт генерации нового IPv6 адреса и его замены для указанного порта.

Данный скрипт помещаем в корневую директорию вебсервера Apache, путь /var/www/html/change.sh

#!/usr/local/bin/bash

array=( 1 2 3 4 5 6 7 8 9 0 a b c d e f )

network=2a07:14c0:1:041e # your ipv6 network prefix

rnd_ip_block ()
{
    a=${array[$RANDOM%16]}${array[$RANDOM%16]}${array[$RANDOM%16]}${array[$RANDOM%16]}
    b=${array[$RANDOM%16]}${array[$RANDOM%16]}${array[$RANDOM%16]}${array[$RANDOM%16]}
    c=${array[$RANDOM%16]}${array[$RANDOM%16]}${array[$RANDOM%16]}${array[$RANDOM%16]}
    d=${array[$RANDOM%16]}${array[$RANDOM%16]}${array[$RANDOM%16]}${array[$RANDOM%16]}
    echo $network:$a:$b:$c:$d
}

ex_ip=$(rnd_ip_block)
echo $ex_ip
echo $1

sed -i "/-p$1/c\\proxy -6 -s0 -n -a -p$1 -i185.246.116.100 -e$ex_ip" /home/3proxy/3proxy.cfg
((port+=1))


Данный скрипт генерирует адреса для сети IPv6 /64, внеся изменения в функцию rnd_ip_block можно настроить генерацию ipv6 адресов для сетей /48, /36, /32, /29

4. Создаем PHP скрипт выполнения запросов на смену IPv6 адреса для указанного порта.

Данный php скрип так же размещается в корне вебсервера, например /var/www/html/index.php

<?php
// Задайте пароль для доступа к скрипту.
$expectedPassword = 'pzfdkdjbxtx';

if (isset($_GET['password'])) {
    $enteredPassword = $_GET['password'];

    if ($enteredPassword === $expectedPassword) {
        echo "Доступ разрешен.";

if (isset($_GET['port']) ) {
    $port = $_GET['port'];
    echo "Порт: $port";

$bashScript = "/var/www/html/change.sh"; // Путь к вашему Bash скрипту

// Используем escapeshellarg() для безопасной передачи аргумента
$escapedArgument = escapeshellarg($port);

// Выполняем скрипт с передачей аргумента
$command = "bash $bashScript $escapedArgument";
$output = shell_exec($command);

// Выводим результат
echo "<pre>$output</pre>";
} else {
    echo "Не все параметры переданы в адресной строке.";
}
    } else {
        echo "Неверный пароль. Доступ запрещен.";
    }
} else {
    echo "Пароль не передан в адресной строке.";
}
?>


5. Проверяем работу прокси со сменой ipv6 по запросу.

Делать запросы на ротацию ipv6 на указанном порту можно в адресной строке браузера или с помощью curl.

В адресной строке выполняем запрос:
http://185.246.116.100/?password=pzfdkdjbxtx&port=30000

Итог:
Прокси IPv6 с ротацией по запросу

При каждом обновлении страницы внешний IPv6 будет меняться.

С помощью curl запроса:
curl -X GET http://185.246.116.100/?"password=pzfdkdjbxtx&port=30000"


Вывод:

C:\Windows\System32>curl -X GET http://185.246.116.100/?"password=pzfdkdjbxtx&port=30000"
Доступ разрешен.Порт: 30000<pre>2a07:14c0:1:041e:a0fb:26c4:0740:6a4c
30000
</pre>
C:\Windows\System32>curl --proxy 185.246.116.100:30000 -U admin:pzfdkdjbxtx https://blog.vpsville.ru/uploads/MyIP.php
2a07:14c0:1:41e:a0fb:26c4:740:6a4c
C:\Windows\System32>curl -X GET http://185.246.116.100/?"password=pzfdkdjbxtx&port=30000"
Доступ разрешен.Порт: 30000<pre>2a07:14c0:1:041e:7bdc:815c:ad0a:1bd3
30000
</pre>
C:\Windows\System32>curl --proxy 185.246.116.100:30000 -U admin:pzfdkdjbxtx https://blog.vpsville.ru/uploads/MyIP.php
2a07:14c0:1:41e:7bdc:815c:ad0a:1bd3


Первой командой делаем запрос на смену IPv6 адреса, второй проверяем изменение внешнего IPv6.

PS. Что бы все работало нужно поставить верные права для /home командой
chmod 777 -R /home

Комментарии (0)

RSS свернуть / развернуть
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.