Passthrough'da SNI'ye göre farklı backend'lere yönlendirme yapabilir miyim?
Kısa cevap
Evet, L7 TCP vService'te. Frontend Protocol = TCP seçilir (TLS çözülmez); her alan adı için SSL SNI Info koşulu oluşturulur ve Conditional Backend Services kurallarıyla ilgili Kurum Servislerine bağlanır. TR7, TLS el sıkışmasının ilk mesajındaki (ClientHello) SNI'yi okuyup bağlantıyı şifreyi açmadan doğru sunucuya iletir. Koşul tam ad eşleşmesi yapar (büyük/küçük harfe duyarsız). HTTP vService'te TLS TR7'de sonlandırıldığı için, Network vService'te ise SNI okunmadığı için bu yöntem kullanılamaz.
Sorun: Birden Fazla Site Aynı IP'yi Paylaşıyor ama Sertifikalar Sunucularda
Birden fazla HTTPS sitesi aynı IP ve portu paylaşırken sertifikalar ve özel anahtarlar sunucularda kalmak zorunda olabilir. TR7'nin TLS'i açmadan, istemcinin istediği alan adına göre bağlantıyı doğru sunucuya göndermesi gerekir.
Çözüm
Passthrough yapan L7 TCP vService'te her alan adı bir SSL SNI Info koşuluyla ayırt edilir ve kendi Kurum Servislerine bir Conditional Backend Services kuralıyla bağlanır.
SSL SNI Info + Conditional Backend Services
- Nasıl çalışır Koşul, ClientHello'daki SNI'yi tam adla karşılaştırır; eşleşen kuralın Kurum Servislerine bağlantı iletilir, hiçbir kurala uymayanlar Default Backend Services'e gider.
- Nerede açılırLoad Balancer → Conditions · L7 TCP vService → Conditional Backend Services
- Gereksinim Protocol = TCP olan L7 TCP vService; istemcilerin SNI göndermesi
- vService tipi L7 TCP
Adım adım yapılandırma
Load Balancer → Conditions ekranında Add tıklanır (nasıl eklenir).
Condition Name girilir (ör. sni-a); Criteria = SSL SNI Info seçilir ve Query alanına alan adı yazılır (ör. a.example.com). Eşleşme tam addır; joker (*.example.com) ya da birden fazla ad girilemez.
Add tıklanır. Her alan adı için 1–3. adımlar tekrarlanır; Add & Repeat formu açık tutar.
Load Balancer → Backend Services ekranında Add tıklanır (nasıl eklenir). Sunucular zaten tanımlıysa 4–6. adımlar atlanır; o Kurum Servislerinde SSL Service'in kapalı olduğu kontrol edilir.
Backend Service Name girilir; Address alanına sunucunun IP'si ve TLS dinlediği port yazılır (ör. 192.0.2.21 : 443). SSL Service kapalı bırakılır (varsayılan); bağlantı sunucuya şifreli olduğu gibi iletilir.
Add tıklanır. Her alan adının her sunucusu için 4–6. adımlar tekrarlanır.
Load Balancer → Load Balancer vService List ekranında passthrough yapan L7 TCP vService seçilip Edit tıklanır. Henüz yoksa Add tıklanır, Type = L7 TCP seçilir ve Name girilir (nasıl eklenir).
Frontend satırında Frontend IP seçilir, Port = 443 ve Protocol = Unencrypted grubundaki TCP olmalıdır. Encrypted (TLS) grubundaki TCP + TLS TLS'i TR7'de sonlandırır; o durumda SSL SNI Info koşulu eşleşmez.
Backend Services tablosunun başlığındaki + Conditional Backend Services tıklanır; tablonun üstünde CONDITIONAL BACKEND #1 bloğu açılır.
Blokta koşul olarak 2–3. adımlarda oluşturulan ilk SSL SNI Info koşulu seçilir; bloğun Backend Services tablosuna o alan adının Kurum Servisleri eklenir. Her alan adı için 9–10. adımlar tekrarlanır. Kurallar yukarıdan aşağıya değerlendirilir, ilk eşleşen kural uygulanır; sıra sürükle-bırak ile değiştirilir.
Default Backend Services tablosunda SNI göndermeyen ya da hiçbir kurala uymayan bağlantıların gideceği Kurum Servisi seçilir. Tablo boş bırakılırsa bu bağlantılar reddedilir.
Save tıklanır (yeni vService için de aynı buton kullanılır). Cluster kurulumunda varsayılan auto-sync ile değişiklik eş cihaza da gönderilir; Manual Sync Mode açıksa eş cihaza elle gönderilir.
Doğrulama
Aynı adrese iki farklı alan adıyla bağlanılır.
Komut: openssl s_client -connect 203.0.113.10:443 -servername a.example.com · openssl s_client -connect 203.0.113.10:443 -servername b.example.com
Her ad kendi sunucusunun sertifikasını döndürürSık Yapılan Hatalar
- Protocol'ü TCP + TLS seçmek. TCP + TLS, TLS'i TR7'de sonlandırır ve sertifika ister; passthrough için Protocol TCP olmalıdır.
- Koşulda joker kullanmak. SSL SNI Info tam ad karşılaştırır; her alan adı için ayrı koşul ve kural yazılır.
- Sunucunun önce konuştuğu protokollerde kullanmak. Koşul tanımlı vService'te TR7, bağlantının ilk paketinde TLS el sıkışmasını bekler; SMTP'de, FTP'de ya da STARTTLS kullanan herhangi bir protokolde SNI okunamaz ve bağlantının kabulü 10 saniyeye kadar gecikir. Bu protokoller ayrı bir vService'te tutulur.
- Kurum Servisinde SSL Service'i açmak. Passthrough'ta bağlantı zaten şifreli geldiği için iki TLS katmanı üst üste biner ve bağlantı kurulamaz.
- HTTP vService'te bu koşulu aramak. HTTP vService TLS'i sonlandırır; orada alan adına göre ayrım Virtual Hosting ya da Host koşullarıyla yapılır ve bu passthrough değildir.
Dokümantasyonda nasıl yapılır
