İçeriğe geç
Muhammet Şafak
en
Soran: Mert Cevaplandı:

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.

Kısa cevap

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 ağ katmanını kendi başına nasıl kurduğunu Docker kurulum ve kullanım yazısında anlatmıştım; çakışma da tam oradan, otomatik atanan köprü ağından çıkıyor.

Neden

  1. Docker havuzu rastgele seçtikçe çakışma kaçınılmaz. Otomatik ağ atama bir aralığı sizin adınıza seçer; WireGuard subnet’iniz o aralığa denk geldiği gün çakışma kendiliğinden oluşur.

  2. Geniş AllowedIPs default rotayı ele geçirir. 0.0.0.0/0 verirseniz WireGuard host’un tüm trafiğini tünele çeker (route hijack) ve sorun “çakışma”dan “her şey tünelden akıyor”a döner.

Ne yapmalı

  1. Docker’ın havuzunu sabitle. daemon.json içinde default-address-pools ile Docker’ın otomatik ağ atadığı bloğu, WireGuard subnet’iyle asla çakışamayacak bir aralığa pinle.

  2. WireGuard’a dar AllowedIPs ver. AllowedIPs yalnızca DB subnet’i olsun. Daraltınca çekirdek sadece DB trafiğini wg0’a yollar.

  3. Rotaları kalıcı yap. ip route add ad-hoc komutları reboot’ta uçar. Rotaları systemd-networkd/netplan ile tanımla ki yeniden başlatmada otomatik gelsin.

  4. DB kutusunu sadece wg0 üzerinden inbound tut. Veritabanını dünyaya NAT’lama; yalnızca tünelden gelen bağlantıyı kabul etsin.

  5. Doğrula. ip route get <db-ip> ile paketin gerçekten wg0’dan çıktığını, wg show ile 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’ye sadece tünelden eriş. Adresleme planı netse routing kendiliğinden stabil olur.

İlgili Yazılar

Paylaş:

Yorumlar

Yorum yapmak için GitHub hesabınızla giriş yapmanız yeterli. Yorumlar GitHub Discussions üzerinde saklanır.

Diğer Sorular

Tüm sorular

Sitede Ara

Yazı, proje ve sayfalarda arama yapmak için yazmaya başlayın.

Esc ile kapat Pagefind ile güçlendirildi