Wireguard + OpenWRT + Unbound = дивный новый мир VPN

для раздела Блоги
Начислено вознаграждение
Этот материал написан посетителем сайта, и за него начислено вознаграждение.

Современные вызовы требуют современных решений. Так как наши законодатели не перестают наступать на RU-сегмент Интернета, принимая один удушающий закон за другим, я решил поделиться с сообществом способом повышения собственной интернет-безопасности и шифрования любого вашего трафика: будь то стационарный ПК или мобильное устройство. Пройдя тем же путем, вы получите собственный VPN-сервер вне юрисдикции РФ, кэширующий DNS-резолвер и выход в Интернет по IPv6.

реклама

Небольшое отступление. Вдохновение для этой статьи я почерпнул из двух гайдов на Хабре: этом и этом. Рассказывать я также буду о перспективном туннеле в сети Интернет, современной замене GRE/IPIP с шифрованием. Сразу оговорюсь, что я не являюсь ни IT-специалистом, ни линуксоидом, поэтому описывать путь создания VPN буду максимально просто и подробно с инструкцией по шагам, для пользователей Windows-based ПК и телефона на Android.

Чем мне не понравился "точечный обход блокировок"? В настоящее время Роскомнадзором внесено в реестр уже более 2.1 млн ip-адресов. И с каждым днем эта цифра только растет. При формировании списков подсетей на сайте antifilter.download, в одной из подсетей может оказаться и ваш облачный провайдер (особенно активно блокируются адреса Amazon, Cloudflare и Hetzner DE). Обходить блокировки отдельных ip также нереалистично, т.к. это съест все ресурсы маршрутизатора. Поэтому я выбрал другой подход.

Что же такое Wireguard?

реклама

   

реклама

WireGuard - VPN-туннель нового поколения, созданный Джейсоном Доненфельдом (Jason A. Donenfeld), главой компании Edge Security. Проект разрабатывался как упрощенная и шустрая альтернатива OpenVPN и IPsec. Первая версия продукта содержала всего 4 тыс. строк кода. Для сравнения, в OpenVPN порядка 120 тыс. строк, а в IPSec - 420 тыс.

По словам разработчиков, WireGuard несложно настроить, а безопасность протокола достигается за счет проверенных криптографических алгоритмов: поточного шифра ChaCha20, криптографической имитовставки Poly1305 и собственных криптографических хеш-функций. Если вы используете OpenVPN, при смене сети: Wi-Fi, LTE или Ethernet нужно каждый раз переподключаться к VPN-серверу. Серверы WireGuard же не разрывают соединение, даже если пользователь получил новый IP-адреc. Стоит отметить также высокую скорость туннеля и низкие задержки, что является очень привлекательным для любителей он-лайн игр:

реклама

В чем преимущество собственного сервера?

Никогда до этого я не арендовал виртуальный частный сервер, но опыт использования услуг VPN-провайдеров имелся. И как правило VPN-туннели организованы по технологии OpenVPN (для стационарных ПК) и IPSec (для мобильных устройств): чаще всего порты и каналы, по которым вы подключаетесь к серверу, перегружены - вы делите их со множеством таких же клиентов. Но самое главное: нельзя быть до конца уверенным, не анализирует ли поставщик VPN-услуг ваш трафик? Арендованный виртуальный сервер дает вам полный контроль над вашим трафиком, шифрованный туннель защищает от атаки "человек-посередине" (т.н. MiTM), 

реклама


в качестве MITM может выступать и ваш провайдер

а собственный DNS-резолвер позволяет не только скрывать все DNS-запросы от вашего провайдера или оператора бесплатных сетей Wi-Fi (тем более это необходимо, если вы пользуетесь общественным Wi-Fi от ДИТ Москвы: на улицах или в парках), но и обеспечит нужную фильтрацию ненужного контента (например, позволит блокировать трекеры, телеметрию и прочую Wi-Fi-аналитику, и сделает это не только для сайтов в браузере, но и для мобильных приложений и операционной системы вообще). Более того, с этим решением вы сами получите мощный инструмент для анализа Интернет-активности приложений, установленных на собственном телефоне или компьютере.

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

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

С чего начать?

Для управления сервером вам нужно скачать и установить на свой компьютер два инструмента: Putty и WinSCP. Первый - это ssh-клиент для подключения удаленной консоли, второй - файловый менеджер. Также для организации домашней сети я рекомендую использовать маршрутизатор с операционной системой OpenWRT. Проверить, поддерживает ли ваш маршрутизатор данную операционную систему, можно на этой странице.

Перед созданием VPS я немного исследовал данный рынок и остановился на одном оптимальном решении - это немецкий хостер Hetzner. Он предлагает довольно производительное решение по доступной цене:

   

а также помесячную пост оплату через PayPal, упрощенную регистрацию (без идентификации по номеру мобильного телефона), удобную админку, и самое главное - в отличие от других провайдеров дешевых VPS - неограниченную полосу канала (например, можно столкнуться с ситуацией, когда провайдер декларирует подключение по порту в 1Гбит/сек (на сервер-ноду), скорость на VPS до 100 Мбит/сек, по факту же за 3 евро вы получите ограничение в 20 Мбит/сек). Пусть вас не пугает цифра в 20 ТБ трафика - во-первых, это очень много, во-вторых, учитывается только исходящий трафик (входящий трафик не учитывается от слова совсем). Локаций на выбор немного, большой разницы нет, я выбрал Финляндию.

И так, регистрируете аккаунт, и тут есть подводные камни.

   

Используйте максимально-аутентичные данные. Если город Москва, то и телефонный номер указывайте московский вместе с индексом. У Hetzner есть интеллектуальная система защиты, и, если вы выдадите совсем неправдоподобные данные (как у меня на картинке), вам предложат подтвердить свою личность, выслав скан паспорта (и проверка может занять довольно длительное время). Чтобы так не рисковать, указывайте настоящие данные (телефон, который они просят указать при регистрации - не мобильный).

Итак, пройдя успешно регистрацию, вы попадаете в облачную консоль:

где создаете новый проект. После этого заходите в созданный проект и добавляете  сервер. Операционную систему выбирайте Debian 10 (объяснять установку буду для нее):

В пункте 8 можете сразу прописать человеческое имя для сервера. Сервер создается в течение нескольких секунд, а на почту вам приходит письмо с учетными данными для подключения по ssh:

Далее вы запускаете Putty и в первом окне вводите присвоенный серверу ip-адрес (желательно сразу сохранить данные в профиль):

Порт оставляете стандартным (22), потом мы его изменим. Логиньтесь под root, и при первом входе вам предложат изменить пароль (вставлять текст в консоль легко правой кнопкой мыши):

Как настроить сервер?

Т.к. в блоге нет специального инструмента, чтобы выделять код, который необходимо вставлять в окно консоли, я буду каждую команду начинать с символов ~# (их вводить не надо).

Добавляем репозиторий Wireguard (в настоящее время Wireguard находится в процессе активной разработки, еще не выпущена стабильная версия, полностью прошедшая аудит - учитывайте это в работе):

~# echo "deb http://deb.debian.org/debian/ unstable main" > /etc/apt/sources.list.d/unstable-wireguard.list

~# printf 'Package: *\nPin: release a=unstable\nPin-Priority: 150\n' > /etc/apt/preferences.d/limit-unstable

~# apt update

Обновляем все установленные пакеты:

~# apt full-upgrade

(когда спросят, со всем соглашаетесь).

Настраиваем часовой пояс на сервере, чтобы правильно отображались логи:

~# apt install tzdata

~# dpkg-reconfigure tzdata

Устанавливаем заголовки ядра:

~# apt install linux-headers-$(uname -r)

Устанавливаем сервер Wireguard:

~# apt install wireguard-dkms wireguard-tools

Устанавливаете сервер Unbound:

~# apt install unbound unbound-host

Далее подключаетесь к серверу через WinSCP:

Идете в /etc/wireguard/ и здесь вам надо создать файл wg0.conf - это будет конфигурация вашего сервера wireguard. Структура файла следующая:

[Interface]

Address = 10.0.0.1/8

Address = fd42:42:42::1/48

SaveConfig = false

PrivateKey = <insert server_private_key>

PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; ip6tables -A FORWARD -i %i -j ACCEPT; ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; ip6tables -D FORWARD -i %i -j ACCEPT; ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

ListenPort = 51820


[Peer]

PublicKey = <insert router_client_public_key>

AllowedIPs = 10.0.0.0/16, fd42:42:42::/60

[Peer]

PublicKey = <insert mobile_client_public_key>

AllowedIPs = 10.50.0.1/32, fd42:42:42:ffff::1/128

Немного о структуре файла, она пригодится и в дальнейшем, т.к. структура настроек Wireguard одинакова на любой машине: раздел [Interface] - это то, что относится к Wireguard на данном текущем устройстве (сервере, в нашем случае). Address - это текущий адрес интерфейса, в нашем примере контролирует подсети /8 и /48. SaveConfig - опция, позволяющая записывать текущее состояние настроек в файл при отключении интерфейса. Допустим, мы добавили нового клиента на сервер командой:

~# wg set wg0 peer <new_client_public_key> allowed-ips <new_client_vpn_IP>/32

Чтобы сервер запомнил на будущее этого клиента и смог его подключить после перезагрузки, SaveConfig должна быть true. PrivateKey - приватный ключ интерфейса, он хранится всегда в файле конфигурации самого интерфейса, а обмен идет публичными ключами. PostUp и PostDown - это настройка Firewall, которые будут автоматически применяться и убираться при подключении и отключении интерфейса. ListenPort - порт, на котором сервер ждет новые подключения от клиентов. Можно назначить любой, 51820 - стандартный для Wireguard.

Раздел [Peer] - то, что относится к клиентам. Сюда можно вписывать новых клиентов, просто редактируя файл (но в этом случае параметр SaveConfig должен быть false). PublicKey - публичный ключ клиента, AllowedIPs - это адреса или подсети, с которых сервер будет ждать подключения конкретных клиентов. То есть, можно задать диапазон адресов, и если ip-адрес клиента с данным публичным ключом входит в этот диапазон, соединение устанавливается.

Будем полностью сидеть за NAT6, ничего страшного в этом нет. Пиров (клиентов сервера) здесь можно прописать сколько угодно, необходимо только каждому выдавать уникальный ip-адрес. В этом примере клиенту выдаются подсети /16 и /60, потому что это будет наш домашний маршрутизатор. Для мобильных клиентов можно выделять отдельные адреса.

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

PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; ip6tables -A FORWARD -i %i -j ACCEPT; ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; ip6tables -D FORWARD -i %i -j ACCEPT; ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

Здесь eth0 - это внешний сетевой интерфейс. У вас он может быть другим, например, ens4. Узнать название своего внешнего интерфейса можно командой: 

~# ifconfig

Необходимо сгенерировать два ключа для сервера: приватный и публичный. Делаем это в консоли при помощи следующей команды:

~# wg genkey | tee server_private_key | wg pubkey > server_public_key

Два файла с ключами будут лежать в папке /root/ Вам надо будет скопировать их себе на компьютер. Также создаете пару ключей для клиента (маршрутизатора):

~# wg genkey | tee router_client_private_key | wg pubkey > router_client_public_key

Их также копируете на свой компьютер. Затем открываете файл с приватным ключом сервера в Notepad++, копируете содержимое и вставляете на место приватного ключа в файл wg0.conf. Публичный ключ клиента (маршрутизатора или мобильного телефона) вставляете в соответствующий раздел Peer. Проверяйте, чтобы файл был в Unix-кодировке:

и сохраняете его в /etc/wireguard/wg0.conf.

Теперь настроим DNS

Основной файл с настройками Unbound лежит по адресу /etc/unbound/unbound.conf. Если его открыть, можно увидеть следующую запись:

include: "/etc/unbound/unbound.conf.d/*.conf"

Это значит, что файл конфигурации сборный, собирается из всех файлов, лежащих в папке unbound.conf.d и имеющих расширение .conf. Поэтому мы этот файл закрываем и заходим в папку /etc/unbound/unbound.conf.d/, удаляем содержащиеся здесь файлы и скачиваем вместо них следующий файл. После того, как скачали, его необходимо открыть и вписать в 29 и 30 строки (outgoing-interface) ipv4 и ipv6 адреса вашего сервера, которые ему выдал Hetzner. Адреса можно узнать, если ввести в консоль следующую команду:

~# ifconfig eth0

Смотрите строку inet и первую строку inet6.

Сохраняете файл, проверив кодировку. В консоли выполняете следующую команду

~# curl -o /etc/unbound/root.hints https://www.internic.net/domain/named.cache

Т.к. Unbound умеет обращаться к корневым серверам DNS, ему нужны их адреса, которые мы только что скачали. Чтобы этот файл оставался всегда свежим, его необходимо периодически обновлять. Делать это можно, если скачать данный файл, положить его в папку /etc/cron.daily/ и в свойствах сделать его исполняемым, отметив все X. Также его можно выполнить вручную:

~# /etc/cron.daily/root_hints

В папке cron.daily лежат скрипты, которые выполняются ежедневно по расписанию. Например, туда также можно положить следующий файл, проделав с ним те же манипуляции (это позволит реализовать полезные блокировки). Также разместил альтернативный файл для блокировки трекеров, malware-доменов, в котором можно использовать собственные черные и белые списки. Для этого необходимо предварительно создать в папке /etc/unbound два файла: myblacklist и mywhitelist и просто вписать в них нужные домены, начиная каждый с новой строки.

Unbound не создает автоматически файла логов, это надо сделать вручную:

~# touch /var/log/unbound.log

~# chown unbound:unbound /var/log/unbound.log

А в папку /etc/logrotate.d/ поместить файл для ежедневной архивации логов.

UPD. Тут выяснил, что для работы DNSSEC надо отдельно проделать следующее:

~# unbound-anchor -a /etc/unbound/root.key

~# chown unbound.unbound /etc/unbound/root.key

В итоге мы получим кэширующий DNS-резолвер, который будет отвечать на запросы всех наших клиентов в виртуальной сети, будет делать проверку правильности ответов через подпись DNSSEC с реализацией QNAME minimization, а также блокировать трекеры.

После копирования всех файлов поднимаем Wireguard-сервер:

~# wg-quick up wg0

Делаем его автозапуск после перезагрузки сервера:

~# systemctl enable wg-quick@wg0.service

Не забываем сделать из нашего сервера маршрутизатор. Для этого открываем файл /etc/sysctl.conf и прописываем там следующие строки (можно их просто раскомментировать):

net.ipv4.ip_forward=1

net.ipv6.conf.all.forwarding=1

net.ipv6.conf.all.disable_ipv6=0

net.ipv6.conf.default.forwarding=1

После чего вводим в терминале:

~# sysctl -p

и рестартуем Unbound:

~# /etc/init.d/unbound restart

В ответ должны получить: 

[ ok ] Restarting unbound (via systemctl): unbound.service.

Если не ок, делаем:

~# unbound-checkconf

И смотрим, на какие строки ругается.

Когда уже все настроете, для проверки DNSSEC можете зайти на сайт и нажать кнопочку, если палец вверх, значит все ок.

Также проверяем, что интерфейс wg0 поднялся и ждет клиентов:

~# wg

Перезагрузить интерфейс можно путем выключения и включения:

~# wg-quick down wg0

~# wg-quick up wg0

Что еще нужно настроить на сервере?

Правильно, Firewall. Но сперва сменим порт для ssh подключения, т.к. боты сразу начинают пытаться подобрать пароль по словарям. По умолчанию в Debian, впрочем как и в любом другом дистрибутиве Linux, ssh сервер работает на 22 порту. Изменим этот порт, к примеру, на 23331. Открываем файл настроек /etc/ssh/sshd_config и изменяем следующую строку:

Port 23331

Сохраняем и рестартуем службу:

~# service sshd restart

Проверяем изменения:

~# netstat -tulnp | grep ssh

tcp 0 0 0.0.0.0:23331 0.0.0.0:* LISTEN 925/sshd
tcp6 0 0 :::23331 :::* LISTEN 925/sshd

Следующее подключение будем производить по порту 23331.

iptables я трогать не буду, т.к. им очень легко лишить себя доступа к серверу. Установим UFW:

~# apt install ufw

Откроем файл настроек /etc/default/ufw и убедимся, что параметр 

IPV6=yes

выставлен в yes

Прописываем настройки по умолчанию:

~# ufw default deny incoming

~# ufw default allow outgoing

Открываем порты:

~# ufw allow 23331/tcp # порт для ssh

~# ufw allow 53 # порт для DNS

~# ufw allow 51820/udp # порт для Wireguard

Наконец включаем UFW:

~# ufw enable

И проверяем его работу:

~# ufw status

Настраиваем роутер на OpenWRT

В клиенте OpenWRT (наш маршрутизатор) мы будем использовать выборочную маршрутизацию трафика, выбирая между интерфейсами WAN и WG0. Для этого нам надо установить на наш маршрутизатор пакет VPN Policy-Based Routing. Чтобы его поставить, надо добавить сторонний репозиторий. В консоли маршрутизатора набираете:

~# opkg update

~# opkg install uclient-fetch libustream-mbedtls ca-bundle ca-certificates

~# echo -e -n 'untrusted comment: OpenWrt usign key of Stan Grishin\nRWR//HUXxMwMVnx7fESOKO7x8XoW4/dRidJPjt91hAAU2L59mYvHy0Fa\n' > /tmp/stangri-repo.pub && opkg-key add /tmp/stangri-repo.pub

~# ! grep -q 'stangri_repo' /etc/opkg/customfeeds.conf && echo 'src/gz stangri_repo https://raw.githubusercontent.com/stangri/openwrt-repo/master' >> /etc/opkg/customfeeds.conf

~# opkg update

Ставим сам пакет:

~# opkg install vpn-policy-routing luci-app-vpn-policy-routing

И пока откладываем его в сторону. В общем случае, ваш провайдер не дает вам доступ в Интернет по ipv6, поэтому интерфейс WAN6 можно смело удалить. 

Поставим Wireguard на роутер. Если у вас есть графический интерфейс Luci, можно просто набрать в консоли:

~# opkg update

~# opkg install luci-proto-wireguard

Либо пройти в графическом интерфейсе в System->Software, там надо нажать Update list (обновить список пакетов). После обновления в фильтре набрать wireguard и выбрать пакет luci-proto-wireguard.

Если у вас графического интерфейса нет, набираете в консоли:

~# opkg update

~# opkg install wireguard

В файле конфигурации /etc/config/network добавляем интерфейс wg0:

config interface 'wg0'    

option proto 'wireguard'     

option private_key '<insert router_private_key>'     

list addresses '10.0.0.2/16'

list addresses 'fd42:42:42::2/60'

config wireguard_wg0

option endpoint_host '<insert server_ip_address>'

option persistent_keepalive '25'

option endpoint_port '51820'

option public_key '<insert server_public_key>'

list allowed_ips '0.0.0.0/0'

list allowed_ips '::/0'

option route_allowed_ips '1'

Структура этой конфигурации аналогична той, что мы прописывали для сервера: раздел config interface 'wg0' отвечает за интерфейс Wireguard на маршрутизаторе, раздел config wireguard_wg0 отвечает за сервер, к которому подключаемся. В option private_key вписываем сгенерированный ранее приватный ключ для роутера. В list addresses указываем ip-адреса интерфейса (можно использовать подсети). В option endpoint_host вписываем ip-адрес нашего сервера, option persistent_keepalive отвечает за периодичность отправки handshake-сообщений для поддержания связи, option endpoint_port - порт сервера, где ждут нашего подключения, option public_key - публичный ключ сервера, list allowed_ips - это маршруты, по которым мы сможем ходить (0.0.0.0/0 - означает весь Интернет). Параметр option route_allowed_ips отвечает за маршрут по умолчанию для всего трафика роутера: если выставить 1 - это будет основной маршрут для  трафика вашей локальной сети, соответственно 0 - весь трафик пойдет через WAN-интерфейс.

В файл /etc/config/network также надо добавить альяс-интерфейс wg06 и два статических маршрута:

config interface 'wg06'     

option ifname '@wg0'     

option proto 'static'     

option ip6prefix 'fd42:42:42::2/60'

config route6     

option interface 'wg0'     

option target 'fd42:42:42::2/128'

config route6 

option interface 'wg0'     

option gateway 'fd42:42:42::2'     

option target '::/0'

Это нужно, чтобы перенести ipv6-префикс из нашего туннеля в локальную сеть и указать маршрут для ipv6-трафика. Интерфейс lan должен выглядеть так (приведите раздел lan к такому виду):

config interface 'lan'

    option type 'bridge'

    option ifname 'eth1.1'

    option proto 'static'

    option ipaddr '192.168.1.1'

    option netmask '255.255.255.0'    

    option ip6ifaceid 'eui64'

    list ip6class 'wg06'

    option ip6assign '64'

Теперь настроим Firewall. В файл /etc/config/firewall вносим следующие изменения. Правим зону wan, добавляя в нее сеть wg0:

config zone

    option name 'wan'

    option input 'REJECT'

    option output 'ACCEPT'

    option forward 'REJECT'

    option masq '1'

    option mtu_fix '1'

    option network 'wan wg0'

Зона wan6 будет выглядеть вот так:

config    zone

    option    name 'wan6'

    option    family 'ipv6'

    option    input 'ACCEPT'

    option    output 'ACCEPT'

    option    forward 'REJECT'

    option    network 'wg06'

И не забудем добавить форвардинг (оригинальный config forwarding должен остаться):

config  forwarding

    option dest 'lan'

    option src 'wan6'


config  forwarding

    option dest 'wan6'

    option src 'lan'

Настроим dnsmasq. В файле /etc/config/dhcp изменяем:

config dnsmasq

    option domainneeded '1'

    option localise_queries '1'

    option rebind_protection '0'

    option rebind_localhost '1'

    option noresolv '1'

    option allservers '1'

    list server '10.0.0.1#53'    

    list server '/pool.ntp.org/84.200.69.80'

    option local '/lan/'

    option domain 'lan'

    option expandhosts '1'

    option authoritative '1'

    option readethers '1'

    option cachesize '10000'

    option dnsforwardmax '300'

    option leasefile '/tmp/dhcp.leases'

    option localservice '1'

    option ednspacket_max '1232'

    option nonwildcard '0'

config dhcp 'lan'

.....

option ra_default '1'

.....

В раздел config dhcp 'lan' нужно добавить параметр option ra_default '1'. Далее через графический интерфейс (Luci) идем в Network->Interface->Wan, Edit->Advanced Settings->Убираем галочку из поля "Use DNS servers advertised by peer" и вписываем в качестве сервера DNS 127.0.0.1. 

После этого маршрутизатор можно перезагрузить.

После перезагрузки у вас должен подняться Wireguard-интерфейс и прописаться основной маршрут через него. Также вы начнете использовать собственный DNS-резолвер.

Если хотите иметь доступ к web-интерфейсу маршрутизатора из своей vpn-сети, пропишите в  Firewall Custom Rules (пользовательские правила Firewall) следующее правило:

iptables -A input_rule -i wg0 -p tcp --dport 80 -j ACCEPT

Теперь убедимся, что у нас установлены необходимые пакеты для маршрутизации трафика:

~# opkg update

~# opkg install ipset resolveip ip-full kmod-ipt-ipset iptables

Через luci заходим в vpn-policy-routing. В первом окне, в разделе configuration нужно выбрать Use ipset command вместо DNSMASQ ipset и включить поддержку ipv6.

UPD. Похоже, что в последней сборке автор vpn-policy-routing реализовал маршрутизацию ipv6-трафика по-умолчанию: то есть, если ipv6 префикс из туннеля - туда весь ipv6 трафик и пойдет. Поэтому настройки The ipset option for remote policies и IPv6 Support могут не оказывать никакого влияния.

В политиках создаем основное правило для подключения к нашему серверу: 

В Remote addresses нужно вписать адрес нашего сервера, в Interface выбрать WAN и написать имя для правила. Это нужно для того, чтобы все последующие подключения к удаленному серверу шли через обычный Интернет.

Основная "магия" находится в разделе DSCP Tagging. Здесь вы увидите два ваших интерфейса: WAN и WG0. WG0 у нас определен интерфейсом по умолчанию, куда идет весь трафик сети. Но нам не нужно весь трафик отправлять через туннель. Часть трафика мы будем заворачивать WAN, и это будет трафик конкретных приложений на компьютере (прежде всего это магазины игр). В данном разделе в WAN вписываем цифру 10. Жмем сверху кнопки Enable и Start.

DSCP Tagging - это инструмент QoS в Windows. Операционная система умеет помечать ip-пакеты определенных программ специальной меткой, и на основе этой метки мы будем заворачивать трафик в WAN-интерфейс. Запускаем gpedit.msc, идем Конфигурация компьютера > Конфигурация Windows >  QoS на основе политики > Правой кнопкой мыши - Создать новую политику. Каждая новая политика создается под конкретное приложение. Значение DSCP везде указываем 10.

 

В политиках необходимо указывать название exe-файла, который создает трафик в Интернет (иногда данный файл будет отличаться от файла, запускающего приложение, как, например, в случае с Uplay.exe), поэтому внимательно смотрите на Мониторинг ресурсов сети. При выборе протокола в общем случае указывается tcp и udp.

Проще всего проверить DSCP Tagging через Origin. Запускаете Origin без метки, и вам сразу предлагает выбрать местоположение в Финляндии и цены соответственно в евро. Запускаете с меткой - видите цены в рублях и русскоязычные дистрибутивы игр.

Если что-то не получилось, проверьте в реестре 

Do noy use NLA было в значении 1.

Мобильный клиент

Для телефона на Android скачиваем соответствующий клиент в официальном Маркете (iOS клиент скачиваем отсюда). Осталось только импортировать нужный профиль из заранее подготовленного файла конфига (текстовый файл с разрешением *.conf):

[Interface]

PrivateKey = <insert mobile_private_key>

Address = 10.50.0.1/32, fd42:42:42:ffff::1/128

DNS = 10.0.0.1, fd42:42:42::1

[Peer]

PublicKey = <insert server_public_key>

AllowedIPs = 0.0.0.0/0, ::/0

Endpoint = <insert server_ip_address>:51820

PersistentKeepalive=25

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

Подключаемся и убеждаемся, что доступ по ipv6 у нас есть:

В заключение

Что еще можно сделать? Например, можно отключить вход на сервер по паролю и логиниться по RSA-ключу. Можно поднять на сервере socks5-proxy (Dante) для работы uTorrent-клиента или MTProto-proxy для Telegram на работе. Как видите, собственный сервер дает массу возможностей.

Ну и самое интересное: а какую же скорость подключения обеспечивает туннель Wireguard?

На мобильном клиенте со скоростью тоже все в порядке:

Стоит отметить, что при настройке OpenVPN на роутере у меня никогда не получалось подняться выше 20 mbps. Если у вас возникли какие-то вопросы или комментарии, wellcome в личку, постараюсь помочь.

P.S. Замечательная песенка в тему.

P.P.S. Если хотите немного "разгонать" ваш шлюз, зайдите в файл настроек  /etc/default/ufw и найдите параметр DEFAULT_FORWARD_POLICY. Измените его значение с "DROP" на "ACCEPT". После этого перезагрузите Firewall:

~# ufw reload

 Продолжение данной статьи об использовании Shadowsocks читайте здесь.

Подпишитесь на наш канал в Яндекс.Дзен или telegram-канал @overclockers_news - это удобные способы следить за новыми материалами на сайте. С картинками, расширенными описаниями и без рекламы.
Оценитe материал
рейтинг: 4.9 из 5
голосов: 52

Комментарии Правила

Возможно вас заинтересует

Популярные новости

Сейчас обсуждают