Для тех, кто не ламер, но впервые настраивает — и хочет, чтобы всё работало с первого раза. Ну или переборщил с пифком ))
tun_wg0
).Поле | Значение | Пример |
---|---|---|
Description | Имя туннеля | SERVER_WIREGUARD |
Private Key | Автогенерируется (или вставь свой) | — |
Public Key | Автоматически | — |
Listen Port | Порт, на котором сервер ждёт подключений | 51821 |
Address | IP сервера в туннеле | 172.16.99.1/24 |
172.16.99.203/24
— сервер должен быть 172.16.99.1/24
.
Поле | Значение | Пример |
---|---|---|
Description | Имя клиента | mob_rom |
Public Key | Публичный ключ клиента | — |
Tunnel | Выбери созданный туннель | SERVER_WIREGUARD |
Allowed IPs | IP клиента в туннеле (не сеть!) | 172.16.99.203/32 |
Endpoint | Оставь пустым или Dynamic (если клиент за NAT) | — |
Allowed IPs
сети вроде 11.11.34.0/24
— это неправильно.Поле | Значение |
---|---|
Action | Pass |
Protocol | Any |
Source | Сеть клиента (например, 172.16.99.0/24 ) |
Destination | Любая сеть, которую клиент должен видеть (например, 11.11.34.0/24 ) |
Description | Allow client to access WG networks |
Поле | Значение |
---|---|
Protocol | UDP |
Destination Port | 51821 |
Description | Allow WireGuard Clients |
[Interface] PrivateKey = <ваш_приватный_ключ_клиента> Address = 172.16.99.203/24 DNS = 1.1.1.1 [Peer] PublicKey = <публичный_ключ_сервера> Endpoint = 189.128.244.45:51821 AllowedIPs = 172.16.99.0/24, 11.11.34.0/24 PersistentKeepalive = 25
11.11.34.0/24
— не на сервере в пире!
WIREGUARD_TO_OFFICE
192.168.200.1/24
51820
Поле | Значение |
---|---|
Public Key | Ключ офисного роутера |
Allowed IPs | IP офисного роутера в туннеле, например 192.168.200.2/32 |
Endpoint | 77.37.134.141:51820 (публичный IP офиса) |
[Interface] PrivateKey = <ключ_офиса> Address = 192.168.200.2/24 ListenPort = 51820 [Peer] PublicKey = <ключ_сервера> AllowedIPs = 192.168.0.0/16 Endpoint = 189.128.244.45:51820 PersistentKeepalive = 25
Latest Handshake
и Endpoint
.ping 172.16.99.1
→ должен отвечать.11.11.34.1
(если есть доступ и фаервол разрешает).Ошибка | Решение |
---|---|
Нет handshake | Проверь порт, Endpoint, ключи, фаервол |
Handshake есть, но нет пинга | Проверь правила фаервола на интерфейсе туннеля |
Клиент не видит сеть | Проверь AllowedIPs на клиенте — там должны быть нужные сети |
Офисный роутер не подключается | Открой порт 51820, проверь конфиг, добавь PersistentKeepalive |
В пире на сервере указал сеть (172.16.99.0/24 ), а не IP клиента (172.16.99.203/32 )
|
Исправь на /32 с конкретным IP клиента.В pfSense в Peer → Allowed IPs должно быть только IP клиента, например: 172.16.99.203/32 .Сети вроде 11.11.34.0/24 указываются на клиенте, в его AllowedIPs .
|
При подключении 10, 50 или 100+ клиентов ручная генерация ключей на каждом устройстве становится неэффективной. Ниже — профессиональный подход: генерация на сервере, шифрование, безопасная раздача и автоматизация. Это не нарушение безопасности — это масштабирование с контролем.
#!/bin/bash CLIENTS=100 OUTPUT_DIR="./wg_clients" mkdir -p $OUTPUT_DIR # Очистим предыдущие данные (если нужно) > $OUTPUT_DIR/server-public-keys.txt for i in $(seq 1 $CLIENTS); do CLIENT_NAME="client_$i" PRIV_KEY=$(wg genkey) PUB_KEY=$(echo $PRIV_KEY | wg pubkey) PASSWD=$(openssl rand -base64 12 | tr -d /=+ | cut -c1-12) # Сохраняем публичный ключ для pfSense echo "[$CLIENT_NAME]" >> $OUTPUT_DIR/server-public-keys.txt echo "PublicKey = $PUB_KEY" >> $OUTPUT_DIR/server-public-keys.txt echo "AllowedIPs = 172.16.99.$((i+100))/32" >> $OUTPUT_DIR/server-public-keys.txt echo "" >> $OUTPUT_DIR/server-public-keys.txt # Шифруем приватный ключ echo "$PRIV_KEY" | openssl enc -aes-256-cbc -pbkdf2 -pass pass:"$PASSWD" -out "$OUTPUT_DIR/$CLIENT_NAME.key.enc" # Генерируем файл с паролем и инструкцией для клиента { echo "=== WireGuard Ключ для $CLIENT_NAME ===" echo "Пароль для расшифровки: $PASSWD" echo "" echo "Инструкция:" echo "1. Скачайте файл: $CLIENT_NAME.key.enc" echo "2. Расшифруйте ключ командой:" echo " openssl enc -d -aes-256-cbc -pbkdf2 -in $CLIENT_NAME.key.enc -out private.key -pass pass:$PASSWD" echo "3. Скопируйте содержимое private.key в поле PrivateKey конфига клиента." echo "" echo "[Interface]" echo "PrivateKey = <вставьте_сюда_расшифрованный_ключ>" echo "Address = 172.16.99.$((i+100))/24" echo "DNS = 1.1.1.1" echo "" echo "[Peer]" echo "PublicKey = <публичный_ключ_сервера>" echo "Endpoint = 189.128.244.45:51821" echo "AllowedIPs = 172.16.99.0/24, 11.11.34.0/24" echo "PersistentKeepalive = 25" } > "$OUTPUT_DIR/$CLIENT_NAME.config-instructions.txt" done echo "✅ Готово. Конфиги, ключи и инструкции сохранены в $OUTPUT_DIR"
server-public-keys.txt
— готовый список пиров для вставки в pfSense → Peers.client_X.key.enc
— зашифрованный приватный ключ.client_X.config-instructions.txt
— пароль + готовый конфиг клиента для копирования..key.enc
— отправляется по email / через портал / облако.Открой: VPN → WireGuard → Peers → Add
Для каждого клиента вставь данные из server-public-keys.txt
:
Description: client_1 Public Key: zXaBcDeFgHiJkLmNoPqRsTuVwXyZ1234567890= Tunnel: SERVER_WIREGUARD Allowed IPs: 172.16.99.101/32 Endpoint: (оставить пустым, если клиент за NAT)
→ Повторить для всех 100. Можно автоматизировать через pfSense API (если доступно).
172.16.99.203/32
.AllowedIPs
.
Внимание: Cтатьи здесь сгенерированны через нейросеть, не правил ошибки, да и не до этого пока. Блог только запустил. Просто чтобы вы знали и не запускали ядерный реактор по моим статьям ))
НО!
Каждый кейс я делал минимум один раз. Сервера стоят, клиенты довольны, дата-центры не горят.
Если у вас есть вопросы, или Нашли неточность? пишите в коментах —
вместе поправим и сделаем статью более качественной. Я лично объясню нюансы из практики.
Комментарии
на клиенте WG укзать адрес интерфейса ВГ с маской 24, в пире allowip укзать подсеть WG сервера с маской24 и всю подсеть шлюзов ВГ с маской 24 как то так