HTTP olmayan TCP servislerinde gerçek istemci IP'sini nasıl iletirim?
Kısa cevap
HTTP başlığı eklenemediği için üç yol vardır: L7 TCP vService'te sunucu destekliyorsa Kurum Servisinin Proxy alanında PROXY protokolü (Proxy ya da Proxy v2) açılır; sunucuda ayar yapılamıyorsa SNAT alanında Use Client IP seçilir ve yanıtların TR7'den dönmesi için sunucuların default gateway'i TR7 yapılır ya da Spoofing açılır; Network vService'te ise LB Mode olarak Route Mode ya da Direct Server Return seçilir. X-Forwarded-For ve başlık aksiyonları yalnızca HTTP vService'te çalışır.
Sorun: SMTP, Veritabanı ya da Özel Protokol Sunucusu İstemciyi Göremiyor
E-posta, veritabanı, dizin ya da özel TCP protokolleri çalıştıran sunucular istemci IP'sini güvenlik kuralları (ör. SMTP'de gönderen IP kontrolü), kayıt ve yetkilendirme için kullanır. L7 TCP vService'te TR7 sunucuya kendi adresiyle bağlandığı (SNAT Default) ve bu protokollere HTTP başlığı eklenemediği için istemci IP'si bağlantı düzeyinde taşınmalıdır.
Çözüm: 3 Yöntem
Yöntemler birbirinin alternatifidir; vService tipine, sunucunun PROXY protokolünü destekleyip desteklemediğine ve ağ düzenine göre seçilir.
| Durumunuz | Uygun yöntem |
|---|---|
| L7 TCP; sunucu PROXY protokolünü destekliyor (ör. Postfix, Dovecot, Nginx stream) | Yöntem 1: L7 TCP + PROXY protokolü |
| L7 TCP; sunucuda ayar yapılamıyor, sunucuların gateway TR7 yapılabiliyor ya da Spoofing kullanılabiliyor | Yöntem 2: L7 TCP + Use Client IP |
| Network vService (TCP - L4 / UDP - L4) | Yöntem 3: Network vService'te LB mode |
Yöntem 1: L7 TCP + PROXY Protokolü Önerilen
- Nasıl çalışır TR7 her bağlantının başında istemcinin IP ve portunu taşıyan PROXY ön bilgisini gönderir; sunucu bu bilgiyi istemci adresi olarak kullanır. Ağda değişiklik gerekmez.
- Nerede açılırLoad Balancer → Backend Services → Edit → Details → Proxy
- Gereksinim Sunucunun PROXY protokolünü desteklemesi ve bekleyecek şekilde yapılandırılması; health check'in TCP türünde olması ya da ayrı bir porta yapılması
- vService tipi L7 TCP, HTTP
Adım adım yapılandırma
Sunucuda PROXY protokolü kabulü açılır (ör. Postfix'te smtpd_upstream_proxy_protocol = haproxy, Nginx stream'de listen … proxy_protocol); sunucu hazırlanmadan TR7'de açılırsa bağlantılar kurulamaz.
Health check'ler PROXY ön bilgisi göndermez; bu yüzden Kurum Servisine TCP türünde bir health check atanır ya da 7. adımda PROXY beklemeyen ayrı bir sağlık portu denetlenir. TCP türünde profil yoksa Load Balancer → Profiles → Health Checks → Add tıklanır (Nasıl eklenir?); profil zaten varsa 2–4. adımlar atlanır.
Name girilir ve Check Type = TCP seçilir (varsayılan HTTP'dir; tür kayıttan sonra değiştirilemez).
Formdaki Add butonuna tıklanır.
Load Balancer → Backend Services ekranında Kurum Servisine sağ tıklanıp Edit seçilir.
Formun altındaki Details anahtarı açılır.
Proxy alanında sunucunun desteklediği sürüm seçilir: Proxy (v1, metin) ya da Proxy v2 (ikili). Varsayılan No Proxy'dir. Health Check alanında TCP türündeki profil seçilir ya da Use Different IP for Health Check alanında Different address seçilip PROXY beklemeyen sağlık adresi ve portu girilir.
Formun altındaki Edit butonuna tıklanır; Kurum Servisini kullanan bütün vService'ler bu davranışı devralır.
Doğrulama
Sunucu logunda bağlantının istemci adresi görülür (ör. Postfix'te connect from satırı).
connect from unknown[198.51.100.45]Yöntem 2: L7 TCP + SNAT → Use Client IP
- Nasıl çalışır TR7 sunucuya istemcinin IP'siyle bağlanır; sunucuda uygulama ayarı gerekmez. Sunucu yanıtı istemcinin adresine gönderdiğinden yanıtın TR7'ye ulaşması gerekir.
- Nerede açılırLoad Balancer → Backend Services → Edit → Details → SNAT → Use Client IP
- Gereksinim Yanıtların TR7'den dönmesi: sunucuların default gateway'i TR7'nin bu ağdaki IP'si olur; gateway değiştirilemiyorsa Spoofing açılır
- vService tipi L7 TCP, HTTP
Adım adım yapılandırma
Sunucuların default gateway'i, TR7'nin sunucularla aynı ağdaki IP'si (cluster'da bu ağdaki VIP) yapılır. Bu değişiklik sunucu ya da ağ tarafında yapılır; yapılamıyorsa 5. adımda Spoofing açılır (SNAT kullanmadan (transparent mode) çalışmak mümkün mü; gereksinimleri nelerdir?).
Load Balancer → Backend Services ekranında Kurum Servisine sağ tıklanıp Edit seçilir.
Formun altındaki Details anahtarı açılır.
SNAT alanında Use Client IP seçilir (varsayılan Default).
Sunucuların default gateway'i değiştirilemiyorsa Spoofing açılır (yalnızca Use Client IP seçiliyken görünür; varsayılan kapalı). Spoofing IP boş bırakılırsa Route table'ın default gateway'i hedeflenir; cluster'da Spoofing IP VIP Condition ile Spoofing'in VIP'in etkin olduğu cihazda çalışması sağlanır.
Formun altındaki Edit butonuna tıklanır.
Doğrulama
Sunucuda gelen bağlantıların kaynak adresi dinlenir (örnekte port 25).
tcpdump -n 'tcp dst port 25 and tcp[tcpflags] & tcp-syn != 0'IP 198.51.100.45.51234 > 192.0.2.20.25: Flags [S]Yöntem 3: Network vService'te LB mode
- Nasıl çalışır Network vService bağlantıyı sonlandırmaz; Route Mode ve Direct Server Return istemci IP'sini değiştirmeden sunucuya iletir. UDP servisleri için de geçerlidir.
- Nerede açılır Network vService → LB Mode
- Gereksinim Route Mode: sunucuların default gateway'i TR7 · Direct Server Return: sunucuların TR7 ile aynı L2 ağda olması ve vService adresini kabul edecek şekilde hazırlanması
- vService tipi Network (TCP - L4, UDP - L4; Port range kapalı)
Adım adım yapılandırma
Load Balancer → Load Balancer vService List ekranında Network vService seçilip Edit ile açılır.
LB Mode alanında Route Mode ya da Direct Server Return (varsayılan) seçilir. Protocol ANY - L3 ya da Port range açıkken mod uygulanmaz; bu durumda vService'te SNAT IP seçilmezse istemci IP'si korunur ve yanıtın TR7'den dönmesi gerekir.
Route Mode'da sunucuların default gateway'i TR7 yapılır (Route Mode'da dönüş trafiği neden TR7 üzerinden akmak zorunda?); Direct Server Return'de sunucuda vService adresi yerel adres olarak tanımlanır ve bu adres için ARP yanıtı kapatılır (Direct Server Return (DSR) nedir; sunucu tarafında ne hazırlık gerekir?).
Save butonuna tıklanır. Network vService'te her kayıt vService'i yeniden başlatır; değişiklik düşük trafikli bir zamanda yapılır.
Doğrulama
Sunucuda gelen bağlantının kaynak adresine bakılır.
tcpdump -n 'tcp dst port 25'IP 198.51.100.45.xxxxx > …Sık Yapılan Hatalar
- Use client IP seçip dönüş yolunu hazırlamamak. Sunucuların default gateway'i TR7 değilse ve Spoofing kapalıysa yanıtlar TR7'yi atlar, bağlantılar kurulamaz.
- L7 TCP'de X-Forwarded-For aramak. Başlık yalnızca HTTP vService'te eklenir.
- Network vService'te Kurum Servisinin Proxy ya da SNAT alanını değiştirmek. Network vService bu alanları kullanmaz; LB mode belirleyicidir.
- UDP için PROXY protokolü ya da Use client IP beklemek. UDP yalnızca Network vService'tedir; orada LB mode kullanılır.
Dokümantasyonda nasıl yapılır
