2.5.5.1 WireGuard - зашифрованные виртуальные частные сети
Скачать документ Установка
Настройка на сервере
Настройка на клиенте
Подключение к wireguard с помощью NetworkManager
Дополнительная настройка Wireguard на клиенте
Окружение
- Версия РЕД ОС: 7.3
- Конфигурация: Сервер графический
- Версия ПО: wireguard-tools-1.0.20210914-1
WireGuard — коммуникационный протокол, реализующий зашифрованные виртуальные частные сети (VPN). Был разработан для простого использования технологии VPN, высокой производительности и низкой поверхности атаки. WireGuard нацелен на лучшую производительность и большую мощность, чем IPsec и OpenVPN. Протокол WireGuard передаёт трафик по протоколу UDP.
Вы можете подробнее ознакомиться с созданием и настройкой виртуальных частных сетей, просмотрев наши обучающие видео:
на RuTube — Настройка VPN с помощью WireGuard;
в Яндекс.Дзен — Настройка VPN с помощью WireGuard;
в VK Видео — Настройка VPN с помощью WireGuard.
На наших каналах вы также сможете найти много другой полезной информации.
Установка
Модули Wireguard доступны в последних обновлениях РЕД ОС, поэтому необходимо выполнить обновление. Для этого перейдите в сеанс пользователя root:
su -
и выполните команду:
dnf update
После обновления установите пакеты:
dnf install wireguard-tools
Настройка на сервере
Затем потребуется сгенерировать на сервере публичные и закрытые ключи для wireguard:
wg genkey | tee /etc/wireguard/privatekey | wg pubkey | tee /etc/wireguard/publickey
Будет создано 2 файла - /etc/wireguard/privatekey и /etc/wireguard/publickey.
Назначьте права доступа к файлу приватного (закрытого) ключа:
chmod 600 /etc/wireguard/privatekey
Проверьте название сетевого интерфейса, выполнив команду:
ip a
Название интерфейса будет использовано далее в конфигурационном файле /etc/wireguard/wg0.conf. Создайте его со следующим содержимым:
nano /etc/wireguard/wg0.conf
[Interface]
PrivateKey = mPFM+dkdGXXcSYYKQoPcdDkc99x5rrE5Z9vWqzdqtUg=
Address = 10.0.0.1/24 #Указывается адрес для vpn-сети, может быть изменен по вашему усмотрению
ListenPort = 51820
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o ens18 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o ens18 -j MASQUERADE
Нажмите «Ctrl+O» для записи изменений и закрытия редактора.
В данном примере подразумевается, что сеть доступна для сервера через интерфейс ens18. При настройке необходимо заменить данное значение на свое.
Для открытия порта на сервере при использовании брандмауэра iptables выполните:
iptables -I INPUT 1 -p udp --dport 51820 -j ACCEPT iptables-save > /etc/sysconfig/iptables systemctl enable --now iptables.service
Для открытия порта на сервере при использовании брандмауэра firewalld выполните:
firewall-cmd --permanent --add-port=51820/udp --zone=public
Далее выполните команду:
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.d/ipv4forwarding.conf sysctl -p
Запустите systemd-демон с wireguard:
systemctl enable wg-quick@wg0.service systemctl start wg-quick@wg0.service systemctl status wg-quick@wg0.service ● wg-quick@wg0.service - WireGuard via wg-quick(8) for wg0 Loaded: loaded (/usr/lib/systemd/system/wg-quick@.service; enabled; vendor preset: disabled) Active: active (exited) since Fri 2022-09-09 16:10:07 MSK; 5s ago Docs: man:wg-quick(8) man:wg(8) https://www.wireguard.com/ https://www.wireguard.com/quickstart/ https://git.zx2c4.com/wireguard-tools/about/src/man/wg-quick.8 https://git.zx2c4.com/wireguard-tools/about/src/man/wg.8 Process: 5682 ExecStart=/usr/bin/wg-quick up wg0 (code=exited, status=0/SUCCESS) Main PID: 5682 (code=exited, status=0/SUCCESS) CPU: 51ms сен 09 16:10:06 localhost.localdomain systemd[1]: Starting WireGuard via wg-quick(8) for wg0... сен 09 16:10:06 localhost.localdomain wg-quick[5682]: [#] ip link add wg0 type wireguard сен 09 16:10:07 localhost.localdomain wg-quick[5682]: [#] wg setconf wg0 /dev/fd/63 сен 09 16:10:07 localhost.localdomain wg-quick[5682]: [#] ip -4 address add 10.0.0.1/24 dev wg0 сен 09 16:10:07 localhost.localdomain wg-quick[5682]: [#] ip link set mtu 1420 up dev wg0 сен 09 16:10:07 localhost.localdomain wg-quick[5682]: [#] iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens18 -j MAS
Создайте ключи для клиента командой:
wg genkey | tee /etc/wireguard/USERNAME_privatekey | wg pubkey | tee /etc/wireguard/USERNAME_publickey
Вместо USERNAME впишите имя пользователя, для которого требуется создать файл.
Далее добавьте в конфигурационный файл wg0.conf секцию клиента:
nano /etc/wireguard/wg0.conf
[Peer]
PublicKey = <USERNAME_publickey>
AllowedIPs = 10.0.0.2/32 #В данном поле указывается разрешенный диапазон IP для клиентов
Вместо <USERNAME_publickey> необходимо вписать содержимое файла /etc/wireguard/USERNAME_publickey.
Затем перезагрузите сервис systemd с wireguard:
systemctl restart wg-quick@wg0 systemctl status wg-quick@wg0
Настройка на клиенте
На клиентской машине создайте текстовый файл с конфигурацией клиента:
nano <USERNAME>_wb.conf
[Interface]
PrivateKey = <CLIENT_PRIVATE_KEY>
Address = 10.0.0.2/32
DNS = 77.88.8.8
[Peer]
PublicKey = <SERVER_PUBKEY>
Endpoint = <SERVER_IP>:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 20
Здесь:
<CLIENT_PRIVATE_KEY> заменяется на приватный ключ клиента, то есть содержимое файла /etc/wireguard/USERNAME_privatekey на сервере;
<SERVER_PUBKEY> заменяется на публичный ключ сервера, то есть на содержимое файла /etc/wireguard/publickey на сервере>;
<SERVER_IP> заменяется на IP сервера.
Затем установите на клиенте пакет wireguard:
dnf install wireguard-tools
Скопируйте созданный конфигурационный файл:
cp <USERNAME>_wb.conf /etc/wireguard/wg0.conf
и активируйте wireguard-соединение командой:
wg-quick up wg0
После активации соединения с сервером должно отобразиться примерно следующее:
[#] ip link add wg0 type wireguard [#] wg setconf wg0 /dev/fd/63 [#] ip -4 address add 10.0.0.2/32 dev wg0 [#] ip link set mtu 1420 up dev wg0 [#] mount `77.88.8.8' /etc/resolv.conf [#] wg set wg0 fwmark 51820 [#] ip -4 route add 0.0.0.0/0 dev wg0 table 51820 [#] ip -4 rule add not fwmark 51820 table 51820 [#] ip -4 rule add table main suppress_prefixlength 0 [#] sysctl -q net.ipv4.conf.all.src_valid_mark=1 [#] nft -f /dev/fd/63
Деактивировать соединение можно командой:
wg-quick down wg0
После деактивации будет отображено примерно следующее сообщение:
[#] ip -4 rule delete table 51820 [#] ip -4 rule delete table main suppress_prefixlength 0 [#] ip link delete dev wg0 [#] umount /etc/resolv.conf [#] nft -f /dev/fd/63
Подключение к wireguard с помощью NetworkManager
Для подключения также может быть использована графическая утилита NetworkManager. Для того чтобы создать соединение Wireguard, необходимо на клиенте открыть NetworkManager, нажав ПКМ по иконке в трее. Далее нажмите «Добавить новое соединение» и выберите тип соединения Wireguard, нажмите «Создать».
В окне настроек соединения необходимо заполнить Имя интерфейса и приватный ключ пользователя (Private key).
Далее можно перейти к заполнению раздела Peers.
Для этого нажмите «Добавить» и введите необходимую информацию — публичный ключ сервера (Public key), маршрут, разрешенный для клиента (Allowed Ips), а также адрес и порт сервера, к которому будет производиться подключение (Endpoint).
Во вкладке Параметры IPv4 следует добавить статический адрес из разрешенного диапазона адресов для клиентов на сервере Wireguard и DNS-сервер.
Для активации/деактивации соединения необходимо воспользоваться терминалом.
Команда для активации соединения:
nmcli connection up <имя_соединения_Wireguard>
Команда для деактивации соединения:
nmcli connection down <имя_соединения_Wireguard>
Дополнительная настройка Wireguard на клиенте
Маршрутизация на клиенте
Если необходимо, чтобы весь трафик от клиента проходил через wireguard-соединение, нужно настроить параметр AllowedIPs в блоке [Peer] на стороне клиента. Данный параметр должен выглядеть следующим образом:
AllowedIPs = 0.0.0.0/0
Однако для того чтобы использовать соединение wireguard только для ресурсов, которые находятся в этой сети, можно прописать адреса подсетей через запятую. Например:
AllowedIPs = 10.0.0.0/24,192.168.0.0/16
Дополнительное шифрование
Также существует возможность добавления симметричного шифрования трафика между сервером и клиентом. Для этого следует сгенерировать дополнительный ключ (Pre-Shared Key) на сервере:
wg genpsk | tee /etc/wireguard/presharedkey
Данный ключ необходимо прописать на сервере и на клиенте в блоке [Peer].
Для настройки на сервере добавьте параметр PresharedKey и впишите в него созданный ключ. Блок [Peer] на сервере должен выглядеть следующим образом:
[Peer]
PresharedKey = <presharedkey>
PublicKey = <USERNAME_publickey>
AllowedIPs = 10.0.0.2/32
Для настройки на клиенте добавьте параметр PresharedKey и впишите в него созданный ключ. Блок [Peer] на клиенте должен выглядеть следующим образом:
[Peer]
PresharedKey = <presharedkey>
PublicKey = <SERVER_PUBKEY>
Endpoint = <SERVER_IP>:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 20
Дата последнего изменения: 10.09.2024
Если вы нашли ошибку, пожалуйста, выделите текст и нажмите Ctrl+Enter.