Категории: LinuxСети и серверы

Как быстро поднять свой VPN сервер

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

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

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

Именно поэтому я настоятельно рекомендую не пользоваться разными популярным VPN сервисами в интернете, будь то платными или (что еще более опасно) бесплатными.

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

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

Важно: при заказе тарифа переключаем триггер на «Европа». Это влияет на то, где будет размещен ваш виртуальный сервер. Далее из списка выбираем операционную систему — CentOS 7 или Ubuntu 20.04, хотя Debian тоже поддерживается.

После оплаты происходит автоматическая конфигурация сервера, и в течение (обычно) 15 минут, он придет в готовое состояние. Для доступа к серверу вам будет доступна VNC консоль и SSH доступ. Пароль от рутового доступа придет в почту (его лучше сохранить где-то еще, а письмо удалить на случай взлома почты).

Второе, что потребуется SSH клиент. Я использую MobaXterm — простой и бесплатный клиент с множеством функций редактирования файлов и сохранения паролей в зашифрованном виде. После подключения под 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.

[Посещений: 781, из них сегодня: 1]

Свежие посты

Процессы зомби, демоны и сироты в Linux

Процессы и программы Программа в Unix — это последовательность исполняемых инструкций на диске. Вы можете…

12 октября 2024

Изучаем сертификаты, приватные ключи и keystore

Существует большое разнообразие форматов, в которых создаются сертификаты и приватные ключи для них. Часто они…

20 июля 2024

Восстановление доступа к Docker Hub

Все известно, что Докерхаб закрыл доступ для пользователей из санкционных стран, включая РФ и РБ.…

30 мая 2024

Как посмотреть сертификат хоста через командную строку

Зачастую бывает необходимо проверить, а какой SSL сертификат отдает тот или иной хост на определенном…

21 февраля 2024

Использование choco через прокси

Choco - лучший пакетный менеджер для Windows. Чтобы использовать его в корпоративной среде за прокси,…

21 февраля 2024

Обзор SSD диска XrayDisk

В России становится все больше малоизвестных китайских товаров, поэтому сегодня у нас на обзоре китайский…

3 декабря 2023