1. Установка и настройка VPN Wireguard топология Mesh

WireGuard: быстрый, современный и безопасный VPN-туннель


WireGuard ® - это чрезвычайно простой, но быстрый и современный VPN, в котором используется самая современная криптография . Он нацелен на то, чтобы быть быстрее , проще , компактнее и полезнее, чем IPsec, избегая при этом огромной головной боли. Он намерен быть значительно более производительным, чем OpenVPN. WireGuard разработан как VPN общего назначения для работы как на встроенных интерфейсах, так и на суперкомпьютерах, пригодный для многих различных ситуаций. Изначально выпущенный для ядра Linux, теперь он является кроссплатформенным (Windows, macOS, BSD, iOS, Android) и может широко развертываться. В настоящее время он интенсивно разрабатывается, но уже может считаться самым безопасным, простым в использовании и самым простым решением VPN в отрасли.

 

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

 

Проблема текущих VPN решений в том, что их тяжело правильно настроить, дорого обслуживать, а так же в них полно legacy кода сомнительного качества.

 

Несколько лет назад канадский специалист по информационной безопасности Jason A. Donenfeld решил, что хватит это терпеть, и начал работу над WireGuard. Сейчас WireGuard готовится к включению в состав ядра Linux, он даже получил похвалы от Линуса Торвальдса и в американском сенате.

 

Заявленные преимущества WireGuard над другими VPN решениями:

 

  • Простой в использовании.
  • Использует современную криптографию: Noise protocol framework, Curve25519, ChaCha20, Poly1305, BLAKE2, SipHash24, HKDF и т.д.
  • Компактный читаемый код, проще исследовать на уязвимости.
  • Высокая производительность.
  • Четкая и проработанная спецификация.

 

Неужели найдена серебрянная пуля? OpenVPN и IPSec пора закапывать? Я решил с этим разобраться, а заодно сделал скрипт для автоматической установки личного VPN сервера.


Принципы работы

 

Принципы работы можно описать примерно так:

 

  • Создается WireGuard интерфейс, ему назначается приватный ключ и IP адрес. Загружаются настройки других пиров: их публичные ключи, IP адреса и т.д.
  • Все IP пакеты, приходящие на WireGuard интерфейс инкапсулируются в UDP и безопасно доставляются другим пирам.
  • Клиенты задают публичный IP адрес сервера в настройках. Сервер автоматически узнает внешние адреса клиентов, когда от них приходят корректно аутентифицированные данные.
  • Сервер может менять публичный IP адрес не прерывая работы. При этом он отошлет оповещение подключенным клиентам и они обновят свою конфигурацию на лету.
  • Используется концепт маршрутизации Cryptokey Routing. WireGuard принимает и отправляет пакеты на основании публичного ключа пира. Когда сервер расшифровывает корректно аутентифицированный пакет, проверяется его src поле. Если оно соответствует с конфигурацией allowed-ips аутентифицированного пира, то пакет принимается интерфейсом WireGuard. При отправке исходящего пакета происходит соответственная процедура: берется dst поле пакета и на основании его выбирается соответсвующий пир, пакет подписывается своим ключом, шифруется ключом пира и отправляется на remote endpoint.

 

Вся основная логика WireGuard занимает менее 4 тысяч строк кода, тогда как OpenVPN и IPSec имеют сотни тысяч строк. Для поддержки современных криптоалгоритмов предлагается включить в состав ядра Linux новый криптографический API Zinc. В данный момент идет обсуждение, насколько это удачная идея.

 

Существует несколько основных типов топологий сетей:

  1. Это так называемая "Общая  шина" ее частным случаем применительно к VPN и WireGuard "Point-to-Point". Точка - точка.

  2. Наиболее часто используемой топологией является "Star". Она же звезда. Когда все хосты подключены к единому центру.

  3. Топология "Mesh" это комбинированный вариант двух предыдущих, сочетающий в себе их достоинства.  

 

В данном примере будет рассмотрен способ построения сети VPN c помощью ПО  WireGuard из трех серверов по топологии "Mesh".

 

Построение распределенной VPN сети на базе Check Point. Несколько типовых  сценариев / Блог компании TS Solution / Хабр

 

 

Установите на вашу ОС специальное ПО, если у вас  Ubuntu/Debian, то используйте следующие команды:

Обновляемся и устанавливаем wireguard:

apt update
apt upgrade
apt install wireguard

Если у вас старая версия дебиана то возможно вам помежет команда:

sudo apt-get install linux-headers-$(uname -r|sed 's/[^-]*-[^-]*-//')

Можем перезагрузиться:

shutdown -r now

Создаем ключи на всех серверах:

umask 077
wg genkey | tee privatekey | wg pubkey > publickey

 

Создаем конфигурационный файл с настройками на Server1:

nano /etc/wireguard/wg0.conf
[Interface]
PrivateKey = < Server1 private key >
Address = 10.0.0.1/32
ListenPort = 51820
[Peer]
PublicKey = < Server2 public key >
AllowedIPs = 10.0.0.2/32
Endpoint = < Server2 ip address >:51820
[Peer]
PublicKey = < Server3 public key >
AllowedIPs = 10.0.0.3/32
Endpoint = < Server3 ip address >:51820

 

Создаем конфигурационный файл с настройками на Server2:

nano /etc/wireguard/wg0.conf
[Interface]
PrivateKey = < Server2 private key >
Address = 10.0.0.2/32
ListenPort = 51820
[Peer]
PublicKey = < Server1 public key >
AllowedIPs = 10.0.0.1/32
Endpoint = < Server1 ip address >:51820
[Peer]
PublicKey = < Server3 public key >
AllowedIPs = 10.0.0.3/32
Endpoint = < Server3 ip address >:51820

 

Создаем конфигурационный файл с настройками на Server3 и т.д. Только не забудьте  по аналогии добавить нужные  сервера во все конфиги:

nano /etc/wireguard/wg0.conf
[Interface]
PrivateKey = < Server3 private key >
Address = 10.0.0.3/32
ListenPort = 51820
[Peer]
PublicKey = < Server1 public key >
AllowedIPs = 10.0.0.1/32
Endpoint = < Server1 ip address >:51820
[Peer]
PublicKey = < Server2 public key >
AllowedIPs = 10.0.0.2/32
Endpoint = < Server2 ip address >:51820

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

root@Deb10kali:~# cat  publickey                                                OotmzeyQA1Eogo/X310L3HsNpckxK6sELp5p2wVZUjM=

root@Deb10kali:~# cat privatekey                                                OMz9ITDaynESUc+VcQktijnSjUoDekkIAOBJmpXn6FM=

 

Переход в папку с программой:

cd /etc/wireguard/
ls -l

 

PrivateKey - Приватный ключ Server1.

Address - IP Внешний ip сервера wireguard vpn  Server1

ListenPort - какой wireguard слушает порт.

mcedit /etc/wireguard/wg0.conf

Для некоторых топологий может потребоваться включение форвординга:

в файле  /etc/sysctl.conf раскомментируйте:

net.ipv4.ip_forward=1

echo 1 > /proc/sys/net/ipv4/ip_forward

Далее выполните команду:

echo 1 > /proc/sys/net/ipv4/ip_forward

 

После можем перезагрузиться:

shutdown -r now

 

Запускаем Wireguard и добавляем его в автозагрузку:

systemctl enable wg-quick@wg0
systemctl start wg-quick@wg0

 

Перезапуск сервиса:

systemctl restart wg-quick@wg0

 

  • 0 Пользователи нашли это полезным
Помог ли вам данный ответ?

Связанные статьи

2. Установка VPN Wireguard на Windows server 2016

Установка VPN Wireguard на Windows server 2016  Загружаем с официального сайта клиент для...

3. WireGuard client настройка на Android

У WireGuard есть одна большая проблема — если по какой-то причине отваливается сервер, то...

4. WG VPN via docker

Установим и настроим Wireguard VPN на собственном vps сервере легко и просто с помощью docker,...

6. Проброс сервиса с приватного сервера на публичный через WireGuard

Переадресация портов WireGuard из Интернета!  Данный опус является частью...

5. Проброс подсети L2 через L3 VPN на Mikrotik

Проброс broadcast domain поверх L3 на Mikrotik!  Данный опус является частью...