Hedef portu temel alan farklı arayüzlerde çıkış trafiği


23

Sorum temel olarak, sadece belirli arayüzlerde belirli giden trafiğe izin vermekle aynıdır .

İki arabirim eth1(10.0.0.2) ve wlan0(192.168.0.2) var. Varsayılan rotam şunun için eth1. Diyelim ki tüm https trafiğinin üzerinden geçmesini istiyorum wlan0. Şimdi, diğer soruda önerilen çözümü kullanırsam, https trafiği geçecek wlan0, ancak yine de kaynak adresi eth1(10.0.0.2) olacak. Bu adres wlan0ağ geçidi için rutin olmadığından , cevaplar bir daha geri gelmez. Kolay yol, uygulamada bind-addr işlevini doğru ayarlamaktır, ancak bu durumda geçerli değildir.

Src-addr'yi yeniden yazmam gerektiğini düşünüyorum:

# first mark it so that iproute can route it through wlan0
iptables -A OUTPUT -t mangle -o eth1 -p tcp --dport 443 -j MARK --set-mark 1
# now rewrite the src-addr
iptables -A POSTROUTING -t nat -o wlan0 -p tcp --dport 443 -j SNAT --to 192.168.0.2

Şimdi tcpdump giden paketlerin sadece iyi olduğunu ve gelen paketlerin 192.168.0.2'ye ulaştığını görüyor, ancak uygulamada hiçbir zaman bitmeyecekler, çünkü SYN- ACK zaten alındı.

Bu yüzden, belki gelen adresi de tekrar yazmam gerekebilir diye düşündüm:

iptables -A PREROUTING -t nat -i wlan0 -p tcp --sport 443 -j DNAT --to 10.0.0.2

ama bu da işe yaramadı. Yani burada biraz sıkışıp kaldım. Baska öneri?

Yanıtlar:


24

Sen yakınsın

Uygulamanın geri dönüş trafiğini görmemesinin asıl nedeni çekirdeğin IP sahtekarlığa karşı korumasıdır. Yani, geri dönüş trafiği yönlendirme tablosuyla eşleşmiyor ve bu nedenle de düşüyor. Bu gibi sahtecilik korumasını kapatarak bunu düzeltebilirsiniz:

sudo sysctl net.ipv4.conf.wlan0.rp_filter=0

Ama bunu tavsiye etmem. Daha uygun yol, alternatif bir yönlendirme örneği oluşturmaktır.

  1. İşareti gereklidir. Devam et.
  2. Kaynak NAT da gereklidir.
  3. Son DNAT gerekli değildir, bu yüzden kaldırabilirsiniz.

iproutePaketin kurulu olduğundan emin olun . Eğer varsa ip(bunu yapmanız gibi görünüyor ama değilse o ilk olsun) O halde başın set komutunu.

Düzen /etc/iproute2/rt_tablesve aşağıdaki satırı ekleyerek yeni bir tablo ekleyin:

200 wlan-route

Daha sonra wlan-route, varsayılan ağ geçidi olarak adlandırılan yeni yönlendirme tablonuzu yapılandırmanız ve koşullu olarak bu tabloya trafik göndermek için kurallar oluşturmanız gerekir. Varsayılan ağ geçidinizin 192.168.0.1 olduğunu varsayalım. Doğal olarak bunun sadece benim varsayımlarımla değil gerçek ağınızla da uyması gerekiyor.

ip route add default via 192.168.0.1 dev wlan0 table wlan-route
ip rule add fwmark 0x1 table wlan-route

Son açıklamalı betiğiniz şöyle görünür:

# Populate secondary routing table
ip route add default via 192.168.0.1 dev wlan0 table wlan-route
# Anything with this fwmark will use the secondary routing table
ip rule add fwmark 0x1 table wlan-route
# Mark these packets so that iproute can route it through wlan-route
iptables -A OUTPUT -t mangle -o eth1 -p tcp --dport 443 -j MARK --set-mark 1
# now rewrite the src-addr
iptables -A POSTROUTING -t nat -o wlan0 -p tcp --dport 443 -j SNAT --to 192.168.0.2

Buna bakmak için zaman ayırdığınız için teşekkür ederiz. Ancak, bu zaten kullandığım şeydi (diğer soruda açıklandığı gibi), bu yüzden ek rota ayarlarım, ancak yine de aynı. SYN-ACK'lar 192.168.0.2'ye geri dönerler ancak görünüşe göre uygulamaya asla ulaşmazlar.
rumpel

Geri dön ve cevabımı tekrar oku. Bunu ele aldım.
bahamat

Sızdırma koruması ile ilgili bölüm? Denemeden sonra bile değişiklik yok. Üzgünüm, birkaç kez tekrar tekrar okudum, fakat hala özlediğim şeyi alamadım.
rumpel

Doğru kaynak adresini belirlemek için komutlara bir srcseçenek eklemeniz gerekir ip route.
David Schwartz

@DavidSchwartz: Bununla POSTROUTING SNATilgilenecek.
bahamat

8

bahamat'ın çözümü doğru; Ancak, bu işi yapmamın tek yolunun, NATing'e dahil olan sadece ikisi (bu durumda eth1 ve wlan0) değil, sistemdeki her arabirim için rp_filter'ı devre dışı bırakmak olduğunu lütfen unutmayın.

for f in /proc/sys/net/ipv4/conf/*/rp_filter; do echo 0 > $f; done
echo 1 > /proc/sys/net/ipv4/route/flush

(bu sayfanın sonundaki ÖNEMLİ nota bakın: Gelişmiş Yönlendirme Nasıl Yapılır - orada gönderilen bağlantı artık yok, ancak geri dönüş makinesinde buldum)


Bu cevaplar için teşekkürler, ben de cevabınızı göz önünde bulundurarak yalnızca Bahamat çözümünü çalıştırabilirim.
Dynalon

benim için oldukça standart bir ubuntu 12.04 LTS kutusunda, rp_filter ve kızarma yolu önbelleğini devre dışı bırakmak için ek olarak iptables argümanlarından arayüz adını çıkarmak zorunda kaldım. nedenini araştırmak için yeterli zaman yoktu.
Costin Gușă

0

Bir öneri: Her zaman çıkış zinciri --sportyerine kullanmalısınız --dport.

NAT'lar değişiyor dportve bu kuralınızı yenilmez hale getirecek.


2
Almadığım bir şey var mı? Hedef limandaki gibi liman değiştirilemez. Oturumun ulaşmaya çalıştığı hizmetin limanıdır, örneğin http, ssh, smtp. Ya spor yaptın ve kafan karıştı, ya da bariz bir şeyi özlüyorum. : P
Biri

0

Aşağıda gerekli olduğunu düşünüyorum:

ip ru add from 192.168.0.2 table 3 prio 300
ip ro add table 3 default via 192.168.0.1 dev wlan0
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.