Gelen ile aynı arayüzde cevap veriyor musunuz?


50

İki arayüzlü bir sistemim var. Her iki arayüz de internete bağlı. Bunlardan biri varsayılan rota olarak ayarlandı; Bunun bir yan etkisi, bir paketin varsayılan olmayan rota arayüzüne girmesi durumunda, cevabın varsayılan rota arayüzü üzerinden geri gönderilmesidir. Bağlantıyı izlemek ve cevabı geldiği arayüze geri göndermek için iptables (ya da başka bir şey) kullanmanın bir yolu var mı?

Yanıtlar:


60
echo 200 isp2 >> /etc/iproute2/rt_tables
ip rule add from <interface_IP> dev <interface> table isp2
ip route add default via <gateway_IP> dev <interface> table isp2

Yukarıdaki ipfilter ile herhangi bir paket işaretlemesi gerektirmez. Giden (cevap) paketlerinin, giden paketteki kaynak (from) adresi olarak 2. arayüze bağlanmak için kullanılan IP adresine sahip olması nedeniyle çalışır.


7
Vay canına, aradığım şey buydu. Herhangi birinin bakması durumunda, RH tabanlı dağıtımlar için, ilgili kural ve rota komutlarını 'kural-eth0' veya 'rota-eth0' (örneğin) ifup / ifdown üzerine eklenecek veya kaldırılacak dosyalara koyabilirsiniz. Bu dosyaları ifcfg-eth0 dosyasının yanına yerleştirin. IPv6 için yerleşik 'route6-eth0' işlevi vardır, ancak yerleşik 'kural6-eth0' yoktur (henüz).
Kyle Brantley

18
Dışarı çıkarken Benim için sadece çalıştı deviçinde param ip rulebu kadar çalışan, komutaip rule add from <interface_IP> table isp2
cdauth

2
Bunları, arayüz eklendiğinde up ip rule add from <interface_IP> table isp2ve up ip route add default via <gateway_IP> dev ppp0 table isp2/ etc / network / arayüzlerine ilgili arayüz altında ekleyerek yaratılmasını sağlayabilirsiniz .
g.rocket

4
Ben kaldırmak zorunda dev <interface>dan ip rulebenim kutuyu işe gitmek için. Eğer doğru anlıyorsam, bir dev <interface>şekilde yanlış arabirime ayarlanmış paketleri geçersiz kılınan yolla doğru arabirime döndürülmesi gereken, ancak arabirim tarafından kural filtrelemenin gerçekleşmesini engelliyordu.
binki,

2
Diğer çoğu insan gibi, bunun da çalışması dev <interface>için ip ruleemirden kaldırmak zorunda kaldım . Lütfen cevabı güncelle! Bu ayrıntı dışında, bir cazibe gibi çalıştı. Çok teşekkürler, @Peter!
MoonSweep

6

Aşağıdaki komutlar eth1, 1 işaretine sahip paketler için alternatif bir yönlendirme tablosu oluşturur (localhost'a gelen paketler hariç). ipKomut dan iproute2 paketi (Ubuntu: iproute iproute http://bit.ly/software-small yükleyin , iproute-doc yükleyin iproute-doc http://bit.ly/software-small ).

ip rule add fwmark 1 table 1
ip route add 127.0.0.0/0 table 1 dev lo
ip route add 0.0.0.0/0 table 1 dev eth1

İşin diğer yarısı işaretini 1 alması gereken paketleri tanır; daha sonra iptables -t mangle -A OUTPUT … -j MARK --set-mark 1bu paketlerde yönlendirme tablosu 1 üzerinden yönlendirilmelerini sağlayın. Aşağıdakilerin yapması gerektiğini düşünüyorum (1.2.3.4 yerine, varsayılan olmayan rota arabiriminin adresi ile değiştirin):

iptables -t mangle -A OUTPUT -m conntrack --ctorigdst 1.2.3.4 -j MARK --set-mark 1

Yeterli olup olmadığından emin değilim, gelen paketlerde conntrack modülüne onları izlemelerini söylemek için belki başka bir kural gerekir.


Güzel. İşaretlemeyi unuttum. Bu beni oraya götürmeli.
Shawn J. Goff

5

Peter tarafından önerilen çözümle yerel olarak üretilen paketlerle ilgili sorunlarım oldu, şunu düzelttim:

echo 200 isp2 >> /etc/iproute2/rt_tables
ip rule add from <interface_IP> table isp2 priority 900
ip rule add from dev <interface> table isp2 priority 1000
ip route add default via <gateway_IP> dev <interface> table isp2
ip route add <interface_prefix> dev <interface> proto static scope link src <interface_IP> table isp2

NOT: Yukarıdaki 4. satırda sözdizimi sorunlarıyla karşılaşabilirsiniz. Bu gibi durumlarda 4. komutun sözdizimi şu anda olabilir:

ip rule add iif <interface> table isp2 priority 1000

Çok denedim ama senaryomda hiçbir şey işe yaramadı, bunun dışında .. çok teşekkürler.
agaggi

3

Linux kullandığınızı ve ayrıca RedHat / CentOS tabanlı bir dağıtım kullandığınızı farz ediyorum. Diğer Unix'ler ve dağıtımlar da benzer adımlar gerektirecek - ancak ayrıntılar farklı olacak.


Teste başla (bunun @ Peter'ın cevabına çok benzer olduğunu unutmayın. Aşağıdakileri farz ediyorum:

  • eno0 isp0 ve genel varsayılan ağ geçidine sahip
  • eno1, isp1'dir ve 192.168.1.1 ağ geçidine sahip olan 192.168.1.2/24 IP / aralığına sahiptir.

Komutlar aşağıdaki gibidir:

$ echo 200 isp1 >> /etc/iproute2/rt_tables
$ ip rule add from eno1 table isp1
$ ip route add default via 192.168.1.1 dev eno1 table isp1

Güvenlik duvarı hiçbir şekilde karışmaz. Cevap paketleri her zaman doğru IP’den gönderilecekti - fakat daha önce yanlış arayüz üzerinden gönderilmişti. Şimdi doğru IP adresinden gelen bu paketler doğru arayüz üzerinden gönderilecektir.


Yukarıdakilerin işe yaradığını varsayarak, artık kuralı ve rota değişikliklerini kalıcı hale getirebilirsiniz. Bu, hangi Unix sürümünü kullandığınıza bağlıdır. Daha önce olduğu gibi, RH / CentOS tabanlı bir Linux dağıtımı varsayıyorum.

$ echo "from eno1 table isp1" > /etc/sysconfig/network-scripts/rule-eno1
$ echo "default via 192.168.1.1 dev eno1 table isp1" > /etc/sysconfig/network-scripts/route-eno1

Ağ değişikliğinin kalıcı olduğunu test edin:

$ ifdown eno1 ; ifup eno1

Bu işe yaramazsa, RH / CentOS'un sonraki sürümlerinde, iki seçenekten birini yapmanız gerekir:

  • Varsayılan NetworkManager.service'i kullanmayın ; Kullanım network.service yerine. Bunun için gereken tam adımları araştırmadım. Hizmetleri etkinleştirmek / devre dışı bırakmak için standart chkconfig veya systemctl komutlarını içerdiğini hayal ediyorum .
  • NetworkManager-dispatcher-routing-rules paketini yükleyin

Şahsen ben daha basit bir şekilde desteklenen bir yaklaşım olduğu için kurallar paketini kurmayı tercih ederim:

$ yum install NetworkManager-dispatcher-routing-rules

Diğer bir güçlü öneri, çift ağ yapılandırmasıyla ilgili diğer sorunları önlediği için ark filtrelemeyi etkin kılmaktır. RH / CentOS ile, /etc/sysctl.conf dosyasına aşağıdaki içeriği ekleyin:

net.ipv4.conf.default.arp_filter=1
net.ipv4.conf.all.arp_filter=1
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.