WireGuard ile Docker ağları çakışıyor, routing'i nasıl stabilize ederim?
Soru
Ubuntu VPS'imde dışa kapalı bir veritabanı kümesi var; ana arayüz `ens192`. Güvenli erişim için bir WireGuard tüneli kurdum. VPN ayağa kalkınca yerel Docker ağları (`docker0`) ile WireGuard alt ağları arasında IP çakışması ve routing hataları çıkıyor. Sunucu düzeyinde network izolasyonunu ve routing tablosunu kalıcı olarak nasıl stabilize ederim?
Cevap
Kısa cevap: Kök neden çakışan RFC1918 aralıkları. Çözüm runtime hilesi değil, deterministik bir adresleme planı: Docker’ın havuzunu sabitle, WireGuard’ın AllowedIPs’ini daralt, rotaları kalıcı yap.
Bu bir “rota bug’ı” değil, bir planlama sorunu: WireGuard ayağa kalkınca aynı 172.x/10.x aralığına oturan iki ağ var ve çekirdek hangisini routing yapacağını şaşırıyor.
- Docker’ın havuzunu sabitle.
daemon.jsoniçindedefault-address-poolsile Docker’ın otomatik ağ atadığı bloğu, WireGuard subnet’iyle asla çakışamayacak bir aralığa pinle. Docker rastgele subnet seçtikçe çakışma kaçınılmaz; bunu elinle belirle. - WireGuard’a DAR
AllowedIPsver.AllowedIPsyalnızca DB subnet’i olsun —0.0.0.0/0değil. Geniş tutarsan WireGuard host’un tüm default rotasını ele geçirir (route hijack) ve her şey tünelden akmaya çalışır. Daraltınca çekirdek sadece DB trafiğiniwg0’a yollar. - Rotaları kalıcı yap.
ip route addad-hoc komutları reboot’ta uçar. Rotalarısystemd-networkd/netplan ile tanımla ki yeniden başlatmada otomatik gelsin. “Çalışıyordu, sonra restart’ta bozuldu” derdinin tek kalıcı çözümü bu. - DB kutusunu sadece
wg0üzerinden inbound tut. Veritabanını dünyaya NAT’lama; yalnızca tünelden gelen bağlantıyı kabul etsin. Dışa kapalı kümenin anlamı bu — erişim tek kapıdan, o kapı da WireGuard. - Doğrula.
ip route get <db-ip>ile paketin gerçektenwg0’dan çıktığını,wg showile handshake’in canlı olduğunu gör. Tahminle değil, bu iki komutla teyit et.
Sonuç: Çakışmaları runtime’da kovalamayı bırak; bu bir planlama problemi. Ben olsam her arayüz için (ens192 / docker0 / wg0) belgelenmiş, çakışmayan bir subnet planı yazardım. Docker havuzunu pinle, AllowedIPs’i daralt, rotaları systemd ile kalıcı kıl, DB’yi sadece tünelden eriş. Adresleme planı netse routing kendiliğinden stabil olur.
İlgili Yazılar
Yorumlar
Yorum yapmak için GitHub hesabınızla giriş yapmanız yeterli. Yorumlar GitHub Discussions üzerinde saklanır.