Ev ağım için NAT performans gösteren bir Linux ağ geçidim var. Paketleri şeffaf olarak iletmek istediğim başka bir ağım var, ancak yalnızca belirli IP / bağlantı noktalarına / bağlantı noktalarından (yani VPN değil). Aşağıda çalışmak için bazı örnek IP ve bağlantı noktaları bulunmaktadır:
Source Router Remote Gateway Remote Target
192.168.1.10 -> 192.168.1.1 -> 1.2.3.4 -> 192.168.50.50:5000
Kaynak makinesinin Uzak Hedef üzerindeki belirli portlarla doğrudan Yönlendiriciden yönlendirilebilirmiş gibi konuşabilmesini istiyorum. Yönlendiricide, eth0 özel ağ ve eth1 internete dönüktür. Uzak Ağ Geçidi, içine ssh edebileceğim başka bir Linux makinesidir ve doğrudan Uzak Hedef'e yönlendirilebilir.
Basit bir çözüm denemem Router'da ssh port yönlendirme kurmaktır, örneğin:
ssh -L 5000:192.168.50.50:5000 1.2.3.4
Bu, şimdi yerel olarak bağlantı noktası 5000'e bağlanabilen Yönlendirici için iyi çalışıyor. Bu nedenle, "telnet localhost 5000" beklendiği gibi 192.168.50.50:5000'e bağlanacak.
Şimdi, trafiği Kaynak ve dönüşüm hunisinden kurulan ssh tüneli üzerinden yönlendirmek istiyorum. Bunun için bir NAT kuralı denedim:
iptables -t nat -D PREROUTING -i eth0 -p tcp -s 192.168.1.10 --dport 5000 -d 1.2.3.4 -j DNAT --to-destination 127.0.0.1:5000
ve Yönlendirici zaten benim NAT ağ geçidim olduğundan, gerekli postrouting kuralına zaten sahip:
-A POSTROUTING -s 192.168.1.0/24 -o eth1 -j MASQUERADE
Bu sitedeki veya başka yerlerdeki çoğu Soru-Cevap, her ikisi de başka bir yerde iyi çalıştığım sunucu bağlantı noktaları veya saç tokası NAT ile uğraşıyor gibi görünüyor, ikisi de bu durum için geçerli değil. Kesinlikle DMZ'yi Uzak Hedef portlarını Uzak Ağ Geçidi üzerinden iletebilirim, ancak portların internete erişmesini istemiyorum, sadece güvenli SSH tünelinden erişilebilir olmasını istiyorum.
Bulabildiğim en iyi cevap, Linux çekirdeğindeki Mars paket reddi ile ilgilidir:
iptables, bağlantı noktası geri döngüden yönlendirmek nasıl?
Marslıların günlüğe kaydedilmesini sağladım ve çekirdeğin bu paketleri martians olarak reddettiğini doğruladım. Bunlar dışında: Bu paketlerin ne için olduğunu, nereden geldiklerini ve nereye gittiklerini biliyorum (ssh tünelim).
Orada sunulan "dolambaçlı" çözüm bu orijinal soru için geçerlidir, ancak benim durumum için geçerli değildir.
Ancak, bu soruyu yazarken / araştırırken, SSH kaynak IP bağlamasını kullanarak sorunum etrafında çalıştım:
ssh -L 192.168.1.1:5000:192.168.50.50:5000 1.2.3.4
iptables -t nat -D PREROUTING -i eth0 -p tcp -s 192.168.1.10 --dport 5000 -d 1.2.3.4 -j DNAT --to-destination 192.168.1.1:5000
Geridöngü kullanmadığım için bu, Mars'ın reddi ile başa çıkıyor.
Soruyu hala iki nedenden dolayı burada gönderiyorum:
- Umarım gelecekte benzer bir şey yapmaya çalışan biri bunu aramalarında bulabilir ve bu geçici çözüm onlara yardımcı olabilir.
- Hala ssh port ileri bağlantı sadece loopback bağlı tutmak ve iptables yoluyla onlara yönlendirmek için fikir tercih. Bu paketlerin tam olarak ne olduğunu ve nereye gittiğini bildiğim için, onları Linux martian filtrelemenin reddetmemesi için işaretlemem için bir yol olmamalı mı? Bu konuda yaptığım tüm aramalar, testlerimde hiç yardımcı olmayan rp_filter'a yol açıyor. Ve işe yarasa bile, izin vermeye çalıştığım tam paketlere özgü değil.
Soruma katkıda bulunmakla ilgileniyorum ve sadece ölü uçlarla gelmek için yaptığım arama saatlerini başka birini kurtarmak için genel aramaya geçici çözüm bulmakla ilgileniyorum ve umarım birisinin hala açık kalan sorumun geri dönüş / martian bölümüne cevap vermesini istiyorum bana göre.