WireGuard VPN
WireGuard VPN.
Содержание
1 Общая информация
- WireGuard есть коммуникационный протокол и бесплатное программное обеспечение с открытым исходным кодом, которое реализует зашифрованные виртуальные частные сети (VPN).
1.1 Основные особенности WireGuard
- Минималистичный дизайн.
- Высокая производительность.
- Простота конфигурации.
- Криптографические примитивы:
- Curve25519 — для обмена ключами;
- ChaCha20 — для шифрования данных;
- Poly1305 — для проверки целостности сообщений;
- BLAKE2s — для высокоскоростного хэширования;
- HKDF — для безопасной генерации ключей.
- Кроссплатформенность.
- Несколько топологий. Поддерживает топологии «точка-точка», «звезда» (сервер/клиент) и Mesh (сеть).
1.2 Применение WireGuard
- Защита трафика в корпоративных сетях.
- Создание безопасного доступа к облачным и локальным ресурсам.
- Шифрование данных в публичных Wi-Fi сетях.
- Настройка протокола на домашних роутерах для защиты всей сети.
1.3 Ограничения WireGuard
- Привязка к статическим IP:
- каждый клиент должен быть настроен с фиксированным IP, что может быть неудобно в динамических сетях.
- Ограниченная анонимность
- протокол не скрывает метаданные, такие как IP-адреса.
- Отсутствие встроенной обфускации
- WireGuard не скрывает трафик от анализа.
2 Пояснение настроек
2.1 Сервер и клиент
- После установления соединения серверная и клиентская части WireGuard имеют абсолютно одинаковую функциональность.
- Обычно ожидается, что серверная часть всегда запущена и имеет публичный IP-адрес, но это всего лишь для удобства.
2.2 AllowedIPs
- Директива
AllowedIPsв WireGuard — это параметр конфигурации, который определяет, какие IP-адреса могут проходить через туннель WireGuard. - Она указывает, какой трафик будет разрешён для передачи через VPN-соединение, и играет ключевую роль в настройке маршрутизации и безопасности.
2.2.1 Основные функции AllowedIPs
Определение разрешённого трафика.
- С помощью AllowedIPs указывается, какие IP-адреса (или диапазоны адресов) могут быть получены или отправлены через конкретный интерфейс WireGuard.
- Это позволяет контролировать, какой трафик будет проходить через туннель.
Настройка маршрутизации.
- Система будет направлять трафик для указанных IP-адресов через интерфейс WireGuard.
Обеспечение безопасности.
- Ограничение трафика помогает предотвратить несанкционированный доступ и утечки данных.
2.2.2 Как работает AllowedIPs
В конфигурационном файле WireGuard для каждого пира (peer) можно указать список IP-адресов или подсетей, которые будут разрешены для этого пира.
Формат указания адресов: стандартный для IP-сетей, включая CIDR-нотацию (например, 192.168.1.0/24 для подсети).
Можно указывать как отдельные IP-адреса, так и диапазоны.
2.2.3 Примеры использования AllowedIPs
AllowedIPs = 0.0.0.0/0: весь трафик будет направляться через туннель WireGuard (полная маршрутизация через VPN).AllowedIPs = 192.168.1.0/24: через туннель будут проходить только адреса из указанной подсети.AllowedIPs = 10.0.0.5/32: разрешение трафика только для конкретного IP-адреса 10.0.0.5.Если в
AllowedIPsуказаны узкие диапазоны или конкретные адреса, то трафик для остальных адресов будет идти через обычный сетевой интерфейс, а не через VPN.Настройка
AllowedIPsвлияет на то, как система будет маршрутизировать трафик, поэтому важно правильно указать адреса, чтобы обеспечить нужную функциональность и безопасность.При настройке
AllowedIPsнеобходимо учитывать как локальные сети, так и публичные IP-адреса, если требуется доступ к определённым ресурсам в интернете через VPN.
2.3 Настройка маршрутизации
- Чтобы добавить маршрутизацию в WireGuard, настройте
AllowedIPsв конфигурации удаленного узла, что указывает ядру, как маршрутизировать трафик для этого узла. - Для более сложной маршрутизации может потребоваться вручную настроить статические маршруты.
AllowedIPsопределяет, какие IP-адреса передаются через туннель WireGuard.- В системе Linux
wg-quickавтоматически преобразуетAllowedIPв маршруты ядра при создании туннеля. - Для расширенной маршрутизации используйте
ip-rules:- Создайте новую таблицу маршрутизации с помощью команды
ip route add table 100. - Добавьте правило для использования этой таблицы для трафика, исходящего с IP-адреса интерфейса WireGuard:
ip rule add from 10.66.127.142/32 lookup 40. - Добавьте это правило в команду
PostUpв конфигурации WireGuard, чтобы автоматизировать её.
- Создайте новую таблицу маршрутизации с помощью команды
3 Сервер
3.1 Установка WireGuard
3.1.1 Rocky Linux 9
- Установим репозиторий EPEL:
sudo dnf install epel-release -y
- Установим пакет
wireguard-tools:
sudo dnf install wireguard-tools -y
- Проверка установки:
wg --version
3.2 Настройка WireGuard
- WireGuard использует криптографические ключи для аутентификации и шифрования трафика между узлами.
3.2.1 Генерация ключей сервера
- Создадим директорию для хранения ключей и сгенерируем пару ключей:
sudo mkdir -p /etc/wireguard
sudo chmod 700 /etc/wireguard
sudo wg genkey | sudo tee /etc/wireguard/server_private.key
sudo wg pubkey < /etc/wireguard/server_private.key | sudo tee /etc/wireguard/server_public.key
sudo chmod 600 /etc/wireguard/server_private.key /etc/wireguard/server_public.key
3.2.2 Создание конфигурационного файла сервера
- Создадим файл конфигурации
wg0.conf:
sudo touch /etc/wireguard/wg0.conf
- Добавьте в него следующие строки, заменив на ваш приватный ключ:
[Interface]
Address = 10.0.0.1/24
SaveConfig = true
ListenPort = 51820
PrivateKey = <Server_Private_Key>
- Приведенная выше конфигурация WireGuard создает новый интерфейс с частным IP-адресом.
10.0.0.1/24:Address = 10.0.0.1/24: назначает частный IP-адрес10.0.0.1интерфейсу WireGuard с маской подсети255.255.255.0.SaveConfig = true: позволяет WireGuard автоматически сохранять конфигурацию при выключении сервера.PrivateKey = <Server_Private_Key>: устанавливает закрытый ключ сервера WireGuard.ListenPort = 51820: устанавливает порт сервера WireGuard51820для прослушивания входящих запросов на VPN-подключение.
3.2.3 Генерация конфигурации клиента
- Замените
clientжелаемой схемой именования клиентов. - Сгенерируем пару ключей для клиента:
sudo wg genkey | sudo tee /etc/wireguard/client_private.key
sudo wg pubkey < /etc/wireguard/client_private.key | sudo tee /etc/wireguard/client_public.key
3.2.4 Создание конфигурационного файла клиента
- Создайте файл
client.conf:
sudo touch /etc/wireguard/client.conf
- Добавьте следующие строки, заменив соответствующие значения вашими ключами и IP-адресом сервера:
[Interface]
PrivateKey = <Client_Private_Key>
Address = 10.0.0.2/24
DNS = 8.8.8.8
[Peer]
PublicKey = <Server_Public_Key>
Endpoint = <Server_Public_IP>:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
- Создаётся клиент WireGuard с IP-адресом частного туннеля VPN
10.0.0.2/24:PrivateKey: устанавливает закрытый ключ клиента WireGuard, используемый для шифрования и аутентификации в туннеле VPN.Address: устанавливает частный IP-адрес клиента WireGuard10.0.0.2/24.DNS: устанавливает публичный DNS-сервер Google8.8.8.8в качестве DNS-резолвера для разрешения доменных имен при подключении к VPN-туннелю.PublicKey: устанавливает открытый ключ целевого сервера WireGuard.AllowedIPs: определяет сетевые адреса клиентов сети, которым разрешено подключение через туннель VPN.Endpoint: устанавливает публичный IP-адрес сервера WireGuard и порт51820для использования при подключении к VPN-туннелю.PersistentKeepalive: поддерживает VPN-соединение активным, отправляя пакеты поддержки активности каждые15секунд.
3.2.5 Добавление клиента на сервер
Откройте конфигурационный файл сервера
/etc/wireguard/wg0.conf.Добавьте информацию о клиенте:
[Peer]
PublicKey = <Client_Public_Key>
AllowedIPs = 10.0.0.2/32
3.2.6 Управление сервисом WireGuard
- Запустите интерфейс WireGuard:
sudo systemctl enable --now wg-quick@wg0
- Убедитесь, что сервис работает корректно:
sudo systemctl status wg-quick@wg0
3.2.7 Настройка брандмауэра
Открытие порта
- Откройте порт 51820/UDP в FirewallD:
sudo firewall-cmd --add-service=wireguard --permanent sudo firewall-cmd --reload- Разрешите пересылку пакетов для обеспечения работы VPN:
sudo echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.conf sudo sysctl -p
3.2.8 Маскарадинг
- Если необходимо подключить маскарадинг.
- Добавьте правило маскарадинга для сети WireGuard:
sudo firewall-cmd --permanent --add-masquerade
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.0/24" masquerade'
sudo firewall-cmd --reload
4 Клиент
4.1 Установка
4.1.1 Gentoo
- Установите:
emerge net-vpn/wireguard-tools
4.1.2 Rocky Linux 9
- Установим репозиторий EPEL:
sudo dnf install epel-release -y
- Установим пакет
wireguard-tools:
sudo dnf install wireguard-tools -y
- Проверка установки:
wg --version
4.2 Модуль ядра
- Включите модуль в ядро:
Device Drivers ---> [*] Network device support ---> [*] Network core driver support <*> WireGuard secure network tunnel - Кроме того, должны быть включены следующие параметры:
CONFIG_IP_MULTIPLE_TABLES=y - Это в конфигураторе:
-> Networking support (NET [=y]) -> Networking options -> TCP/IP networking (INET [=y]) -> IP: advanced router (IP_ADVANCED_ROUTER [=y]) -> IP: policy routing (IP_MULTIPLE_TABLES [=y]) - Для ipv6 нужно будет установить:
CONFIG_IPV6_MULTIPLE_TABLES=1
4.3 Конфигурация
- Скопируйте конфигурацию клиента с сервера, например с помощью
scp:sudo scp root@wireguard-server-ip:/etc/wireguard/client.conf /etc/wireguard/wg0.conf sudo chmod 600 /etc/wireguard/wg0.conf - Активируйте сервис
systemd-resolved:sudo systemctl enable --now systemd-resolved - Активируйте интерфейс:
sudo wg-quick up wg0 - Проверьте статус туннеля:
sudo wg - Проверьте связь с сервером:
ping -c 5 10.0.0.1
5 Утилиты
5.1 wghttp
- Репозиторий: https://github.com/zhsj/wghttp
- Использовать WireGuard в качестве прокси-сервера HTTP и SOCKS5.