Содержание
(£2.50 — это примерно 250 рублей)
Зачем?
Некоторое время назад, интернет в России был совершенно прозрачным. Мы всегда были уверены в том, что можем получить доступ к любому глобально доступному контенту именно в том виде, в котором он опубликован. Но в последнее время это совсем не так.
По разным причинам, провайдеры связи начали вмешиваться в наш трафик. Первым сильным ударом было закрытие закрытие rutracker.org Роскомнадзор’ом. Далее последовало еще множество важных сайтов. Из-за давления правообладателей, lostfilm.tv стал отказывать пользователям из России на попытки посмотреть «Игру Престолов». Некоторые операторы связи, например Билайн, пошли еще дальше, и стали модифицировать http трафик в своих корыстных целях. Сначала они просто добавляли на сайты свой безобидный информер, а потом переступили черту, и стали навязывать платные услуги.
Последней каплей стал Coub.com — по каким-то непрнятным мне причинам, все публичные DNS стали выдавать мне такие адреса серверов контента, которые не овечали на запросы. В результате — сервисом стало невозможно пользоваться. Одновременно с этим, любой другой компьютер из других сетей получал другие IP и нормально работал с сервисом.
Есть много разных решений, например использовать прокси, есть даже специальные дополнения для браузеров, которые проксируют только те сайты, на которые просто так из России не попасть. Но все это полумеры. Проблему нужно решать кардинально — выходить в интернет через сервер в свободной стране, посредством VPN.
Немного поискав на рынке предложения VPN, я пришел к мысли, что мне ничего не подходит: условия довольно ограниченные, цены высокие. Тогда я подумал насчет того, чтобы создать свой личный VPN сервис, взяв в аренду VDS (виртуальный сервер). И получилось вполне неплохо.
Выбираем VDS
Хостеров, кто предлагает услугу VDS — вагон и маленькая тележка. Но хочется чтобы много и дешево. В такой ситуации на помощь приходит lowendbox.com — это портал, что-то вроде дискаунтера, где разные компании предлагают свои VDS с большими скидками, зачастую дешевле, чем на официальном сайте, предоставляют промо-код или «секретную» ссылку.
Почти всегда число предложений ограничено, а качество услуг бываем достаточно посредственным, но есть другой портал: lowendstock.com. На нем собрана некоторая информация по различным предложениям. Отслеживается рейтинг и актуальность предложений.
Анализируя рынок я пришел к выводу, что самое дорогое у микро-VDS (а нам большой и не нужен) — это IP-адрес. Конечно, мне хотелось бы дать каждому своему устройству по белому IP, но цена на них совсем не приятная — около $1 за IP в месяц. Изредка можно найти $10 в год. Но чаще — дороже.
Немного поразмыслив решил? что не нужен мне внешний IP, а вот наличие IPv6 и неограниченный трафик — будет приятным бонусом. Так я набрел на ограниченное предложение от QuadHost (предложение могло уже кончиться).
В рамках «акции» можно урвать VPS в одной из стран Европы или в Америке, с небольшим кусочком Intel(R) Core(TM) i5-4690 CPU @ 3.50GHz, 128Мб RAM, 128Мб Swap, 5Гб достаточно быстрого диска, портом 100Мбит/сек, неограниченным трафиком, 20+1 портом за NAT и /64 блоком IPv6 адресов. Для наших задач — то что доктор прописал. Я выбрал сервер в городе Varna, Болгария, так как территориально он ближе всего к нам.
Можно рассмотреть еще одну интересную альтернативу — lowendspirit.
Подготовка
Есть несколько особенностей, которые нужно понимать.
Во первых, VPS находится за NAT. Т.е. один IP адрес на кучу разных VDS. После покупки приходит письмо, в котором все подробно расписано, если кратко:
- Вам называют локальный IP
- На основе локального IP вот по этой табличке узнаете свой реальный внешний IP
- Для SSH подключения используйте внешний адрес и порт вида [последние цифры IP]22
- Еще доступно 20 портов в диапазоне [последние цифры IP]01-[последние цифры IP]20
Второй вопрос — какую выбрать ОС? Сначала выбираем между Red Hat семейством и Debian. При всех равных, Debian более бережно относится к ресурсам, а их у нас и так мало. Далее из Debian семейства будет логичнее выбрать наиболее старый дистрибутив, из тех-же соображений. На момент написания статьи, Debian 6 уже не поддерживался, так что выбор пал на Debian 7. Использовать 64-битную ОС нет никакого смысла, это опять-таки пустая трата ресурсов, i386 будет достаточно.
Ну и третье — нужно, чтобы был tun интерфейс, необходимый для корректной работы OpenVPN. У QuadHost это запросто делается через WEB-консоль.
Почему OpenVPN? Легкий, быстрый, настраиваемое шифрование, клиент под все возможные ОС (в т.ч. и мобильные).
Установка и настройка OpenVPN
Вообще это дело нехитрое, и справится может любой более-менее администратор Linux.
Сначала, в любом случае, нужно обновить ключи репозиториев и установить сам openvpn:
# apt-get install debian-keyring debian-archive-keyring
# wget --no-check-certificate -O - https://swupdate.openvpn.net/repos/repo-public.gpg|apt-key add -
# echo "deb http://swupdate.openvpn.net/apt wheezy main" > /etc/apt/sources.list.d/swupdate.openvpn.net.list
# apt-get update
# apt-get upgrade
# apt-get install openvpn
Дальше можно или самому погрузиться в тонкости генерации ключей и настройки iptables, или положиться на очень удобный скрипт «OpenVPN road warrior installer» от Nyr.
wget https://git.io/vpn -O openvpn-install.sh && bash openvpn-install.sh
Достаточно закинуть на свой VPS этот скрипт, запустить его, ответить на несколько вопросов и все! Самые трудные из них: выбрать порт и указать внешний IP. Порт выбираете любой из выданного диапазона в 20 портов, IP смотрите по таблице из прошлой части статьи.
Неплохо об этом варианте описано в инструкции от QuadHost.
Первый запуск потребует некоторого времени на генерацию серверного ключа. После окончания будет сгенерирован один клиентский ключ. Чтобы сгенерировать еще один — достаточно снова запустить скрипт. На этот раз он отработает мгновенно.
Огромное удобство скрипта в том, что он собирает и настройки и все ключи в один единственный ovpn файл. Дальше его достаточно закинуть на ПК/Ноутбук/Телефон и все, просто работает.
Ресурсов хватает?
Хватает!)
Подключено 2 клиента: телефон и ПК. Использование памяти 4.6Мб (3.5%), средняя нагрузка на процессор — 0.1%, в пиках — 10%.
(IP специально не стал замазывать, так как он общий для всех var3-bg)
Бонус: IPv6
Этот вопрос я до конца еще не решил.
Вроде хостер дает /64 блок, но он не маршрутизируется на VPS.
Я условно разделил /64 блок на два /65. Второй использовал для OpenVPN. Но каждый новый IPv6 необходимо прописывать руками через WEB-консоль. В принципе, для личного маленького VPN-сервера это не страшно. Но в свете того, что /64 блок — это 18446744073709551616 адресов, прописывать каждый вручную как-то… невозможно. Может я чего-то не понимаю…
А технически все делается очень просто.
1. Сначала включаем маршрутизацию IPv6 в /etc/sysctl.conf
net.ipv6.conf.all.forwarding=1
Применяем
sysctl -p
2. На интерфейсе меняем в файле /etc/network/interfaces «/64» на «/65«, попутно комментируя все IPv6 адреса, прописанные автоматически при добавлении их через WEB-консоль.
То же самое делом через ifconfig
ifconfig venet0 del [ваш префикс]::1/64
ifconfig venet0 add [ваш префикс]::1/65
ifconfig venet0 del [ваш префикс]:8000::1001/128
3. И включаем поддержку в OpenVPN, добавив в файл /etc/openvpn/server.conf
server-ipv6 [ваш префикс]:8000::/65
push «route-ipv6 [ваш префикс]::/65»
push «route-ipv6 2000::/3»
push «dhcp-option DNS 2001:4860:4860::8888»
push «dhcp-option DNS 2001:4860:4860::8844»
4. Перезапускаем сервер. Клиентам ничего перенастраивать не нужно, достаточно только переподключиться.
/etc/init.d/openvpn restart
На момент написания статьи, у меня не работали мультикасты через внешний интерфейс, обнаружение соседей, трассировка до внешних IPv6 узлов состояла из одного единственного прямого прыжка.
UPD
Как оказалось, большинство lowend vps хостингов использует систему SolusVM, которая не поддерживает добавление маршрута на блок, только отдельные IP.
Вот ветка на формуе lowendspirit. Решение только одно — добавить несколько адресов через панель управления и освободить их внутри vps.
Сделал все по вашей инструкции, впн подключается, но на сайты не заходит, поможете разобраться?
Похоже, что не работает форфардинг пакетов.
Для начала я бы перезапустил машину, возможно настройка просто не применилась.
Потом я бы посмотрел /etc/sysctl.conf на наличие незакомментированных записей:
net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1
Ну и в конце концов нужно проверить iptables.
Перезапускаю при каждом изменении, весь интернет перерыл, возможно проще будет через мыло общаться, я готов уже помочь материально, лишь бы он наконец заработал. Соединение есть, интернета нет.
ipv6 я вообще не настраивал, это критично?
net.ipv4.ip_forward=1 была незакомментированная
Как проверить iptables? В /etc/rc.local:
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o venet0 -j SNAT --to-source внешний ип сервера
Хороший человек, хозяин данного блога мне помог настроить VPN, спасибо ему огромное, не знаю в чем была проблема, VPN подключался, а интернета не было, хотя все делал по инструкции.
Вот список команд, которые нужно было выполнить чтобы VPN начал пускать в интернет, надеюсь это сбережет много нервов:
apt-get update && apt-get -y upgrade && apt-get -y install dialog
dpkg-reconfigure locales
sysctl -w net.ipv4.ip_forward=1
reboot
wget --no-check-certificate -O - https://swupdate.openvpn.net/repos/repo-public.gpg|apt-key add -
echo "deb http://swupdate.openvpn.net/apt wheezy main" > /etc/apt/sources.list.d/swupdate.openvpn.net.list
wget --no-check-certificate https://git.io/vpn -O openvpn-install.sh && bash openvpn-install.sh
Еще возможно проблема была в том, что я все делал через терминал в macOS, а нужно было в линуксе выполнять все команды.
Еще при оформлении требуют ввести hostname и ns сервера, можете вводить любые данные, например: hostname: vps ns1: 12345 ns2: 54321