WireGuard mesh ile özel bir VPS kümesi kurun
VPS node'larını WireGuard full mesh ile özel bir kümeye bağlayın: tek adres planı, node başına bir [Peer], /32 AllowedIPs, sıkı bir firewall ve wg0'a bağlanmış servisler.
Kısaca: birkaç VPS'i özel bir kümeye dönüştürmek için her VPS node'una tek bir özel subnet'ten adres alan bir WireGuard arayüzü verin, diğer her node'u herkese açık `Endpoint`'i ve `AllowedIPs` içinde bir `/32` ile `[Peer]` olarak ekleyin, UDP 51820'ye yalnızca kendi node'larınızdan izin verin ve veritabanlarını ve dahili servisleri herkese açık IP yerine `wg0` adresine bağlayın. Yaklaşık on node'a kadar bunu elle veya bir şablonla sürdürmek kolaydır; ötesinde, yapılandırmaları üreten ve dağıtan araçlar kullanın.
Bu rehber, WireGuard VPN rehberindeki temelleri zaten bildiğinizi ve her node'da SSH'ı SSH sıkılaştırma rehberindeki gibi sıkılaştırdığınızı varsayar; node'lara agent forwarding olmadan bir bastion üzerinden ulaşmak için bkz. StrictModes ve agent forwarding rehberi.
VPN node'ları için adres planı
Kullandığınız başka hiçbir şeyle (ev LAN'ı, Docker, Kubernetes pod aralıkları) çakışmayan tek bir özel aralık seçin. Küçük bir küme için `/24` yeterlidir ve adresleri okunabilir tutar. Her node'a sabit bir adres atayın ve planı sürüm kontrolünde tutun, çünkü her yapılandırma ondan türetilir.
| Node | Görev | Herkese açık IP | wg0 adresi | ListenPort |
|---|---|---|---|---|
| node1 | uygulama | 203.0.113.11 | 10.88.0.1/24 | 51820 |
| node2 | uygulama | 203.0.113.12 | 10.88.0.2/24 | 51820 |
| node3 | veritabanı | 203.0.113.13 | 10.88.0.3/24 | 51820 |
| node4 | izleme | 203.0.113.14 | 10.88.0.4/24 | 51820 |
Her VPS node'unda peer başına yapılandırma
Full mesh'te her node diğer her node ile doğrudan konuşur, dolayısıyla her yapılandırmada bir `[Interface]` ve N-1 `[Peer]` bölümü vardır. Dört node toplamda altı tünel demektir; on node 45. Her node'un herkese açık bir IP'si olduğundan `PersistentKeepalive` genellikle gerekmez; ayrıntılar keepalive ve PresharedKey rehberinde.
- 01.Her node'da `apt install wireguard` çalıştırın, ardından `umask 077; wg genkey | tee /etc/wireguard/wg0.key | wg pubkey > /etc/wireguard/wg0.pub`.
- 02.Tüm açık anahtarları ve adres planını tek bir yerde toplayın.
- 03.İsteğe bağlı olarak post-quantum bir güvence için her node çiftine bir `wg genpsk` anahtarı üretin.
- 04.Her node'da aşağıda gösterildiği gibi `/etc/wireguard/wg0.conf` yazın.
- 05.`systemctl enable --now wg-quick@wg0` çalıştırın ve `wg show` ile her peer'la yakın tarihli bir handshake olup olmadığını kontrol edin.
# /etc/wireguard/wg0.conf on node1
[Interface]
Address = 10.88.0.1/24
ListenPort = 51820
PrivateKey = <node1 private key>
[Peer]
# node2
PublicKey = <node2 public key>
Endpoint = 203.0.113.12:51820
AllowedIPs = 10.88.0.2/32
[Peer]
# node3
PublicKey = <node3 public key>
Endpoint = 203.0.113.13:51820
AllowedIPs = 10.88.0.3/32
[Peer]
# node4
PublicKey = <node4 public key>
Endpoint = 203.0.113.14:51820
AllowedIPs = 10.88.0.4/32Mesh'te AllowedIPs nasıl çalışır
`AllowedIPs` aynı anda iki iş yapar. Giden yönde bir yönlendirme tablosudur: `10.88.0.3` için paketler `10.88.0.3/32`'yi listeleyen peer'a gider. Gelen yönde bir erişim listesidir: o peer'dan gelen bir paket yalnızca kaynak adresi o peer'ın `AllowedIPs`'i içindeyse kabul edilir. Bu yüzden her peer, tüm `/24`'ü değil, tam olarak kendi `/32`'sini alır.
`Address` satırındaki `/24` yalnızca `wg0` üzerinde subnet için kernel rotasını oluşturur; ardından WireGuard her hedef için doğru peer'ı seçer.
- ▹Aynı arayüzde iki peer asla çakışan bir `AllowedIPs` aralığını paylaşmamalıdır; sonuncusu kazanır.
- ▹Bir node ayrıca özel bir subnet'i yönlendiriyorsa (örneğin node3'teki Docker), o subnet'i diğer node'larda node3'ün `AllowedIPs`'ine ekleyin.
- ▹Tüm trafiğin gerçekten o node üzerinden çıkmasını istemiyorsanız bir mesh peer'ına `0.0.0.0/0` koymayın.
Firewall: tünele yalnızca sizin node'larınız ulaşır
WireGuard kimliği doğrulanmamış paketlere yanıt vermez, ancak UDP 51820'yi bilinen node IP'leriyle sınırlamak yine de gürültüyü azaltır. Tünelin içinde yalnızca her servisin ihtiyaç duyduğu portları açın. Debian 12/13 ve Ubuntu 24.04 için bu nftables örneği `/etc/nftables.conf` dosyasına girer; `nft -f /etc/nftables.conf` ile yükleyin ve `nftables.service`'i etkinleştirin. Test ederken açık bir SSH oturumu tutun.
table inet filter {
set mesh_peers {
type ipv4_addr
elements = { 203.0.113.11, 203.0.113.12, 203.0.113.13, 203.0.113.14 }
}
chain input {
type filter hook input priority 0; policy drop;
ct state established,related accept
iif lo accept
meta l4proto { icmp, ipv6-icmp } accept
tcp dport 22 accept
udp dport 51820 ip saddr @mesh_peers accept
iifname "wg0" ip saddr 10.88.0.0/24 tcp dport { 5432, 6379, 9100 } accept
}
}Servisleri wg arayüzüne bağlayın
Firewall bir katmandır; ikincisi herkese açık adreste hiç dinlememektir. Bir firewall hatasının onları açığa çıkarmaması için dahili servisleri node'un `wg0` adresine bağlayın. Servis bağlanmadan önce `wg0`'ın var olması gerektiğinden, unit'leri bir systemd drop-in ile sıralayın veya `net.ipv4.ip_nonlocal_bind = 1` ile henüz ayakta olmayan adreslere bağlanmaya izin verin.
# PostgreSQL on node3: postgresql.conf
listen_addresses = '10.88.0.3'
# pg_hba.conf
host all all 10.88.0.0/24 scram-sha-256
# Redis: /etc/redis/redis.conf
bind 10.88.0.3
# systemctl edit postgresql (repeat for other services)
[Unit]
[email protected]
[email protected]Note · Sonucu `ss -tlnp` ile kontrol edin: dahili servisler `10.88.0.x` göstermelidir, asla `0.0.0.0` veya herkese açık IP değil.
Ölçeklendirme: ne zaman araçlara geçmeli
Node sayısı az ve değişiklikler nadir olduğu sürece elle yazılmış bir mesh yeterlidir. Her yeni node mevcut tüm yapılandırmaları düzenlemek demektir, dolayısıyla iş karesel olarak büyür. Bu bir angaryaya dönüştüğünde yapılandırmaları yazmak yerine üretin.
NoctisNode'da tüm yeni VPS node'ları, her biri dedicated IPv4 ve ölçümsüz 1 Gbps port ile FI-1'de (Finlandiya) kurulur; saatlik faturalandırma ve agent API'si (otomatik silme TTL'i ile) test node'larını eklemeyi ve kaldırmayı ucuz hale getirir. Planlar Wisp seviyesinden başlar; bkz. VPS planları.
| Küme boyutu | Yaklaşım |
|---|---|
| 2–5 node | Elle yazılmış yapılandırmalar, adres planı bir metin dosyasında |
| 5–15 node | wg0.conf'u tek bir envanterden şablonlayan Ansible veya başka bir yapılandırma aracı |
| 15+ node veya sık değişim | Anahtarları ve peer'ları otomatik dağıtan bir mesh yöneticisi veya hub-and-spoke tasarımı |
SSS
QBirden fazla VPS'i özel bir ağa nasıl bağlarım?
AHer VPS'e WireGuard kurun, her node'a tek bir özel subnet'ten adres verin ve diğer her node'u herkese açık endpoint'i ve /32 AllowedIPs ile peer olarak listeleyin. Ardından dahili servisleri WireGuard adresine bağlayın.
QWireGuard mesh'teki VPN node'larının PersistentKeepalive'a ihtiyacı var mı?
AGenellikle hayır, çünkü her VPS node'unun herkese açık bir IP'si vardır ve doğrudan erişilebilir. `PersistentKeepalive = 25`'i yalnızca NAT arkasındaki bir node için ekleyin.
QHer VPS node'u için AllowedIPs ne olmalı?
AHer peer yalnızca kendi WireGuard adresini /32 olarak, artı o node'un yönlendirdiği herhangi bir subnet'i alır. Her peer için tüm küme subnet'ini kullanmak çakışan rotalara neden olur ve mesh'i bozar.
QBir WireGuard mesh'te kaç node olabilir?
AWireGuard'ın kendisi çok sayıda peer'ı kaldırır, ancak elle sürdürülen bir full mesh yaklaşık on node'dan sonra zahmetli hale gelir, çünkü her node diğer her node'un yapılandırmasına ihtiyaç duyar. Bunun ötesinde yapılandırmaları otomasyonla üretin veya bir mesh yöneticisi kullanın.