Стоит задача настроить http proxy с рандомной выдачей IPv6 адресов каждому пользователю.
Шаг 1. Подготавливаем сервер и обновляем ядро:
apt-get update
apt-get install gcc++ git make screen mc wget
После установки debian jessie8 установится с 3-м ядром, в котором нет требуемой опции bind().
Обновление ядра требуется для установки net.ipv6.ip_nonlocal_bind = 1 которую мы сделаем на следующем шаге.
Эта опция доступна начиная с ядра 4.3
Добавим бэкпорты в репозиторий
echo "deb http://ftp.debian.org/debian jessie-backports main" >> /etc/apt/sources.list
И выполним команду
apt-get update
Установим требуемое ядро.
apt-get -t jessie-backports --yes --force-yes install linux-image-amd64
Перезагрузим сервер
reboot
После перезагрузки проверяем, что ядро обновилось
uname -a
Шаг 2. Скачиваем ndppd
ndppd это NDP Proxy Daemon. Более подробно об этом протоколе можно почитать в этой статье или же на странице ndppd
cd ~
git clone https://anonscm.debian.org/cgit/collab-maint/ndppd.git
cd ~/ndppd
make all && make install
Создаем конфигурационный файл в любимом текстовом редакторе, например mcedt:
nano /root/ndppd/ndppd.conf
Конфигурация
route-ttl 30000
proxy eth0 {
router no
timeout 500
ttl 30000
rule 2a08:14c0:100:200::/64 {
static
}
}
Запускаем:
ndppd -d -c /root/ndppd/ndppd.conf
Шаг 3. На следующем этапе скачиваем и устанавливаем 3proxy
cd ~
git clone https://github.com/z3APA3A/3proxy.git
cd 3proxy/
make -f Makefile.Linux
Шаг 4. Создаем файл ip.list с нужным количеством ipv6 адресов сгенерированных в случайном порядке.
Для этого скачиваем скрипт генерации файла ip.list
Для сети с маской /48
wget http://blog.vpsville.ru/uploads/random-ipv6_48-address-generator.sh
Для сети с маской /64
wget http://blog.vpsville.ru/uploads/random-ipv6_64-address-generator.sh
В скрипте устанавливаем:
Количество ipv6 адресов которые нужно сгенерировать:
MAXCOUNT=1000
Префикс нашей сети
network=2a08:14c0:100:200
Устанавливаем права на выполнение
chmod +x random-ipv6_64-address-generator.sh
Генерируем список ipv6 адресов в файл ip.list
./random-ipv6_64-address-generator.sh > ip.list
Шаг 5. Создаем конфигурационный файл 3proxy.sh с помощью скрипта генерации конфигурационного файла 3proxy.
Прокси с одним пользователем и разные ipv6 адреса каждый на своем порте. Начиная с порта 30000 для каждого адреса из ip.list будет установлен свой порт.
Создаём конфигурационный файл
mcedit 3proxy.sh
Вставляем в открывшийся редактор приведенный ниже скрипт и меняем ipv4 адрес на адрес Вашего сервера.
Вставка из буфера осуществляется комбинацией shift+insert
#!/bin/bash
echo daemon
echo maxconn 100
echo nscache 65536
echo timeouts 1 5 30 60 180 1800 15 60
echo setgid 65535
echo setuid 65535
echo flush
echo auth strong
echo users admin:CL:pass
echo allow admin
port=30000
count=1
for i in `cat ip.list`; do
echo "proxy -6 -n -a -p$port -i185.118.66.204 -e$i"
((port+=1))
((count+=1))
if [ $count -eq 10001 ]; then
exit
fi
done
Сохраняем конфигурационный файл и запускаем 3proxy
chmod +x 3proxy.sh
./3proxy.sh > 3proxy.cfg
/root/3proxy/src/3proxy /root/3proxy/3proxy.cfg
Шаг 6.Изменения в конфигурацию ядра, файл /etc/sysctl.conf
Откроем файл /etc/sysctl.conf
mcedit /etc/sysctl.conf
Добавим строки в самый конец файла
net.ipv6.conf.eth0.proxy_ndp=1
net.ipv6.conf.all.proxy_ndp=1
net.ipv6.conf.default.forwarding=1
net.ipv6.conf.all.forwarding=1
net.ipv6.ip_nonlocal_bind = 1
Сохраняем, закрываем файл.
Применить изменения
sysctl -p
Шаг 7. Настройка сети
Добавить адрес на eth0
ip -6 addr add 2a08:14c0:100:200::2/64 dev eth0
Добавить маршрут по умолчанию на etho
ip -6 route add default via 2a08:14c0:100:200::1
И прикрепить нашу сеть к lo
ip -6 route add local 2a08:14c0:100:200::/64 dev lo
Все, прокси работает. Для проверки можно в браузере настроить работу с прокси
Адреса 185.118.66.204:30001-31000
Шаг 8. Добавление в автозагрузку
Файл /etc/rc.local приведите к виду
#!/bin/bash
ulimit -n 600000
ulimit -u 600000
/sbin/ip -6 addr add 2a08:14c0:100:200::2/64 dev eth0
/sbin/ip -6 route add default via 2a08:14c0:100:200::1
/sbin/ip -6 route add local 2a08:14c0:100:200::/64 dev lo
/root/ndppd/ndppd -d -c /root/ndppd/ndppd.conf
/root/3proxy/src/3proxy /root/3proxy/3proxy.cfg
exit 0
Дополнительно. Шаг 9. Тюнинг ядра
Если вы планируете запускать большое число потоков, обязательно ознакомьтесь с инструкцией по тонкой настройке ядра. Потребуется сервер с большим объемом памяти для запуска большого числа потоков из-за встроенных ограничений в ядро и модификация параметров vm.max_map_count и kernel.pid_max