Soru localhost için çalışmayan iptables port yönlendirmesi


Tüm trafiği 443 numaralı bağlantı noktasından iç bağlantı noktasına 8080 yönlendirmek istiyorum. Bu yapılandırmayı iptables için kullanıyorum:

iptables -t nat -I PREROUTING --source 0/0 --destination 0/0 -p tcp \
         --dport 443 -j REDIRECT --to-ports 8080

Bu, tüm harici istemciler için çalışır. Ama aynı maschine 443 numaralı bağlantı noktasına erişmeye çalışırsam bağlantı reddedildi hatası alırım.

wget https://localhost

Yerel trafiği yeniden yönlendirmek için iptables kuralını nasıl genişletebilirim?


47
2017-12-11 11:41


Menşei


Bu konu daha genel bir cevap vermektedir: serverfault.com/questions/380447/iptables-preroute-localhost - Jeroen
Temsilli birisi, hat kesintisinden önce komutta ters eğik çizgi ekleyebilir mi? - Ciro Santilli 新疆改造中心 六四事件 法轮功


Cevaplar:


PREROUTING geridöngü arabirimi tarafından kullanılmaz, ayrıca bir ÇIKIŞ kuralı eklemeniz gerekir:

iptables -t nat -I PREROUTING -p tcp --dport 443 -j REDIRECT --to-ports 8080
iptables -t nat -I OUTPUT -p tcp -o lo --dport 443 -j REDIRECT --to-ports 8080

63
2017-12-11 12:34



İlk kural için gerek yok. Yerel olarak üretilen paketler PREROUTING zinciri ile geçmez. - Khaled
Harici trafiğin de yeniden yönlendirilmesini istediği için, tamamlayıcılık için başlangıç ​​kuralını ekledim. Kural yalnızca tüm IP'leri kabul ettikleri takdirde kaynak / hedefe ihtiyaç duymaz - Andy
cevap verdiğimde cevabını görmedim. - Andy
Merhaba Andy, hala bağlanılıyor. Server.com | <ip> |: 443 ... başarısız oldu: Bağlantı reddedildi. - Chris
Merhaba Chris, localhost | 127.0.0.1 | 443'e bağlanıyor mu, yoksa alan mı? İkincisi ve sunucunuzdan çalıştırıyorsanız, bir iç yönlendirme sorununuz olabilir. Wget'i deneyerek kontrol edebilirsin. server.com:8080 (Port yönlendirme nedeninin sebebi, harici olarak engellenmiş olmasıdır). Kendi VPC'mde bu sorun var, ancak alan adınızı / etc / hosts dosyanızda 127.0.0.1 olarak tanımlayarak bir geçici çözüm koyabilirsiniz. - Andy


Paketleri localhost'tan başka bir makineye yönlendirmek için kural:

 iptables -t nat -A OUTPUT -o lo -d 127.0.0.1 -p tcp --dport 443 -j DNAT  --to-destination 10.x.y.z:port

çalışacak, ama bu seçeneği çekirdeğe de eklemelisiniz:

sysctl -w net.ipv4.conf.all.route_localnet=1

Bu çekirdek ayarı olmadan işe yaramaz.


7
2018-06-16 02:24



Bu da işe yarayacaktı. İptables'lerde her şeyi yapmanın daha temiz olduğunu düşünüyorum. - quadruplebucky
Aslında, hedef başka bir makinede ise, çekirdek ayarı, bir VM veya uzak makineyi hizalar.
bu değil Andy'nin öne sürdüğü iki kurala sahipseniz. - quadruplebucky
Üzgünüm, DNAT'ın çalışmadığı farklı bir makineye yönlendirme durumundan bahsediyordum. Bu makineye, yerel makineyle aynı makinedeki bir kaplayıcıya bağlandığını düşündüğü bir şeyi iletmeye çalışırken bir soruna çözüm bulmak için bakıyordum. örn. nameserver'ı yerel sorgular için bir kapsayıcıda çalıştırma.
Aslında, görünüşe göre 'çekirdek sürümü> = 3.6'ya bağımlı. - quadruplebucky


Buna ne dersin?

iptables -t nat -A OUTPUT -d 127.0.0.1   -p tcp --dport 443 -j REDIRECT - bağlantı noktası 8080


2
2017-12-11 17:28





Aldığını söylemiştin Bağlantı reddedildi hata. Bu, bağlanmaya çalıştığınız bağlantı noktasında yerel bir işlemin olmadığı anlamına gelir! Dinleme süreçlerini kontrol etmek için şu komutu kullanın:

$ sudo netstat -lnp | grep 8080

Kuralı uyguladıktan sonra, bağlantı kurmak için 8080 bağlantı noktasını dinlemeniz gerekir.

Bunun yerine aşağıdaki kurala sahip olmalısınız:

$ iptables -t nat -I OUTPUT --source 0/0 --destination 0/0 -p tcp
                                       --dport 443 -j REDIRECT --to-ports 8080

Localhost'tan gönderdiğiniz olduğunu unutmayın. Yani, çıkış paketini yeniden yönlendirmeniz gerekiyor.


1
2017-12-11 11:44



Cevap verdiğiniz için teşekkürler. Süreç 8080 numaralı bağlantı noktasında dinleniyor. Bu nedenle, tüm trafiği bu bağlantı noktasına yönlendirmek istiyorum. - Chris
İşlemin döngü arabiriminde de dinlediğinden emin misiniz? Sadece fiziksel arayüzünüzde dinliyor olabilir. Genellikle, web sunucunuzun, 192.168.10.0 yerine, 0.0.0.0 değerini dinlemesi gerekecektir. - MrMajestyk