Поиск по сайту:

Как настроить Wireguard VPN на CentOS 8


На этой странице

  1. Шаг 1. Обновление системы
  2. Шаг 2. Установите и включите репозиторий EPEL
  3. Шаг 3. Установите Wireguard
  4. Шаг 4. Настройка сервера Wireguard
  5. Шаг 5. Настройка брандмауэра
  6. Шаг 6. Включите переадресацию IPv4
  7. Шаг 7. Включите и запустите службу Wireguard
  8. Шаг 8. Установка и настройка клиента WireGuard
  9. Шаг 9. Настройте сервер для добавления клиента
  10. Шаг 10. Проверка
  11. Заключение

Wireguard — это кроссплатформенная реализация VPN с открытым исходным кодом, использующая современную криптографию. Он быстрее, проще и функциональнее протоколов IPSec и OpenVPN. Он разработан как VPN общего назначения для работы на встроенных интерфейсах и суперкомпьютерах и работает на Linux, Windows, macOS, iOS, Android, BSD и других платформах.

В этом руководстве рассказывается, как установить Wireguard VPN на сервер на базе CentOS 8 и подключиться к нему с помощью клиента Linux (CentOS/Fedora/Ubuntu).

Шаг 1 - Обновление системы

Прежде чем продолжить, необходимо обновить систему, чтобы установить последние обновления.

$ sudo dnf update

Шаг 2. Установите и включите репозиторий EPEL

Необходимые пакеты Wireguard можно найти в репозитории EPEL, поэтому нам нужно установить и включить его.

$ sudo dnf install epel-release
$ sudo dnf config-manager --set-enabled PowerTools

Мы также включили репозиторий PowerTools, так как от него зависят пакеты EPEL.

Шаг 3 — Установите Wireguard

Включите репозиторий Wireguard.

$ sudo dnf copr enable jdoss/wireguard

Установите WireGuard.

$ sudo dnf install wireguard-dkms wireguard-tools

На этом шаге также устанавливается компилятор GNU GCC, необходимый для сборки модулей ядра Linux.

Шаг 4. Настройте сервер Wireguard.

Создайте пустой файл конфигурации на сервере для настроек Wireguard с соответствующими разрешениями.

$ sudo mkdir /etc/wireguard
$ sudo sh -c 'umask 077; touch /etc/wireguard/wg0.conf'

Команда Touch создает файл wg0-server.conf в каталоге /etc/wireguard.

Затем создайте пару закрытый/открытый ключ для сервера Wireguard.

$ cd /etc/wireguard
$ sudo sh -c 'umask 077; wg genkey | tee privatekey | wg pubkey > publickey'

Это создает как открытый, так и закрытый ключ для Wireguard и записывает их в соответствующие файлы.

Просмотрите закрытый ключ, который мы только что создали.

$ sudo cat privatekey

Запишите ключ и скопируйте его, потому что он понадобится нам для настройки Wireguard.

Далее редактируем файл конфигурации.

$ sudo nano /etc/wireguard/wg0.conf

Добавьте следующий код.

[Interface]
## VPN server private IP address ##
Address = 192.168.10.1/24
 
## VPN server port - You can choose any port ##
ListenPort = 37822
 
## VPN server's private key i.e. /etc/wireguard/privatekey - the one from above ##
PrivateKey = GCEXafeZKqSsuLfvuHE+zLzMYwoH4qQyBh7MZ4f/3kM=
 
## Save and update this config file when a new peer (vpn client) added ##
SaveConfig = true

Каждая конфигурация имеет один раздел с именем [Interface], где определяется серверная часть.

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

Мы также устанавливаем для SaveConfig значение true. Это укажет службе Wireguard автоматически сохранять свою активную конфигурацию в этот файл при завершении работы.

Нажмите Ctrl + W, чтобы закрыть файл, и введите Y, когда будет предложено сохранить файл.

Шаг 5 — Настройте брандмауэр

Нам нужно открыть порт, который мы выбрали для Wireguard.

Во-первых, нам нужно определить службу Wireguard для брандмауэра. Для этого создайте файл wireguard.xml с помощью редактора Nano.

$ sudo nano /etc/firewalld/services/wireguard.xml

Вставьте следующий код в файл.

<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>wireguard</short>
  <description>WireGuard open UDP port 37822 for client connections</description>
  <port protocol="udp" port="37822"/>
</service>

Нажмите Ctrl + W, чтобы закрыть файл, и введите Y, когда будет предложено сохранить файл.

Затем включите службу Wireguard в брандмауэре.

$ sudo firewall-cmd --permanent --add-service=wireguard

Включите маскировку, чтобы весь входящий и исходящий трафик с 192.168.10.0/24 направлялся через наш общедоступный IP-адрес сервера 203.1.114.98/24.

$ sudo firewall-cmd --permanent --add-masquerade

Наконец, перезагрузите брандмауэр, чтобы активировать правила.

$ sudo firewall-cmd --reload

Перечислите текущие правила брандмауэра для подтверждения.

$ sudo firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources: 
  services: wireguard ssh
  ports: 
  protocols: 
  masquerade: yes
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

Шаг 6. Включите переадресацию IPv4.

Создайте файл /etc/sysctl.d/99-custom.conf.

$ sudo nano /etc/sysctl.d/99-custom.conf

Вставьте следующий код в файл.

## Turn on bbr ##
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr
 
## for IPv4 ##
net.ipv4.ip_forward = 1
 
## Turn on basic protection/security ##
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.tcp_syncookies = 1

## for IPv6 ##
net.ipv6.conf.all.forwarding = 1

Нажмите Ctrl + W, чтобы закрыть файл, и введите Y, когда будет предложено сохранить файл.

Объем кода в приведенном выше файле выходит за рамки этого руководства, поэтому пока просто используйте его как есть.

Перезагрузите изменения.

$ sudo sysctl -p /etc/sysctl.d/99-custom.conf

По умолчанию брандмауэр не позволяет интерфейсам wg0 и eth0 взаимодействовать друг с другом. Итак, нам нужно добавить интерфейс Wireguard во внутреннюю сеть и включить маскировку.

$ sudo firewall-cmd --add-interface=wg0 --zone=internal
$ sudo firewall-cmd --permanent --zone=internal --add-masquerade

Шаг 7. Включите и запустите службу Wireguard.

Далее нам нужно включить и запустить службу Wireguard.

$ sudo systemctl enable 
$ sudo systemctl start 

Вы можете проверить, запущен ли интерфейс Wireguard, wg0, с помощью следующей команды.

$ sudo wg
interface: wg0
  public key: VWndJ4oB7ZJwC/7UOm++OLDrbAxMPsR2yd0cl3sEkUI=
  private key: (hidden)
  listening port: 37822

$ sudo ip a show wg0
3: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
    link/none
    inet 192.168.10.1/24 scope global wg0
       valid_lft forever preferred_lft forever

Шаг 8. Установите и настройте клиент WireGuard.

Вы можете найти инструкции по установке клиента Wireguard для вашего дистрибутива Linux на их официальной странице установки.

После установки клиента необходимо создать файл конфигурации клиента.

$ sudo mkdir /etc/wireguard
$ sudo sh -c 'umask 077; touch /etc/wireguard/wg0.conf'
$ cd /etc/wireguard/
$ sudo sh -c 'umask 077; wg genkey | tee privatekey | wg pubkey > publickey'
$ sudo cat privatekey

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

$ sudo nano /etc/wireguard/wg0.conf

Добавьте в файл следующие директивы.

[Interface]
## client private key ##
PrivateKey = OEM6D/zt2fVWOepVv3iEDD430V0gAshKp4+5oVVt5EE=
 
## client ip address ##
Address = 192.168.10.2/24
 
[Peer]
## CentOS 8 server public key ##
PublicKey = VWndJ4oB7ZJwC/7UOm++OLDrbAxMPsR2yd0cl3sEkUI=
 
## set ACL ##
AllowedIPs = 192.168.10.0/24
 
## Your CentOS 8 server's public IPv4/IPv6 address and port ##
Endpoint = 203.1.114.98:37822
 
##  Key connection alive ##
PersistentKeepalive = 15

Обратите внимание, что мы назначили частный IP-адрес 192.168.10.1 серверу и 192.168.10.2 клиенту. Мы также добавили закрытый ключ клиента в файл.

В разделе [Peer] вы вводите конфигурацию серверов, к которым будет подключаться клиент. Здесь мы добавили открытый ключ, общедоступный IP-адрес и набор разрешенных IP-адресов, который содержит частный IP-адрес нашего сервера. PersistentKeepalive указывает WireGuard отправлять UDP-пакет каждые 15 секунд, это полезно, если вы находитесь за NAT и хотите поддерживать соединение.

Нажмите Ctrl + W, чтобы закрыть файл, и введите Y, когда будет предложено сохранить файл.

Теперь пришло время включить и запустить VPN-клиент.

$ sudo systemctl enable 
$ sudo systemctl start 
$ sudo systemctl status 

Шаг 9. Настройте сервер для добавления клиента

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

Сначала остановите службу Wireguard.

$ sudo systemctl stop 

Откройте файл wg0.conf для редактирования.

$ sudo nano /etc/wireguard/wg0.conf

Добавьте следующий код в конец файла.

[Peer] 
## client VPN public key ## 
PublicKey = dmfO9pirB315slXOgxXtmrBwAqPy07C57EvPks1IKzA=  

## client VPN IP address (note /32 subnet) ## 
AllowedIPs = 192.168.10.2/32

Нажмите Ctrl + W, чтобы закрыть файл, и введите Y, когда будет предложено сохранить файл.

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

Они содержат свой открытый ключ, который должен совпадать с закрытым ключом пира в разделе [Interface].

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

Снова запустите службу Wireguard.

$ sudo systemctl start 

Шаг 10 - Тест

Давайте проверим, безопасно ли и клиент, и сервер подключены с помощью VPN. Чтобы проверить соединение, выполните следующие команды на своем клиенте.

$ ping -c 192.168.10.1
PING 192.168.10.1 (192.168.10.1) 56(84) bytes of data.
64 bytes from 192.168.10.1: icmp_seq=1 ttl=64 time=44.2 ms
64 bytes from 192.168.10.1: icmp_seq=2 ttl=64 time=45.8 ms
64 bytes from 192.168.10.1: icmp_seq=3 ttl=64 time=46.7 ms
64 bytes from 192.168.10.1: icmp_seq=4 ttl=64 time=44.1 ms

--- 192.168.10.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 2800ms
rtt min/avg/max/mdev = 41.729/47.829/48.953/5.046 ms

$ sudo wg
interface: wg0
  public key: dmfO9pirB315slXOgxXtmrBwAqPy07C57EvPks1IKzA= 
  private key: (hidden)
  listening port: 
 
peer: VWndJ4oB7ZJwC/7UOm++OLDrbAxMPsR2yd0cl3sEkUI=
  endpoint: 203.1.114.98:37822
  allowed ips: 192.168.10.0/24
  latest handshake: 1 minute, 40 seconds ago
  transfer: 938 B received, 45.67 KiB sent
  persistent: keepalive: every 15 seconds

Заключение

Это все, что есть в этом уроке. Теперь у вас должен быть VPN-сервер на основе Wireguard, основанный на сервере CentOS 8. Если у вас есть вопросы, задавайте их в комментариях ниже.