IPTable'lar - Başka bir IP & bağlantı noktasına bağlantı noktası (içeriden)


10

Şu anda 80 numaralı bağlantı noktasının altında çalışan bir NAS kutum var. NAS'a dışarıdan erişmek için aşağıdaki şekilde 8080 numaralı bağlantı noktasını NAS üzerindeki 80 numaralı bağlantı noktasına eşledim:

iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 10.32.25.2:80

Bu bir cazibe gibi çalışıyor. Ancak, bu sadece web sitesine ağın dışından (iş yerinde, farklı evde, vb.) Erişiyorsanız çalışıyor. Bu yüzden mywebsite.com:8080yazdığımda IPTables işi doğru yapıyor ve her şey yolunda gidiyor.

Şimdi, sorunum bu bağlantı noktasını ağın içinden nasıl yeniden yönlendirebilirim? Etki alanı adım mywebsite.comyönlendiricimi (linux sunucum) içeriden (10.32.25.1) gösteriyor ancak içten 10.32.25.2'de 8080 numaralı bağlantı noktasını 80 numaralı bağlantı noktasına yönlendirmek istiyorum.

Bir ipucu?

Düzenleme # 1

Bu soruyu kolaylaştırmaya çalışarak bu diyagramı bir araya getirdim. Aradığınızı yanlış veya yanlış temsil ediyorsa lütfen güncellemekten çekinmeyin.

                                 iptables
                                     |                   .---------------.
    .-,(  ),-.                       v               port 80             |
 .-(          )-.        port 8080________               |               |
(    internet    )------------>[_...__...°]------------->|      NAS      |
 '-(          ).-'     10.32.25.2    ^   10.32.25.1      |               |
     '-.( ).-'                       |                   |               |
                                     |                   '---------------'
                                     |
                                     |
                                   __  _ 
                                  [__]|=|
                                  /::/|_|

@slm Aynen. Sunucu 80. bağlantı noktasında olduğu için 10.32.25.2:8080'de hiçbir şey olmuyor. Dışarıdan NAT 8080 numaralı bağlantı noktasından 80 numaralı bağlantı noktasına belirtilen IP'de (10.32.25.2) yeniden yönlendiriyor. NET -> NAT: 8080 -> 10.32.25.2:80. İçeriden kurala ihtiyacım var ve oraya ne koyacağımı bilmiyorum.
David Bélanger

@slm Evet. Böyle bir şeyi nasıl başarabileceğimi bilmiyorum. 10.32.25.1:8080Yönlendirme demek istiyorum 10.32.25.2:80. Yukarıdaki kuralım dışarıdan çalışıyor, ancak ağımın içinden çalışmıyor. Eğer ofisteysem NAS'a web sitesi.com: 8080'den erişebilirim ve tamamen şeffaftır. Web sitemden, website.com: 8080, 10.32.25.1'e işaret ediyor çünkü bu benim yönlendiricim Linux sunucusu. 8080 numaralı bağlantı noktasını aynı zamanda 80 numaralı bağlantı noktasında da NAS'a yönlendirmek istiyorum, ancak yine şeffaf bir şekilde.
David Bélanger

@slm Evet, her şey yolunda ve çalışıyor. Yalnızca 10.32.25.1:8080 bağlantı noktasını 10.32.25.2:80 numaralı bağlantıya dahili ağdan yeniden yönlendirmek istiyorum.
David Bélanger

Ayrıca eth0 10.32.25.2gelen arayüze dayalı iptables kullanımı yazabilmek için arayüz gibi bahsediyoruz
Rahul Patil

Opps üzgünüm, az önce gördüm .. sorunu zaten
çözdün

Yanıtlar:


13

Sonunda nasıl yapılacağını buldum. İlk olarak, -i eth1"dış" kuralıma eklemek zorunda kaldım (eth1 benim WAN bağlantım). Başka iki kural daha eklemem gerekiyordu. İşte sonunda ne ile geldim:

iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 8080 -j DNAT --to 10.32.25.2:80
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to 10.32.25.2:80
iptables -t nat -A POSTROUTING -p tcp -d 10.32.25.2 --dport 80 -j MASQUERADE

2
İlk kural zaten içerdiğinden, ikinci kural gerekli değildir ...
machineaddict

1
İlk kural, ancak eth1 arabirimine ulaştığında önbelleği kısıtlar. İkinci kural, tüm arabirimler için geçerli olduğundan daha geneldir. Döngülere dikkat edin!
tu-Reinstate Monica-dor duh

4

Hedef NAT gerçekleştirebilmek için paket iletmenin etkinleştirilmesi gerektiğini de unutmuştunuz. Varsayılan olarak, genellikle kapalıdır, bu nedenle iptables kuralları çalışmaz. Şunları düzenleyerek etkinleştirilebilir:

echo 1 > /proc/sys/net/ipv4/ip_forward

Bunun için çok teşekkür ederim, saçlarımı saatlerce dışarı çekerdim!
ColinM

3

Önce ile yönlendirmeye izin ver

echo 1 > /proc/sys/net/ipv4/ip_forward

Ardından iptable kurallarını

IF=eth1
PORT_FROM=8080
PORT_TO=80
DEST=10.32.25.2
iptables -t nat -A PREROUTING -i $IF -p tcp --dport $PORT_FROM -j DNAT --to $DEST:$PORT_TO
iptables -t nat -A POSTROUTING -p tcp -d $DEST --dport $PORT_TO -j MASQUERADE

Bu satırları /etc/rc.localörneğin içine koyabilirsiniz . Not: Debian jessie onu çalıştırılabilir hale getirdiğinden ve rc.local hizmetini

systemctl enable rc-local.service

0

İlk olarak, yönlendirmeyi etkinleştirdiğinizi doğrulamanız gerekir:

cat /proc/sys/net/ipv4/ip_forward

Değilse 1, çalıştırın echo 1 > /proc/sys/net/ipv4/ip_forward.

80 ve 443 numaralı bağlantı noktalarında 10.32.25.1'e isabet eden trafiğin 10.32.25.2'nin 80 bağlantı noktasına yönlendirilmesini istiyorsanız, aşağıdaki kuralı kullanmanız gerekir:

iptables -t nat -A PREROUTING -d 10.32.25.1 -p tcp -m multiport --dports 80,443 -j DNAT --to-destination 10.32.25.2:80
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.