WireGuard — это современный VPN-протокол и соответствующее программное обеспечение, которое позволяет создавать безопасные и быстрые виртуальные частные сети. Он отличается простотой конфигурации, высокой производительностью и низким уровнем сложности кода. WireGuard использует современные криптографические алгоритмы, такие как ChaCha20, Poly1305, Curve25519, и предлагает лучшую производительность по сравнению с традиционными VPN, такими как OpenVPN и IPSec.
Мы используем для примера ubuntu 22.04
Для начала подключитесь к серверу и установите обновления.apt update
Затем установите wireguard.
apt install wireguard
После установки перейдите в директорию wireguard.
cd /etc/wireguard
Сгенерируйте публичный и приватный ключ сервера.
wg genkey | tee /etc/wireguard/server_privatekey | wg pubkey | tee /etc/wireguard/server_publickey
Сгенирированые ключи сохранились в файлы server_privatekey и server_publickey для просмотра ключей, используйте команду:
cat server_privatekey
cat server_publickey
Теперь нам необходимо узнать сетевой интерфейс сервера, через который осуществляется выход в интернет. На наших виртуальных серверах – это обычно eth0.
Вы можете посмотреть список сетевых интерфейсов командой:
ip a
Запомните название интерфейса.
Давайте создадим конфигурационный файл для сервера wireguard:nano wg0.conf
Вставьте данный текст в конфигурационный файл и измените данные:
[Interface]
PrivateKey = <приватный_ключ>
Address = <IP-адрес_сервера>
ListenPort = <Порт>
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o <Интерфейс> -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o <Интерфейс> -j MASQUERADE
Давайте разберем подробно каждую строчку:
PrivateKey – Закрытый ключ сервера, который мы недавно сгенерировали.
Address – Внутренний адрес интерфейса Wireguard. Должен быть уникальным и не конфилктовать с другими адресами в данной подсети. Например, при назначении адреса 10.0.0.1/24, у клиента не должен быть адрес 10.0.0.1. Возникнет конфликт адресов и ничего работать не будет.
Listenport – Порт Wireguard. Диапозон от 51820 до 51830.
PostUP – При включении интерфейса прописывается правило для iptables, которое обеспечивает маршрутизацию трафика через интерфейс wireguard.
PostDown – Удаляет правило iptables при выключении интерфейса. Трафик будет идти через основной интерфейс.
Сохраните конфигурационный файл.
Теперь необходимо включить IP forwarding.
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
Теперь запустим автозапуск Wireguard при запуске сервера и включим Wireguard сервер.
systemctl enable [email protected]
systemctl start [email protected]
Настройка wireguard на стороне клиента.
Для начала нам нужно сделать приватный и публичный ключ для клиента. Сделать это можно так же на стороне сервера.
wg genkey | tee /etc/wireguard/user_privatekey | wg pubkey | tee /etc/wireguard/user_publickey
Перейдите заново в конфигурационный файл интерфейса wg0
nano wg0.conf
Теперь нужно добавить еще 1 блок параметров для клиента.
[Peer]
PublicKey = <Публичный_ключ_клиента>
AllowedIPs = <Разрешенный_IP_адрес_для_клиента>
Давайте подробнее разберем каждую строчку.
PublicKey - Публичный ключ клиента, записаный в файле user_publickey.
AllowedIPs – Адрес, из одной подсети адреса интерфейса.
Сохраните файл конфигурации.
Перезапустите сервер Wireguard.
systemctl restart wg-quick@wg0
Теперь загрузите клиент Wireguard на персональный компьютер.
https://www.wireguard.com/install/
После установки Wireguard клиента создайте пустой конфигурационный файл нажав комбинацию клавиш “CTRL+N”
Туда вставьте следующий код:
[Interface]
PrivateKey = <Приватный_ключ_клиента>
Address = <IP-адрес_клиента>
DNS = 8.8.8.8
[Peer]
PublicKey = <Публичный_ключ_сервера>
Endpoint = <IP-адрес_сервера>:<Порт>
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 20
Давайте разберем каждую строчку:
PrivateKey – Приватный ключ клиенту, который находится на сервере в файле user_privatekey
Address – Адрес клиента. Назначьте тот, который был в конфигурационном файле сервера. В нашем случае это 10.0.0.2/24
DNS – адрес DNS сервера.
PublicKey – Публичный ключ сервера. Находится на сервере в файле server_publickey.
Endpoint – Адрес и порт для подключения к серверу.
AllowedIPs – В данном случае при значении «0.0.0.0/0», весь трафик будет идти через Wireguard.
PersistentKeepalive – Запрос для поддержания соединения. Будет выполняться 1 раз в 20 секунд.
После сохранения конфигурационного файла активируйте соединение.
Проверьте на сервере активное подключение командой:
wg show