WireGuard ana makine öneki: neden bir adres çalışıyor, diğerleri çalışmıyor
Arayüzdeki /32 geçerli bir ana makine önekidir ve yalnızca o adresi yönlendirir. AllowedIPs’in ima ettiği rotayı ekleyin, ardından dönüş yolunu denetleyin.
Tünel ayakta, handshake her iki dakikada bir gerçekleşiyor ve karşı tarafta tam olarak bir adres yanıt veriyor. Eşin tünel adresine pingler çalışıyor; arkasındaki hiçbir şey çalışmıyor. Birisi arayüz yapılandırmasını okuyor, bir ana makine öneki görüyor ve maskenin yanlış olduğu sonucuna varıyor. Öneki /24’e genişletmek pingi bir süre düzeltiyor, sonra başka bir şeyi bozuyor. Önek hiçbir zaman suçlu değildi ve eksik olan rota maskenin denetlediği rota değil.
Arayüz öneki gerçekte ne oluşturur
Linux’ta bir arayüze adres atamak, o önek için bağlantılı bir rota oluşturur. Ana makine öneki atarsanız bağlantılı rota tek bir adresi kapsar. /24 atarsanız 256 adresi kapsar ve bunların her biri artık o bağlantı üzerinden erişilebilir sayılır.
ip -4 addr show dev wg0
ip -4 route show dev wg0
ip route get 10.80.7.1
Ana makine öneki, noktadan noktaya bir tünel için tamamen normal bir seçimdir, çünkü diğer uçta tam olarak bir eş vardır. Üçüncü komut kullanıcının sorusunu yanıtlayandır: çekirdeğin o hedef için hangi arayüzü kullanacağını söyler ve hiçbir rota uyuşmazsa yararlı bir şey göstermez.
Semptomun tüm açıklaması budur. Bir adres yanıt veriyor çünkü onun için bağlantılı bir rota var ya da eşin izin verilen listesi onu tesadüfen içeriyor. Geri kalan her şeyin rotası yoktur ve WireGuard devreye girmeden önce düşürülür. Tünel baştan sona sağlıklıdır, bu yüzden handshake sayacı güven verici görünmeye devam eder.
AllowedIPs tek ad altında iki kuraldır
WireGuard’ın eş başına izin verilen listesi aynı anda iki iş yapar ve yapılandırma sözdizimi bunları tek gibi gösterir. Girişte, bir eşin hangi kaynak adresleri sunabileceğini yetkilendirir. Çıkışta, en belirgin eşleşmeyi bularak paketin hangi eşe gönderileceğini seçer.
Bu işlerin hiçbiri yönlendirme değildir. Çekirdek, WireGuard ona bakmadan önce paketin tünel arayüzüne ait olduğuna karar vermek zorundadır ve bu karar yönlendirme tablosundan gelir. Geniş izin verilen listeye sahip bir eş girdisi kendi başına rota kurmaz.
Bu yüzden bir yapılandırma eksiksiz görünüp asimetrik davranabilir. İstemci karşı tarafa gönderir çünkü bir rota vardır, yanıtlar ise hiç ulaşmaz çünkü karşı tarafın izin verilen listesi istemcinin kaynağına izin vermiyor ya da karşı tarafın dönüş yolu yok. İki yön de ayrı kararlardır, ayrı hata kiplerine sahiptir. Hangisini test ettiğinizi yazmak teşhisin yarısıdır.
Rota nereden gelir
wg-quick kullanıyorsanız rotalar her eşin izin verilen listesinden sizin için oluşturulur; ancak Table = off ayarlayıp denetimi kendiniz aldıysanız oluşturulmaz. Bu, aracın belgelediği davranıştır ve açık rota direktifleri olmayan bir yapılandırmanın yine de çalışmasının nedeni budur.
sudo wg show wg0 allowed-ips
ip route show | grep wg0
sudo wg-quick strip wg0
İzin verilen listeyi gerçekte var olan rotalarla karşılaştırın. Bütün bir alt ağa izin verip yalnızca bir ana makine rotası üreten eş, yardımcının hiç çalışmadığı ya da arayüzü doğrudan wg ve ip ile yönettiğiniz anlamına gelir; o durumda sizin için hiçbir şey rota üretmiyordur.
Elle yönettiğinizde rota tek satırdır ve biçimi açıktır: hedef arayüz üzerinden, ağ geçidi yok çünkü bağlantı noktadan noktaya. Onu eklemek kötü bir önek için geçici çözüm değildir; yönlendirmeyi bilinçli olarak üstlenen bir tasarımın eksik yarısıdır.
Daha geniş bir önek eş girdisini eklemez
Cazip düzeltme, adresi /24’e değiştirip bağlantılı rotanın sunucunun yerel ağını kapsamasını sağlamaktır. İşe yarıyor gibi görünür ve işe yarıyor gibi görünmesinin nedeni bağlantılı rotanın artık uyuşmasıdır, WireGuard’ın yeni bir şey öğrenmesi değil.
Ayrıca yaptığınız şey, tüm aralığı o bağlantı üzerinden doğrudan erişilebilir olarak talep etmektir; buna başka eşlere ya da gerçekte sunucunun arkasında olan bir yerel ağa ait adresler de dahildir. Bu adreslere giden trafik artık tünele girer ve diğer taraftan çıkıp çıkmayacağı sunucunun kendi yönlendirmesine ve izin verilen listelerine bağlıdır.
Kriptografik taraf her durumda etkilenmez. WireGuard bir eş seçmek için hedefi kapsayan bir izin verilen liste girdisine hâlâ ihtiyaç duyar ve karşı taraf da kaynağınızı kapsayan bir girdiye onu kabul etmek için hâlâ ihtiyaç duyar. Daha geniş bir arayüz öneki ikisini de sağlayamaz.
Bir şeyi değiştirmeden önce iki yönü de doğrulayın
İki ucu ayrı ayrı ele alın ve her birinin ne söylediğini yazın. İstemcide rota ve eş girdisi; sunucuda ayna görüntüsü artı kendi dönüş yolu:
ip route get 192.168.70.20
sudo wg show wg0 allowed-ips
sudo wg show wg0 latest-handshakes
sudo tcpdump -ni wg0 -c 10
Yakalama, yön konusundaki anlaşmazlıkları çözen şeydir. Giden paketler tünel arayüzünde görünüyor ve sunucu hiçbir şey kaydetmiyorsa, uzak uç onları reddediyordur, genellikle kaynağınız onun izin verilen listesinin dışında olduğu için. Hiçbir şey görünmüyorsa rota eksiktir ya da başka bir yeri gösteriyordur.
Sonra daha dar ucu düzeltin. Sunucu tarafında istemci adresiniz için bir izin verilen liste girdisi ve istemci tarafında hedef alt ağ için bir girdi normal biçimdir ve arayüz önekine dokunmaz. Öneki yalnızca adres planı o bağlantıda gerçekten ortak bir alt ağ istiyorsa genişletin ve bunu bir hata ayıklama adımı değil, plan değişikliği olarak yapın.