WireGuard to najszybszy i najprostszy sposób na zbudowanie szyfrowanego tunelu między dwoma serwerami — site-to-site VPN dla prywatnego ruchu między węzłami origin i edge, replikacji baz danych lub sieci zarządzania. Ten przewodnik łączy dwa serwery Hostfory (lub maszynę Hostfory i Twoje biuro) za pomocą trwałego tunelu WireGuard.
Wymagania wstępne
- Dwa serwery Linux z dostępem root i publicznymi adresami IP (nazwijmy je Serwer A i Serwer B)
- Ubuntu 22.04 (WireGuard jest w jądrze od wersji 5.6)
- Jeden port UDP otwarty między nimi (domyślnie 51820)
Krok 1 — Zainstaluj WireGuard na obu serwerach
apt update
apt install -y wireguardKrok 2 — Wygeneruj klucze na obu serwerach
Na każdym serwerze wygeneruj parę kluczy prywatny/publiczny:
cd /etc/wireguard
umask 077
wg genkey | tee privatekey | wg pubkey > publickey
cat privatekey publickeyZanotuj publiczny klucz każdego serwera — będziesz je porównywać. Klucze prywatne zachowaj w tajemnicy.
Krok 3 — Skonfiguruj Serwer A
Utwórz /etc/wireguard/wg0.conf na Serwerze A:
[Interface]
Address = 10.10.0.1/24
ListenPort = 51820
PrivateKey = <SERVER_A_PRIVATE_KEY>
[Peer]
# Server B
PublicKey = <SERVER_B_PUBLIC_KEY>
Endpoint = <SERVER_B_PUBLIC_IP>:51820
AllowedIPs = 10.10.0.2/32
PersistentKeepalive = 2510.10.0.1/24 to prywatny adres IP tunelu dla Serwera A. AllowedIPs oznacza „kieruj ruch dla 10.10.0.2 przez tego peera.”
Krok 4 — Skonfiguruj Serwer B
Utwórz /etc/wireguard/wg0.conf na Serwerze B (odzwierciedlenie):
[Interface]
Address = 10.10.0.2/24
ListenPort = 51820
PrivateKey = <SERVER_B_PRIVATE_KEY>
[Peer]
# Server A
PublicKey = <SERVER_A_PUBLIC_KEY>
Endpoint = <SERVER_A_PUBLIC_IP>:51820
AllowedIPs = 10.10.0.1/32
PersistentKeepalive = 25PersistentKeepalive = 25 utrzymuje tunel aktywny przez NAT/firewalle, wysyłając keepalive co 25 sekund — ważne, jeśli którakolwiek strona znajduje się za NAT.
Krok 5 — Otwórz firewall
Na obu serwerach zezwól na port UDP WireGuard:
ufw allow 51820/udpKrok 6 — Uruchom tunel
Na obu serwerach:
wg-quick up wg0
# Enable on boot
systemctl enable wg-quick@wg0Krok 7 — Przetestuj łączność
Z Serwera A, spinguj adres IP tunelu Serwera B:
ping 10.10.0.2I sprawdź status tunelu:
wg showChcesz zobaczyć niedawny handshake (latest handshake: X seconds ago) i rosnące liczniki ruchu. Jeśli handshake nigdy nie nastąpi, port UDP nie dociera do peera — sprawdź firewalle na obu końcach i wszelkie nadrzędne listy kontroli dostępu (ACL).
Krok 8 — Skieruj całą podsieć (opcjonalnie)
Aby skierować cały ruch dla podsieci (np. prywatnej sieci Serwera B 192.168.50.0/24) przez tunel, rozszerz AllowedIPs w bloku peera Serwera A:
AllowedIPs = 10.10.0.2/32, 192.168.50.0/24I włącz przekazywanie IP (IP forwarding) na Serwerze B:
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -pDodaj regułę NAT na Serwerze B, aby ruch powrotny znalazł drogę z powrotem:
iptables -t nat -A POSTROUTING -s 10.10.0.0/24 -o eth0 -j MASQUERADETypowe przypadki użycia w infrastrukturze Hostfory
- Prywatne połączenie origin ↔ edge: ukryj rzeczywisty adres IP swojego origin streamingu; edge'e pobierają dane przez tunel, tylko adresy IP edge są publiczne.
- Replikacja baz danych: uruchom replikację Postgres/MySQL przez szyfrowany tunel zamiast publicznego udostępniania portu bazy danych.
- Sieć zarządzania: SSH, monitoring (Prometheus scraping) i kopie zapasowe przez 10.10.0.0/24 — nigdy przez interfejs publiczny.
- Siatka Multi-PoP: połącz wszystkie cztery nasze Lokalizacje (Amsterdam, Kijów, Warszawa, Miami) w siatkę WireGuard dla prywatnego ruchu między PoP-ami.
Rozwiązywanie problemów
Handshake, ale brak pinga: Niezgodność AllowedIPs. Każdy peer musi wymieniać adres IP tunelu drugiego peera. Częstym błędem jest 0.0.0.0/0 po obu stronach, co tworzy pętlę routingu.
Tunel rozłącza się po pewnym czasie: dodaj lub zmniejsz PersistentKeepalive. Tabele NAT wygaszają przepływy UDP; keepalive temu zapobiega.
Działa do restartu: zapomniałeś systemctl enable wg-quick@wg0.
Co dalej
Dla wzmocnionej konfiguracji zarządzania, ogranicz SSH, aby nasłuchiwał tylko na adresie IP tunelu (ListenAddress 10.10.0.1 w sshd_config), aby interfejs publiczny w ogóle nie udostępniał SSH. Połącz z Fail2ban dla obrony w głębi.