Görünüşe göre bariz bir iptables -t nat -A PREROUTING -d 192.168.12.87 -p tcp --dport 80 -j DNAT --to-destination 192.168.12.77
şekilde işe yaramayacağının nedeni iade paketlerinin nasıl yönlendirileceğidir.
192.168.12.87'ye gönderilen paketlerin yalnızca 192.168.12.77'ye NATlanmış olmasına izin verecek kuralları ayarlayabilirsiniz, ancak 192.168.12.77 daha sonra doğrudan müşteriye yanıtları gönderir. Bu yanıtlar iptables kuralınızın NAT yaptığı ana makineden geçmeyecektir, dolayısıyla bir yöndeki paketler çevrilmiştir, ancak diğer yöndeki paketler değildir.
Bu sorunu çözmek için üç yaklaşım var.
- İlk ana bilgisayarda sadece DNAT değil, aynı zamanda geri dönüş trafiğinin ilk ana bilgisayardan geri gönderileceği şekilde SNAT da yapar. Kural gibi bir şey olabilir
iptables -t NAT -A POSTROUTING -d 192.168.12.77 -p tcp --dport 80 -j SNAT --to-source 192.168.12.87
- DSR yük dengelemesinden ilham alın ve paketleri IP katmanı yerine Ethernet katmanında DNAT yapın. Paketlerin hedef MAC'larını 192.168.12.77 MAC'iyle değiştirip IP katmanına dokunmadan Ethernet'e göndererek, 192.168.12.77, sahte bir arayüzde yapılandırılmış 192.168.12.87'ye sahip olabilir ve böylece TCP bağlantısını sonlandırabilir. istemciye bilinen sunucu IP'si ile.
- İlk konakta saf (ancak çalışmıyor) çözümünü kullanın. Ardından, geri dönüş trafiğinde bir SNAT yaparak geri dönüş paketlerini ikinci ana bilgisayar üzerinde kullanın. Bir kural gibi görünebilir
iptables -t nat -A OUTPUT -p tcp --sport 80 -j SNAT --to-source 192.168.12.87
Bu üç çözümün dezavantajları vardır, bu yüzden bu özel iletmeyi gerçekten yapmanız gerekiyorsa, dikkatlice düşünmeniz gerekir.
- SNAT kullanımı istemci IP'sini kaybedecek, böylece 2 numaralı ana bilgisayar tüm bağlantıların 192.168.12.87'den geldiğini düşünecek. Ek olarak, diğer yaklaşımlarla daha doğrudan bir rota izleyen tüm cevap paketleri için ana bilgisayar numarası 1 üzerinden bant genişliğini kullanacaksınız.
- DSR yaklaşımı, iki düğüm arasındaki diğer tüm iletişimi koparır. DSR yaklaşımı gerçekten, yalnızca sunucu adresi ana bilgisayarların hiçbirinin birincil IP'si olmadığında uygundur. Her ana bilgisayarın, DSR IP'si olmayan bir birincil IP'ye sahip olması gerekir.
- Bir yöne çevirmek için bir ana bilgisayar üzerinde bağlantı izlemeyi kullanmak ve diğer yöne çevirmek için başka bir ana bilgisayardan bağlantı izlemeyi kullanmak çirkindir ve kırılmasının çeşitli yolları vardır. Örneğin, port numaraları NAT tarafından her iki ana bilgisayarda da değiştirilirse, bunları yeniden yapılandırmanın bir yolu yoktur. Ayrıca, ilk gördüğü paket bir ACK yerine bir SYN-ACK ise, bağlantı izlemenin düzgün çalışacağı da verilmez.
Üç yaklaşımdan ilki işe yaraması muhtemel olan ilk yaklaşım olduğunu düşünüyorum. Dolayısıyla, istemcinin IP adreslerini bilmeniz gerekmiyorsa, tavsiye edeceğim adres budur.
Ayrıca NAT'ı tamamen unutmayı seçebilir ve sorunu MAC veya IP katmanında çözmeye çalışabilirsiniz. HTTP katmanına kadar gidebilir ve orada bir çözüm arayabilirsiniz. Bu durumda bulacağınız çözüm bir HTTP proxy'sidir. 192.168.12.87'ye bir HTTP proxy yükler ve uygun şekilde yapılandırırsanız, istekleri 192.168.12.77'ye iletmesini ve yanıtları geri iletmesini sağlayabilirsiniz. Ek olarak, orijinal istemci IP'sini koruyan bir X-Forwarded-For başlığı da ekleyebilir. 192.168.12.77'deki sunucunun, 192.168.12.87'den X-Forwarded-For başlığına güvenecek şekilde yapılandırılması gerekir.