Как быстро создать свой VPN сервер

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

Использование приватного VPN сервера имеет массу преимуществ:

  • ваши данные точно не перехватят владельцы публичных VPN сервисов, и они точно не утекут;
  • вы сами контролируете и распоряжаетесь полосой пропускания сервера, она ограничена только каналом, который предоставляет провайдер для вашего сервера в дата-центре;
  • ваш сервер никто не заблокирует, потому что вы его используете для личных целей, что не запрещено.

Что понадобится

Нам потребуется хостинг, где будет размещен ваш сервер заграницей, достаточно самого дешёвого VPS с одним ядром бодрого процессора и 1 ГБ оперативной памяти, а также полосы пропускания 200 Мбит.

Второе, что потребуется SSH клиент. После подключения под root я рекомендую добавить ssh ключи для доступа по ssh, после чего отключить доступ по паролю, а также сменить порт, на котором работает служба sshd. Конфигурирование ssh выходит за рамки данной статьи.

Третья составляющая — софт для VPN сервера. Как самый простой и быстрый вариант на данный момент я рекомендую использовать Wireguard.

Почему WireGuard?

Главное преимущество — проста развертывания при сохранении защищенности и скорости передачи шифрованных данных. Да, он быстрее L2TP и PPTP, и прочих аналогичных протоколов за счет меньших накладных расходов на шифрование. Кроме того, он очень стабилен.

VPN-подключение осуществляется путем простого обмена очень простыми публичными ключами — точно так же, как при обмене ключами SSH, — а все остальное прозрачно обрабатывается WireGuard. Он даже способен перемещаться между IP-адресами, как Mosh. Нет необходимости управлять соединениями, беспокоиться о состоянии, управлять демонами или беспокоиться о том, что находится под капотом.

WireGuard использует современную криптографию, такую ​​как структура протокола Noise, Curve25519, ChaCha20, Poly1305, BLAKE2, SipHash24, HKDF, а также безопасные доверенные конструкции. WireGuard был разработан с учетом простоты реализации. Его легко реализовать в нескольких строках кода и легко проверить на наличие уязвимостей в системе безопасности. По сравнению с такими гигантами, как Swan/IPsec или OpenVPN/OpenSSL, в которых аудит сотен строк кода является сложной задачей даже для больших групп экспертов по безопасности, WireGuard предназначен для всесторонней проверки рядовыми пользователями и администраторами.

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

Установка WireGuard

Установка и начальная конфигурация занимает не более 5 минут. Установить программу можно как вручную из пакетов, так и используя готовые скрипты. Рекомендую:

Установка скриптом занимает пару минут, я использую первый из двух. В конце работы скрипта создается первый клиент и его данные выводятся на экран. Есть вам надо создать других клиентов — запустите скрипт еще раз и выберете соответствующую опцию. Это ВСЕ!

Для каждого клиента генерируется QR код и conf файл. Все, что остается — установить клиентское приложение на ваше устройство и добавить конфигурацию через QR или conf.

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

Например, если вы не хотите, чтобы трафик локальной сети (предположим, что LAN у вас 192.168.1.0/24), то нужно задать разрешенные диапазоны в секции [Peer] в поле AllowedIPs как:

AllowedIPs = 0.0.0.0/1, 128.0.0.0/2, 192.0.0.0/9, 192.128.0.0/11, 192.160.0.0/13, 192.168.0.0/24, 192.168.2.0/23, 192.168.4.0/22, 192.168.8.0/21, 192.168.16.0/20, 192.168.32.0/19, 192.168.64.0/20, 192.168.80.0/21, 192.168.89.0/24, 192.168.90.0/23, 192.168.92.0/22, 192.168.96.0/19, 192.168.128.0/17, 192.169.0.0/16, 192.170.0.0/15, 192.172.0.0/14, 192.176.0.0/12, 192.192.0.0/10, 193.0.0.0/8, 194.0.0.0/7, 196.0.0.0/6, 200.0.0.0/5, 208.0.0.0/4, 224.0.0.0/3

Как видите, мы исключили этот диапазон из разрешенных.

Для облегчения задачи вычисления диапазонов вы можете воспользоваться калькулятором: https://www.procustodibus.com/blog/2021/03/wireguard-allowedips-calculator/

Также, вы возможно, захотите поменять IP адреса DNS серверов на свои, хотя и без этого все работает. Конфигурационный файл может лежать в любом месте.

Как это работает?

Данный раздел вы можете пропустить, он не относиться к базовой настройке, но может быть интересен администраторам серверов.

WireGuard работает, добавляя сетевой интерфейс (или несколько) с именем wg0 (или wg1, wg2, wg3 и т. д.). Затем этот сетевой интерфейс можно настроить обычным образом с помощью ifconfig или ip-address, с добавлением и удалением маршрутов для него с помощью route или ip-route и т. д. со всеми обычными сетевыми утилитами. Конкретные аспекты интерфейса WireGuard настраиваются с помощью утилиты wg. Этот интерфейс действует как туннельный интерфейс. По умолчанию, весь трафик проходит через него, forwarding включен.

Для получения и оправки пакетов используется протокол UDP и порт по умолчанию 51820, что ускоряет передачу. WireGuard ассоциирует IP адреса туннелей с публичными ключами и удаленными конечными точками. Каждый раз при получении пакета происходит проверка, какому пиру (клиенту) или конечной точке пакет относится и шифрование или декодирование пакета публичным ключом пира (интерфейс сам использует приватный ключ). Если IP адресу в конфигурации не сопоставлен никакой пир, то пакет дропается.

Таким образом, только используя пару правильного ключа и IP адреса, можно передать пакет. Минус заключается к том, что все клиенты вынуждены иметь статический приватный IP, прописанный в конфигурации, что неудобно, если у вас много клиентов.

Каждый раз сетевой интерфейс, декодируя пакет, проверяет поле AllowedIPs — если destination IP в пакете попадает в диапазон разрешенных IP назначения для данного пира, то пакет пересылается.

Вы также можете дополнительно управлять роутингом через таблицы маршрутизации. Можно поменять дефолтные маршруты путем удаления default eth0 и добавления нового default через wg0 (если у вас статическая маршрутизация) или добавления новых уточняющих маршрутов через wg0, которые будут иметь приоритет (такой вариант хорош для DHCP):

# ip route add 0.0.0.0/1 dev wg0
# ip route add 128.0.0.0/1 dev wg0
# ip route add 163.172.161.0/32 via 192.168.1.1 dev eth0

В данном примере мы перехватываем весь трафик на wg0, а маршрут до самого Wireguard хоста 163.172.161.0 идет через стандартный шлюз 192.168.1.1

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

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