WireGuard: з'єднання нод¶
Час: ~20 хвилин
Рівень: Початківець
Потрібно: Два сервери з публічними IP
Що отримаємо¶
Site-to-site VPN тунель між двома серверами через WireGuard.
┌─────────────┐ WireGuard ┌─────────────┐
│ Node A │◄──────── Tunnel ──────────►│ Node B │
│ 10.10.10.1 │ UDP 51820 │ 10.10.10.2 │
│ (публічний) │ │ (публічний) │
└─────────────┘ └─────────────┘
Передумови¶
- [ ] Два сервери з Ubuntu/Debian
- [ ] SSH доступ до обох серверів
- [ ] Публічні IP адреси обох серверів
- [ ] Порт UDP 51820 відкритий на обох серверах
Крок 1: Встановлення WireGuard¶
Виконайте на обох серверах:
sudo apt update
sudo apt install wireguard -y
Перевірка:
which wg
# Очікуваний результат: /usr/bin/wg
Крок 2: Генерація ключів на Node A¶
# Створити директорію для ключів
sudo mkdir -p /etc/wireguard
# Генерація приватного та публічного ключів
wg genkey | sudo tee /etc/wireguard/privatekey | wg pubkey | sudo tee /etc/wireguard/publickey
# Встановити права доступу
sudo chmod 600 /etc/wireguard/privatekey
# Переглянути публічний ключ (знадобиться для Node B)
cat /etc/wireguard/publickey
Запишіть публічний ключ Node A — він потрібен для налаштування Node B.
Крок 3: Генерація ключів на Node B¶
Повторіть ті самі команди на Node B:
sudo mkdir -p /etc/wireguard
wg genkey | sudo tee /etc/wireguard/privatekey | wg pubkey | sudo tee /etc/wireguard/publickey
sudo chmod 600 /etc/wireguard/privatekey
cat /etc/wireguard/publickey
Запишіть публічний ключ Node B — він потрібен для налаштування Node A.
Крок 4: Конфігурація Node A¶
Створіть файл конфігурації:
sudo nano /etc/wireguard/wg0.conf
Вміст (замініть значення на свої):
[Interface]
Address = 10.10.10.1/24
PrivateKey = <ПРИВАТНИЙ_КЛЮЧ_NODE_A>
ListenPort = 51820
[Peer]
# Node B
PublicKey = <ПУБЛІЧНИЙ_КЛЮЧ_NODE_B>
AllowedIPs = 10.10.10.2/32
Endpoint = <ПУБЛІЧНИЙ_IP_NODE_B>:51820
PersistentKeepalive = 25
Щоб отримати приватний ключ:
sudo cat /etc/wireguard/privatekey
Крок 5: Конфігурація Node B¶
На Node B створіть /etc/wireguard/wg0.conf:
[Interface]
Address = 10.10.10.2/24
PrivateKey = <ПРИВАТНИЙ_КЛЮЧ_NODE_B>
ListenPort = 51820
[Peer]
# Node A
PublicKey = <ПУБЛІЧНИЙ_КЛЮЧ_NODE_A>
AllowedIPs = 10.10.10.1/32
Endpoint = <ПУБЛІЧНИЙ_IP_NODE_A>:51820
PersistentKeepalive = 25
Крок 6: Firewall правила¶
На обох серверах відкрийте порт WireGuard:
# UFW
sudo ufw allow 51820/udp
# або iptables
sudo iptables -A INPUT -p udp --dport 51820 -j ACCEPT
Крок 7: Запуск WireGuard¶
На обох серверах:
# Запустити інтерфейс
sudo wg-quick up wg0
# Перевірити статус
sudo wg show
Очікуваний результат:
interface: wg0
public key: <ваш публічний ключ>
private key: (hidden)
listening port: 51820
peer: <публічний ключ peer>
endpoint: <IP>:51820
allowed ips: 10.10.10.x/32
latest handshake: <час>
transfer: <bytes> received, <bytes> sent
Крок 8: Перевірка з'єднання¶
З Node A:
ping 10.10.10.2
З Node B:
ping 10.10.10.1
Очікуваний результат:
PING 10.10.10.2 (10.10.10.2) 56(84) bytes of data.
64 bytes from 10.10.10.2: icmp_seq=1 ttl=64 time=5.23 ms
Крок 9: Автозапуск¶
На обох серверах:
# Увімкнути автозапуск
sudo systemctl enable wg-quick@wg0
# Перевірити статус
sudo systemctl status wg-quick@wg0
Типові проблеми¶
Handshake не встановлюється¶
Симптоми: sudo wg show не показує "latest handshake"
Рішення:
1. Перевірте що порт 51820/udp відкритий на обох серверах
2. Перевірте правильність публічних ключів
3. Перевірте Endpoint IP адреси
Connection timed out¶
Симптоми: ping не працює, timeout
Рішення:
1. Перевірте firewall правила
2. Перевірте що WireGuard запущений: sudo wg show
3. Перевірте логи: sudo journalctl -u wg-quick@wg0
Неправильні AllowedIPs¶
Симптоми: Частковий зв'язок або routing проблеми
Рішення: AllowedIPs має відповідати IP адресі peer в тунелі
Наступні кроки¶
- WireGuard: підключення клієнта — додати мобільні пристрої
- WireGuard Mesh — повна mesh мережа
- WireGuard Advanced — NAT traversal, split tunneling
Див. також¶
Шлях: step-by-step/wireguard-node-setup.md