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

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

WireGuard — это новый VPN протокол с открытым исходным кодом, основанный на последних концепциях криптографии. Его особенность – простота реализация и высокая скорость работы. WireGuard работать быстрее и качественнее, чем VPN-протоколы OpenVPN и IKEv2. WireGuard реализует методы виртуальной частной сети для создания защищенных соединений в маршрутизируемых или мостовых конфигурациях, Включен в состав ядра Linux, начиная с версии 5.6.

Преимущества WireGuard:

  • Простой в установке, настройке и использовании;
  • Использует современные криптографические алгоритмы: Noise protocol framework, Curve25519, ChaCha20, Poly1305 и т.д.
  • Высокая производительность за счет реализации его в виде модуля ядра (можно получить скорость до 1Гбит/с, что в 4 раза больше чем производительность OpenVPN);
  • Компактный и читаемый код (основная логика WireGuard занимает порядка 4 тыс. строк кода, тогда как в OpenVPN доходит до нескольких сотен тысяч), проще исследовать на уязвимости..

Из минусов можно привести несколько примеров:

  • WireGuard VPN работает только по UDP, то есть если у вас закрыт UDP трафик, подключения работать не будут;
  • Разработчики пока еще называют свой продукт экспериментом.

В данной статье, мы рассмотрим настройку WireGuard на сервере с CentOS 7 и 8, но данный VPN-сервер, поддерживается практически на всех Linux дистрибутивах и не только.

Установка WireGuard в Linux

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

# yum update -y

Или для CentOS 8:

# dnf update -y

Теперь нужно подключить репозиторий EPEL и wireguard, затем установить необходимые пакеты. Для CentOS 7:

# curl -Lo /etc/yum.repos.d/wireguard.repo https://copr.fedorainfracloud.org/coprs/jdoss/wireguard/repo/epel-7/jdoss-wireguard-epel-7.repo
# yum install epel-release -y && yum install wireguard-tools wireguard-dkms qrencode -y

Для CentOS 8:

# dnf install epel-release && dnf install https://download1.rpmfusion.org/free/el/rpmfusion-free-release-8.noarch.rpm && dnf install akmod-wireguard wireguard

В дальнейшем настройка WireGuadr не отличается на этих дистрибутивах CentOS. Чтобы проверить, что модуль wireguard был установлен и загружен, выполните команду:

# modprobe wireguard && lsmod | grep wireguard

установка wireguard в linux centos

Базовая настройка VPN сервера WireGuard

Создайте директорию для WireGuard:

# mkdir /etc/wireguard && cd /etc/wireguard

Теперь можно приступить к генерации ключей для клиента и сервера:

# wg genkey | tee server-private.key | wg pubkey > server-public.key
# wg genkey | tee client-private.key | wg pubkey > client-public.key
# chmod 600 ./*-private.key

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

генерация ключей для wireguard

Далее нужно создать конфигурационный файл для сервера:

# nano /etc/wireguard/wg0-server.conf

И добавить в него следующее содержимое:

[Interface]
Address = 10.0.0.1/24
PrivateKey = SERVER_PRIVATE_KEY
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
ListenPort = 39548
[Peer]
PublicKey = CLIENT_PUBLIC_KEY
AllowedIPs = 10.0.0.2/32
  • В поле PrivateKey нужно добавить содержимое файла server-private.key
  • В поле PublicKey вы добавляете содержимое с файла client-public.key
  • Address — IP адрес сервера wireguard
  • ListenPort — порт на котором будет работать wireguard
  • AllowedIPs — IP адреса, которые назначаются VPN клиенту

PostUp и PostDown правила iptables при подключении wireguard.

В блоке [Peer] указываются данные для VPN клиентов. Если их будет несколько, то нужно добавить блоки для новых клиентов, с новым IP адресом и новым ключом.

Если у вас на сервере используется не iptables, а firewalld, замените строки в конфигурационном файле, которые относятся к настройкам межсетевого экрана:

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

Вы заменяете на:

PostUp = firewall-cmd --add-port $SERVER_PORT/udp && firewall-cmd --add-rich-rule='rule family=ipv4 source address=$FIREWALLD_IPV4_ADDRESS/24 masquerade' && firewall-cmd --add-rich-rule='rule family=ipv6 source address=$FIREWALLD_IPV6_ADDRESS/24 masquerade'
PostDown = firewall-cmd --remove-port $SERVER_PORT/udp && firewall-cmd --remove-rich-rule='rule family=ipv4 source address=$FIREWALLD_IPV4_ADDRESS/24 masquerade' && firewall-cmd --remove-rich-rule='rule family=ipv6 source address=$FIREWALLD_IPV6_ADDRESS/24 masquerade'

Чтобы добавить нового клиента на сервер, вам нужно сгенерировать для него ключи, выполняется это так же, как и для первого клиента:

# wg genkey | tee client2-private.key | wg pubkey > client-public.key
# chmod 600 ./*-private.key

Теперь добаьте блок для нового клиента в конфигурационный файл /etc/wireguard/wg0-server.conf:

[Peer]
PublicKey = CLIENT2_PUBLIC_KEY
AllowedIPs = 10.0.0.3/32

И так далее.

Включите форвардинг пакетов:

# cat /etc/sysctl.conf

net.ipv4.ip_forward = 1

# sysctl -p

Добавьте сервис WireGuard в автозагрузку и запустите его:

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

Проверьте, что появился отдельный сетевой интерфейс:

#ip a show wg0

Теперь вы можете подключиться к вашему VPN серверу с различных клиентов. Рассмотрим, как их настроить.

Подключение к WireGuard с мобильного устройства Android

Для подключения с мобильного устройства Android, лучше всего использовать приложение WireGuard, которое доступно в Play Маркет (Google Play):

WireGuard клиент для android в Google Play

Установите приложение, откройте и нажмите кнопку для добавления нового подключения:

WireGuard добавление нового подключения в клиенте

Чтобы максимально просто создать новое VPN подключение, нужно на WireGuard сервере и создать файл для генерации qr-кода:

# nano /etc/wireguard/client.conf

И добавим в него следующее содержимое:

[Interface]
Address = 10.0.0.2/24
PrivateKey = CLIENT_PRIVATE_KEY
DNS = 77.88.8.8
[Peer]
PublicKey = SERVER_PUBLIC_KEY
AllowedIPs = 0.0.0.0/0
Endpoint = SERVER_IP:39548
PersistentKeepalive = 20
  • В поле PrivateKey нужно указать содержимое файла client-private.key
  • В поле PublicKey – данные из файла server-public.key
  • Значение SERVER_IP замените белым (реальным) IP-адресом вашего сервера
  • DNS можете заполнить на ваш выбор.

Выполните команду для генерации QR кода:

# qrencode -t ansiutf8

После выполнения команды, вы должны получить qr-код который нужно отсканировать в приложении на Android:

qrencode - сгенерировать qr код для подключения в wireguard

Осталось указать имя подключения и оно будет автоматически создано на вашем мобильном (со свеми ключами и настройками). После подключения к VPN серверу вы выйти в интернет с адресом WireGuard (как при подключении к любому VPN сервису):

vpn подключение wireguard в android

Для устройств с IOS так же есть клиент WireGuard. Настройка выполняется аналогично Android. Все ваши шаги для подключения будут идентичными.

Настройка клиента WireGuard в Windows

Для подключения к WireGuard VPN с компьютера Windows, скачайте дистрибутив с официального сайта https://www.wireguard.com/install/#windows-7-8-81-10-2012-2016-2019

Установите клиент WireGuard и запустите его.

wireguard клиент для windows

Создайте файл client.conf ( генерируется по способу, описанному выше при генерации qr-кода), нажмите кнопку Import и укажите данный файл:

настройка vpn подключения wireguard в windows

Нажмите кнопку ‘Activate’ и соединение будет установлено. В настройках подключения будет содержаться публичный ключ, порт подключения, назначенный IP адрес.

отключиться от wireguard

Чтобы отключиться от WireGuard, нажмите кнопку Deactivate.

Таким образом, мы настроили VPN-сервер WireGuard, который не уступает OpenVPN или IpSec, а настраивается гораздо быстрее и проще.

CentOS
Настройка VPN сервера WireGuard в Linux