Настройка IPv6 прокси на базе ndppd+3proxy в Debian

UPD:
Полностью автоматизированная система по настройке прокси, описанной в этом руководстве доступна по ссылке:
blog.vpsville.ru/blog/howto/149.html


Стоит задача настроить 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

Проверка версии ядра для настройки прокси IPv6

Шаг 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

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. Тюнинг ядра
Если вы планируете запускать большое число потоков, обязательно ознакомьтесь с инструкцией по тонкой настройке ядра
blog.vpsville.ru/blog/pro/137.html
Потребуется сервер с большим объемом памяти для запуска большого числа потоков из-за встроенных ограничений в ядро и модификация параметров vm.max_map_count и kernel.pid_max

P.S.
Так же желательно ознакомиться с другими статьями в нашем блоге которые затрагивают тематику использования ipv6 и настройки прокси:
Настройка IPv6 в Debian, Ubuntu
Обновление ядра Debian Wheezy
Подключение IPv6 в CentOS
Тюнинг ядра для IPv6 прокси

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

RSS свернуть / развернуть
На сервере farm, команда apt-get install gcc++ git make screen — не выполняется не может скачать необходимые файлы. prntscr.com/b6pbpx, пробовал на всех видах debian. Обычно до этого настраивал ipv6 прокси через centos 6, но там проблема в том, что ваши серверы только 300 проксей позволяет поднять =( иначе сервер падает =(
0
Если не скачивает пакеты, нужно обновить кеш пакетов командой apt-get update
После повторно запустить apt-get install gcc++ git make screen
По поводу «что ваши серверы только 300 проксей позволяет поднять» прочитайте и внесите изменения в ядро Linux как это описывается в шаге №8 или в статье blog.vpsville.ru/blog/pro/137.html
Удачи!!!
0
По поводу шага 5 в обновление ядра. А есть ли у вас возможность дать инструкцию которая подойдет под centos 6 или 7. Пробовал апгрейдить ядро на centos до последней версии (думаю что до последней, могу ошибаться), после обновления так и не принимает параметр net.ipv6.ip_nonlocal_bind = 1, выдает ошибку на эту строчку при применении изменений.
0
Специально для Вас подготовил инструкцию по обновлению ядра CentOS 6 и 7 до последней версии.
Ссылка blog.vpsville.ru/blog/howto/140.html
0
Благодарю! Надеюсь нам поможет и прокси больше не будут сыпаться.
0
Что-то я застрял на 5 шаге. Выбираю второй вариант, скрипт отрабатывает нормально, выводится список айпишников с портами. Затем пытаюсь создать конфигурационный файл и запустить 3proxy, но выдает ошибку «chmod: невозможно получить доступ к «3proxy.sh»: Нет такого файла или каталога», "-bash: ./3proxy.sh: Нет такого файла или каталога". В чем может быть проблема?
0
подскажите пожалуйста, поднял по ашим командам, но почему то при серфинге интернете заходя на некоторые сайты сервер просто падает. Например при заходе на instagram.com. Может какие то dns нужно прописать?
0
0
0
Дмитрий, попробуй пинговать ссылку на инсту с www
0
пингуется prntscr.com/bfrdpn. Но это все равно не решило основную проблему. Захожу на сайт www.instagram.com сервер все равно падает, пока не перезапущу 3прокси, никакие сайты открываться не будут =(
0
Как вы перезапускаете 3proxy?
0
chmod +x 3proxy.sh
./3proxy.sh > 3proxy.cfg
/root/3proxy/src/3proxy /root/3proxy.cfg
0
Последняя команда для запуска.
Посмотрите что в dmesg на сервере, может просто памяти не хватает и падает демон.
0
Аналогичная проблема. В dmesg показывает следующее:
[ 402.419677] 3proxy[4758]: segfault at 7f473e51fff0 ip 00007f477ccb868c sp 00007f473e51fff0 error 6 in libc-2.19.so[7f477cbb4000+1a2000]
[ 513.637460] 3proxy[5783]: segfault at 7f1312857ff0 ip 00007f1350fd168c sp 00007f1312857ff0 error 6 in libc-2.19.so[7f1350ecd000+1a2000]
[ 607.027307] 3proxy[5815]: segfault at 7f799bff8ff0 ip 00007f799b7dc68c sp 00007f799bff8ff0 error 6 in libc-2.19.so[7f799b6d8000+1a2000]
[ 709.002203] 3proxy[5840]: segfault at 7f2c1e871ff0 ip 00007f2c1e01568c sp 00007f2c1e871ff0 error 6 in libc-2.19.so[7f2c1df11000+1a2000]
0
Предоставьте нам пароль на support@vpsville.ru, разберемся.
0
А на 9ом шаге куда нужно эти строчки прописывать?
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.