Bir istemci birkaç OpenVPN sunucusundan birine bağlanır ve ardından o düğümde çalışan küçük bir hizmete ihtiyaç duyar: bir durum sayfası, bir metrik uç noktası, bir yedekleme aracısı. Her düğüme aynı özel hizmet adresini vermek, istemci yapılandırmasını hangi sunucuya düştüğünden bağımsız olarak aynı kılar. Bu kolaylık gerçektir ve fazla okumak da kolaydır: paylaşılan adres hangi düğüme ulaştığınızı söyler, bir şeyin yedekli olduğunu değil.

Aynı adres neden her düğümde çalışır

Her düğüm adresi yerel olarak bulundurur ve onun adına yanıt verir, böylece mevcut tüneli üzerinden ona ulaşan istemci hizmeti o tünelin diğer ucunda alır. Düğümler arasında hiçbir şey koordine edilmez ve bir düğümden diğerine trafik geçmez.

Adres yerel bir etikettir, çoğaltılmaz ama yinelenir. Her düğüm yalnızca kendisi için yanıt verir ve hiçbiri adres için trafiği başka bir düğüm adına iletmez. Sunucular bağımsız kalırken tek bir istemci yapılandırmasını geçerli tutan budur. Tasarımın düğümler arasında hiçbir koordinasyona ihtiyaç duymamasının nedeni de budur.

Bu yüzden aynı yapılandırma, aralarında bir yönlendirme protokolü olmadan her sunucuda çalışır. Tasarımın sağlık hakkında hiçbir şey söylememesinin nedeni de budur: adres, hizmetin yararlı olmasına değil ana makineye bağlı olduğu için, hasta bir düğümde de sağlıklı olanda olduğu gibi bulunur.

Onu tünele değil loopback’e atayın

Adresi bir loopback arayüzüne koymak, onu herhangi bir tünel aygıtının ömründen ayırır, böylece yeniden bağlanma veya yapılandırmanın yeniden yüklenmesi onu kaldırmaz. Ana makine var olduğu sürece adres vardır.

lo üzerindeki bir adres filtre değildir. Hizmet yine de onu dinlemek zorundadır ve ana makinenin güvenlik duvarı gerçek gelen yolu hâlâ değerlendirir, bu yol tünel arayüzüne gelir. Loopback’in yalnızca yerel anlamına geldiğini varsayan kişi sonunda ya meşru istemcileri engeller ya da amaçlamadığı bir şeyi açığa çıkarır.

Atamayı bir hook’tan yeniden eklemek yerine ana makinenin ağ yapılandırması aracılığıyla kalıcı yapın. Kurulum hook’u hiçbir tünelin açılmadığı bir düğümde çalışmaz ve hizmet adresi tünel etkinliğine bağlı olmamalıdır. Adresi dağıtımınızın sahip olduğu arayüz yapılandırmasına koyun, ardından bir kez yeniden başlatıp kontrol edin. Yeniden başlatma, sonraki bir yapılandırma değişikliğine dayanan tek testtir.

ip address show dev lo | grep 10.250.0.1
ip address add 10.250.0.1/32 dev lo

Bir yolu it ve tek bir hedefi kastet

İstemcinin adres için bir ana makine yoluna ihtiyacı vardır ve bunu bağlandığı sunucu sunar. Her sunucu aynı hedefi sunduğu için istemci hareket ettiğinde profil değişmez.

Hizmeti suçlamadan önce istemcinin ne kurduğunu doğrulayın.

ip route get 10.250.0.1

Bir HTTP hizmeti için adrese bir ad ve o ad için bir sertifika verin. Paylaşılan IP bir kimlik değildir ve TLS doğrulamasını kaldırmaz, tek bir özel anahtarın her düğüme kopyalanmasını da haklı çıkarmaz. Paylaşılan adrese çözülen bir ad, sertifika hikâyesini olağan tutar ve gerekirse düğüm başına kimliği korumanıza izin verir.

Paylaşılan adresin yapamadıkları

Arıza durumunda devretme sağlamaz. Seçilen düğüm ölürse adres de onunla ölür ve istemci başka bir yerde yeniden bağlanmak zorundadır.

Canlı bir TCP oturumunu taşımaz, çünkü yeni bağlantı eskiyi hiç bilmeyen başka bir ana makinede sonlanır.

Sağlıklı bir düğüm seçmez, yükü dengelemez ve düğümler arasında veri eşitlemez. Bunların her biri kendi arıza biçimlerine sahip ayrı bir mekanizmadır ve adresleme hilesinin bunları kapsadığını iddia etmek, basit bir tasarımın hak etmediği bir dayanıklılık ünü kazanma yoludur. İki tünel aynı anda etkinse hedefin anlamı belirsizleşir, bu yüzden tek etkin tünel varsayımını açık tutun.

Hizmet kimliğini adla birlikte tutun

Adresin ne anlama geldiğini yazın: istemcinin şu anda bağlı olduğu düğümdeki hizmete ulaşır. O tek cümle, bu desenin çektiği yanlış anlamanın çoğunu önler.

Sonra parçaları birlikte belgeleyin: adres, üzerinde yaşadığı arayüz, sunucunun ittiği yol ve hizmetin sunduğu ad ile sertifika. Gelecekteki bir okuyucunun doğrulayabileceği dört küçük olgu, onları kontrol edeceği sırayla.

Gereksinim, düğüme yerel bir hizmet için kararlı bir hedefse, desen uygundur ve neredeyse hiçbir maliyeti yoktur.

Gereksinim kullanılabilirlikse bir kat yukarı çıkın: bir yük dengeleyici, sağlık kontrolleri olan bir hizmet adı veya bir düğümün nasıl değiştirileceğini zaten bilen bir orkestrasyon sistemi.

Buna erken karar vermek, paylaşılan adresi olduğu şey olarak, yani kullanışlı bir etiket olarak tutar; hiç tasarlanmadığı bir işi sessizce yapması beklenen bir bileşen olarak değil.

İlgili makaleler