Делаем свой VPN сервер для обхода блокировок

Зачем это нужно?

В нашей стране блокируются интернет ресурсы по двум основным мотивам: борьба с распространением пиратского контента и борьба с ресурсами, которые так или иначе не угодили власти. Если с первой причиной все боле-менее понятно, во многих цивилизованных странах борятся с пиратством, то вторая причина вызывает недоумение.

Есть много вариантов обхода блокировок, но самый распространенный на данный момент — VPN туннель в другую страну. Преимущество VPN по сравнению с другими способами заключается в том, что данная технология не только позволяет эффективно бороться с блокировками Роскомпозора, но и шифровать весь трафик от вашего компьютера, смартфона и т.д. до страны VPN сервера, таким образом делая невозможным сбор информации о вас через вашего местного провайдера, будь это домашний проводной интернет или оператор сотовой связи.

Чем больше ресурсов блокирует Роскомпозор, тем больше людей переходят на VPN. В интернете появилось куча VPN сервисов для обхода блокировок. Есть как платные VPN сервисы, так и бесплатные (со встроенной рекламой, ограниченным трафиком и пр). Вроде бы решение найдено и все успокоились, но не тут то было. Наша власть приняла закон по борьбе с анонимайзерами и VPN сервисами. Согласно закону, VPN провайдеры должны блокировать все запрещенные в нашей стране ресурсы наряду с обычными провайдерами. Получается, что если VPN сервис позволяет обходить блокировки, то он нарушает закон, а если VPN сервис не обходит блокировки — то он нафиг никому не нужен.

Средняя цена нормального VPN сервиса колеблется в пределах 300-500 руб в месяц. За эти деньги вы получаете туннель за границу, чаще всего можете выбирать между странами, куда будет уходить ваш трафик. Плюс вы получите еще несколько фич, нужность которых высосана из пальца. По факту, обычному пользователю не нужны все эти фичи, а чаще всего и выбор страны тоже не нужен. Кроме этого вам нужно доверять выбранному VPN провайдеру. Нет никакой гарантии, что он не сотрудничает с нашими органами.

Цель данного обзора — показать, как можно сделать свой VPN сервер за границей за те же 350-500 руб в месяц, без ограничений по трафику, с обходом всех блокировок. А если этот сервис раздать между близкими и друзьями, то цена на человека получится смешная, в районе 50 руб и менее. Бонусом на сервере можно сделать веб-прокси со строгой аутентификацией для тех устройств, которым VPN не подходит по каким-либо причинам.

Выбор страны и провайдера

VPN сервер не должен находиться географически слишком далеко, иначе трафик будет передаваться с ощутимыми задержками. Если вы живете в западной части России, то для размещения сервера страны западной Европы подойдут лучше всего. Далее можно посмотреть те страны, где хорошо развиты законы по защите частной жизни. На мой взгляд хорошо подходит Швейцария.

Далее нужно найти провайдера, который предоставляет услуги виртуальных частных серверов (VPS, VDS) за вменяемые деньги. Желательно, чтобы этот провайдер не оказывал услуги в России.

Для себя я нашел vps2day.com. У провайдера можно арендовать VPS за 5 евро в месяц в Германии, Швейцарии, Нидерландах, Великобритании, Швеции, США. За эти деньги вы получите сам виртуальный сервер с операционной системой на выбор, 1 IPv4, канал 100 Мбит без ограничения трафика. Для персонального VPN сервера более чем достаточно. Оплата возможна различными способами, включая криптовалюты.

После регистрации и входа в личный кабинет нужно сначала заполнить некоторые данные о себе в разделе Change Data. Без этого шага нельзя будет пополнить баланс. Корректность данных никто не проверяет 🙂

Затем можно пополнить лицевой счет в разделе Balance. После этого можно приступать к покупке виртуального сервера. Идем в меню AddServer, выбираем Ubuntu Server 18.04, страну, тарифный план и нажимаем кнопку Order server.

Минут через 10 на почту вам придет письмо с IP адресом сервера и учетными данными для доступа по SSH.

Настройка VPN сервера

Есть несколько технологий построения VPN. PPTP, L2TP, IPSec, OpenVPN, IKEv2. Наиболее прогрессивной технологией является IKEv2. Данный тип VPN обеспечивает высокий уровень безопасности, производительности и нативно поддерживается всеми современными операционными системами.

Если вы работаете на Windows, то для доступа к вашему виртуальному серверу по SSH вам понадобится, например, putty. А позже, для скачивания сертификата — WinSCP.

Итак, вы попали на консоль сервера. Первым делом нужно установить все необходимы компоненты. Для этого вводим команды:

apt update
apt install strongswan strongswan-pki

Далее нам нужно создать ряд сертификатов. Сделаем это в отдельном каталоге

mkdir -p ~/pki/{cacerts,certs,private}
chmod 700 ~/pki

И сгенерируем нужные для сервера сертификаты и ключи

ipsec pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/ca-key.pem

ipsec pki --self --ca --lifetime 3650 --in ~/pki/private/ca-key.pem --type rsa --dn "CN=VPN root CA" --outform pem > ~/pki/cacerts/ca-cert.pem

ipsec pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/server-key.pem

ipsec pki --pub --in ~/pki/private/server-key.pem --type rsa | ipsec pki --issue --lifetime 1825 --cacert ~/pki/cacerts/ca-cert.pem --cakey ~/pki/private/ca-key.pem --dn "CN=server_domain_or_IP" --san "server_domain_or_IP" --flag serverAuth --flag ikeIntermediate --outform pem >  ~/pki/certs/server-cert.pem

Фрагменты команд, выделенные красным нужно заменить на IP адрес вашего сервера. Или на домен, если вы заморочились с его настройкой до этого.

Теперь скопируем полученные сертификаты и ключи в основное хранилище

cp -r ~/pki/* /etc/ipsec.d/

Создадим файл конфигурации VPN сервера

mv /etc/ipsec.conf{,.original}
nano /etc/ipsec.conf

Содержание файла должно получиться следующим:

config setup
    charondebug="ike 1, knl 1, cfg 0"
    uniqueids=no

conn ikev2-vpn
    auto=add
    compress=no
    type=tunnel
    keyexchange=ikev2
    fragmentation=yes
    forceencaps=yes
    dpdaction=clear
    dpddelay=300s
    rekey=no
    left=%any
    leftid=@server_domain_or_IP
    leftcert=server-cert.pem
    leftsendcert=always
    leftsubnet=0.0.0.0/0
    right=%any
    rightid=%any
    rightauth=eap-mschapv2
    rightsourceip=10.10.10.0/24
    rightdns=8.8.8.8,8.8.4.4
    rightsendcert=never
    eap_identity=%identity

Если в параметр leftid (выделено красным) вы вписываете IP адрес вашего сервера, то символ @ не нужен. Если доменное имя, то символ @ обязателен.

Теперь создадим файл с логинами и паролями пользователей

nano /etc/ipsec.secrets

Содержание файла должно быть таким:

: RSA "server-key.pem"
user1 : EAP "password1"

Где вместо user1 и password1 нужные вам логин и пароль для пользователя. Другие пользователи добавляются ниже по аналогии.

Чтобы все изменения вступили в силу — перезагружаем VPN сервер

systemctl restart strongswan

Осталось настроить Firewall. Для начала разрешим SSH и включим защиту:

allow OpenSSH
sudo ufw enable

Добавим разрешения для IPSec трафика:

ufw allow 500,4500/udp

Добавим еще ряд правил в файл berofe.rules

nano /etc/ufw/before.rules

В файле по тексту перед секцией *filter добавим следующее:

*nat
-A POSTROUTING -s 10.10.10.0/24 -o eth0 -m policy --pol ipsec --dir out -j ACCEPT
-A POSTROUTING -s 10.10.10.0/24 -o eth0 -j MASQUERADE
COMMIT

*mangle
-A FORWARD --match policy --pol ipsec --dir in -s 10.10.10.0/24 -o eth0 -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1361:1536 -j TCPMSS --set-mss 1360
COMMIT

и после блока *filter добавим пару строк:

-A ufw-before-forward --match policy --pol ipsec --dir in --proto esp -s 10.10.10.0/24 -j ACCEPT
-A ufw-before-forward --match policy --pol ipsec --dir out --proto esp -d 10.10.10.0/24 -j ACCEPT

И в заключении нам нужно отредактировать ряд системных параметров. Открываем файл sysctl.conf

nano /etc/ufw/sysctl.conf

Ищем параметры и выставляем следующие значения:

net/ipv4/ip_forward=1
net/ipv4/conf/all/accept_redirects=0
net/ipv4/conf/all/send_redirects=0
net/ipv4/ip_no_pmtu_disc=1

Перезагружаем firewall

ufw disable
ufw enable

Подключение устройств

Первым делом нужно скачать с сервера сертификат, расположенный по пути /etc/ipsec.d/cacerts/ca-cert.pem

Из Windows это легко сделать с помощью WinSCP.

Затем сертификат добавляется на нужное вам устройство (компьютер, смартфон и т.д.), с которого будет осуществляться VPN подключение. На смартфон сертификат можно отправить по почте. В Windows сертификат необходимо установить в хранилище Доверенных центров сертификации.

Подключение с Windows 10

Заходим в Параметры, Сеть и Интернет

VPN , Добавить VPN-подключение

Указываем параметры подключения

Подключение с iOS

Вы уже переслали сертификат на устройство и установили его. Далее идем в Настройки, Основные, VPN, Добавить конфигурацию VPN.

Выбираем тип IKEv2, в описании можно указать понятное вам имя подключения. В поля Сервер и Удаленный ID вводим IP адрес вашего VPN сервера, поле Локальный ID оставляем пустым. Далее вводим логин и пароль.

Подключение с Mac OS

Сертификат импортируется двойным кликом по нему, затем в связке ключей в свойствах сертификата нужно установить уровень доверия для IPsec безопасности:

Далее в настройках сети содам новое подключение, VPN, IKEv2Указываем адрес VPN сервера и логин с паролем под кнопкой «Настройка аутентификации».

Подключение с Android

Вы уже импортировали сертификат в систему. Далее нужно установить приложение StrongSwan VPN Client (есть в Play маркете). Затем все настраивается по аналогии с остальными системами.

 

 

 

 

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*