WireGuard - это современный, быстрый и безопасный протокол виртуальной частной сети (VPN), разработанный с акцентом на простоту, производительность и надёжность. В отличие от традиционных решений вроде OpenVPN или IPsec, WireGuard использует минималистичный код (всего около 4 000 строк в ядре Linux), что упрощает аудит и снижает риск уязвимостей. Он работает на основе криптографически стойких алгоритмов (Curve25519 для обмена ключами, ChaCha20 для шифрования, Poly1305 для аутентификации) и обеспечивает мгновенное соединение без сложных этапов согласования.
WireGuard изначально интегрирован в ядро Linux (начиная с версии 5.6) и поддерживается на всех основных платформах - от Windows и macOS до Android и iOS. Он идеально подходит для мобильных устройств благодаря способности быстро восстанавливать соединение при смене сети (например, с Wi-Fi на мобильный интернет). Благодаря своей лёгкости, скорости и простоте настройки, WireGuard быстро стал популярной альтернативой устаревшим VPN-решениям как для личного, так и для корпоративного использования.
# Обновление системы sudo apt update && sudo apt upgrade -y # Установка WireGuard sudo apt install wireguard -y
# Переходим в папку настроек cd /etc/wireguard/ # Генерация приватного и публичного ключей сервера umask 077 wg genkey | tee privatekey | wg pubkey > publickey
# Смотрим содержимое файлов cat privatekey # Это ваш PRIVATE_KEY (никому не показывать!) cat publickey # Это ваш PUBLIC_KEY (нужен для клиентов) # Проверяем права доступа ls -la privatekey publickey
Создаем конфигурационный файл:
sudo nano /etc/wireguard/wg0.conf
Содержимое файла:
[Interface] Address = 10.0.0.1/24 SaveConfig = false PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE ListenPort = 51820 PrivateKey = <ПРИВАТНЫЙ_КЛЮЧ_СЕРВЕРА> # Клиенты будут добавляться ниже
Этот блок [Interface] описывает настройки серверной стороны WireGuard-туннеля.
Address = 10.0.0.1/24 задаёт внутренний IP-адрес интерфейса wg0 - он будет шлюзом для клиентов в приватной подсети 10.0.0.0/24.ListenPort = 51820 указывает порт, на котором сервер принимает входящие соединения (стандартный для WireGuard).SaveConfig = false означает, что динамически добавленные peer'ы (например, через wg set) не будут сохраняться в файл конфигурации при перезапуске - полезно, если управление peer'ами происходит извне (например, скриптами).Ключевая часть - правила PostUp и PostDown:
PostUp) настраиваются правила iptables, разрешающие переадресацию трафика от клиентов WireGuard (wg0) в интернет через внешний интерфейс (eth0), а также включается MASQUERADE (маскарадинг), чтобы исходящие пакеты выглядели так, будто идут от сервера, а не от клиентов.PostDown) эти правила корректно удаляются, предотвращая «засорение» таблицы iptables.Важно: имя внешнего интерфейса (
eth0) должно соответствовать реальному (часто этоens3,enp0s3,wlan0и т.д.). Неверное имя - частая причина, почему интернет у клиентов не работает.
# Копируем приватный ключ в буфер обмена (аккуратно!) cat /etc/wireguard/privatekey # Вывод: <ПРИВАТНЫЙ_КЛЮЧ_СЕРВЕРА> # Вставляем в конфиг: nano /etc/wireguard/wg0.conf # PrivateKey = <ПРИВАТНЫЙ_КЛЮЧ_СЕРВЕРА>
sudo nano /etc/sysctl.conf
Раскомментируйте/добавте строку:
net.ipv4.ip_forward=1
Примените изменения:
sudo sysctl -p
# Запуск интерфейса sudo wg-quick up wg0 # Включение автозапуска sudo systemctl enable wg-quick@wg0 sudo systemctl start wg-quick@wg0
Для каждого клиента:
# Генерация ключей для клиента wg genkey | tee client-privatekey | wg pubkey > client-publickey # просмотр ключа cat client-publickey
Добавьте в конфиг сервера (/etc/wireguard/wg0.conf):
[Peer] PublicKey = <ПУБЛИЧНЫЙ_КЛЮЧ_КЛИЕНТА> AllowedIPs = 10.0.0.2/32
Важно!
- Публичный ключ клиента идет в конфиг сервера
- Приватный ключ клиента идет в конфиг клиента
- Никогда не путайте их местами!
client.conf# Создаем файл конфигурации на сервере nano client.conf
client.conf:[Interface] # Приватный ключ этого клиента (из файла /etc/wireguard/client-privatekey) PrivateKey = <ПРИВАТНЫЙ_КЛЮЧ_КЛИЕНТА> # IP-адрес клиента в VPN-сети (должен совпадать с AllowedIPs на сервере) Address = 10.0.0.2/24 # DNS-серверы для клиента DNS = 8.8.8.8, 1.1.1.1 [Peer] # Публичный ключ СЕРВЕРА (из файла /etc/wireguard/publickey) PublicKey = <ПУБЛИЧНЫЙ_КЛЮЧ_СЕРВЕРА> # Конечная точка (IP/домен сервера и порт) Endpoint = XXX.XXX.XXX.XXX:51820 # Ваш IP сервера: порт # Разрешить весь трафик через VPN (0.0.0.0/0) # Или только доступ к VPN-сети (10.0.0.0/24) AllowedIPs = 0.0.0.0/0 # (Опционально) Предотвражение изменения IP сервера PersistentKeepalive = 25
Берем из файла:
cat /etc/wireguard/client-privatekey
Берем из файла:
cat /etc/wireguard/publickey
Указываем ваш сервер IP-адрес: XXX.XXX.XXX.XXX:51820
Что пускать через VPN:
0.0.0.0/0 - весь трафик через VPN (интернет в том числе)10.0.0.0/24 - только доступ к VPN-сети10.0.0.0/24, 192.168.1.0/24 - VPN + локальная сеть[Interface] PrivateKey = <ПРИВАТНЫЙ_КЛЮЧ_КЛИЕНТА> Address = 10.0.0.2/24 DNS = 8.8.8.8 [Peer] PublicKey = <ПУБЛИЧНЫЙ_КЛЮЧ_СЕРВЕРА> Endpoint = XXX.XXX.XXX.XXX:51820 AllowedIPs = 0.0.0.0/0 PersistentKeepalive = 25
Копирование конфига клиента с сервера на локальный компьютер
scp user@server_ip:~/client.conf .
# Установим qrencode на сервере sudo apt install qrencode -y # Создайте QR-код из конфига qrencode -t ansiutf8 < client.conf
# Проверить синтаксис конфига sudo wg-quick down wg0 sudo wg-quick up wg0 # Посмотреть статус sudo wg show
/etc/wireguard/publickeyListenPort на сервереsudo apt update sudo apt install wireguard -y
# CentOS/RHEL 8+ sudo dnf install wireguard-tools # Fedora sudo dnf install wireguard-tools # CentOS/RHEL 7 sudo yum install epel-release sudo yum install wireguard-tools
# Через Homebrew brew install wireguard-tools # Или скачайте с официального сайта
.apk файл можно скачать с официального сайта WireGuardСохраните файл client.conf в папку:
C:\Users\Username\Downloads\~/Downloads/Импортируйте конфиг в клиенте:
client.confclient.conf на телефонclient.conf# Скопируйте конфиг в нужную папку sudo cp client.conf /etc/wireguard/ # Подключитесь sudo wg-quick up client # Автозапуск sudo systemctl enable wg-quick@client
# После подключения проверьте ping 10.0.0.1 # Должен пинговать сервер # Проверьте свой IP curl ifconfig.me # Должен показывать IP сервера