it-swarm-tr.com

Gelenle aynı arayüzde cevap ver?

İki arayüzlü bir sistemim var. Her iki arayüz de internete bağlı. Bunlardan biri varsayılan rota olarak ayarlanmıştır; bunun bir yan etkisi, varsayılan olmayan yol arabirimine bir paket girmesi durumunda, yanıtın varsayılan yol arabirimi üzerinden geri gönderilmesidir. Bağlantıyı izlemek ve yanıtı gelen arayüz üzerinden geri göndermek için iptables (veya başka bir şey) kullanmanın bir yolu var mı?

54
Shawn J. Goff
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şaretleme gerektirmez. Giden (yanıt) paketlerinin, giden paketteki kaynak (from) adresi olarak 2. arabirime bağlanmak için kullanılan IP adresine sahip olması nedeniyle çalışır.

64
Peter

Aşağıdaki komutlar eth1 işareti 1 olan paketler için (localhost'a gönderilen paketler hariç). ip komutu iproute2 paketinden (Ubuntu: iprouteiproute'u yükle http://bit.ly/software-small =, iproute-dociproute-doc yükleyin 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ı, 1 işaretini alması gereken paketleri tanımaktır; sonra kullan iptables -t mangle -A OUTPUT … -j MARK --set-mark 1 Bu paketleri yönlendirme tablosu 1 yoluyla yönlendirmek için. Bence bunu yapmak gerekir (1.2.3.4 yerine varsayılan olmayan yol arabiriminin adresi):

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

Bunun yeterli olup olmadığından emin değilim, belki gelen paketlerde conntrack modülünü izlemelerini söylemek için başka bir kural gerekli.

Peter tarafından önerilen çözümle yerel olarak oluşturulan paketlerle ilgili sorunlar yaşadım, aşağıdakilerin düzeldiğini buldum:

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ırla ilgili 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
5
Héctor Sánchez

Linux çalıştırdığınızı ve ayrıca RedHat/CentOS tabanlı bir dağıtım kullandığınızı varsayıyorum. Diğer Unix'ler ve dağıtımlar benzer adımlar gerektirir - ancak ayrıntılar farklı olacaktır.


Test ederek başlayın (bunun @ Peter'ın cevabına çok benzediğini unutmayın. Aşağıdakileri varsayıyorum:

  • eno0 isp0 ve genel varsayılan ağ geçidine sahip
  • eno1 isp1 ve 192.168.1.1 ağ geçidi ile IP/aralığı 192.168.1.2/24

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 dahil değildir. Yanıt paketleri her zaman doğru IP'den gönderilirdi - ancak daha önce yanlış arabirimle gönderiliyordu. Şimdi doğru IP'den gelen bu paketler doğru arayüz üzerinden gönderilecek.


Yukarıdakilerin işe yaradığını varsayarak, 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ı olduğunu 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 yaramadıysa, RH/CentOS'un sonraki sürümlerinde de iki seçenekten birini kullanmanız gerekir:

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

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

$ yum install NetworkManager-dispatcher-routing-rules

Bir başka güçlü öneri, çift ağ yapılandırmalarıyla ilgili diğer sorunları önlediğinden arp filtrelemeyi etkinleştirmektir. 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
3
zaTricky