İki arayüz, iki adres, iki ağ geçidi?


15

Her ikisi de genel adres aralığında (ilki durumunda NAT aracılığıyla da olsa) ve her ikisi de farklı ağ geçitleri olan farklı IP adresleri ile iki ağ arabirimi olan bir sistem var. (Uzun hikaye, test amaçlıdır)

Sorun şu anda, ikinci arabirimdeki adrese ping atmaya çalışırsam, varsayılan yolun ilk arabirim üzerinden işaret eder - ve asla düzgün ulaşmaz.

Yanıtların her zaman geldikleriyle aynı ağ arabiriminden (ve aynı kaynak IP ile) dışarı çıkmasını sağlamak mümkün müdür? Ve eğer öyleyse, nasıl?


1
Muhtemelen bu konuda bazı varyantlar: unix.stackexchange.com/questions/4420/…
Shawn J. Goff

Yanıtlar:


17

Sorunu yanlış anlıyorsunuz. Her paket bir yanıt değildir ve her paket diğer paketlerle eşleştirilemez, böylece "geldikleriyle aynı ağ arabirimi" anlamlı olur. Yapmak istediğiniz, paketin kaynak IP adresine göre ağ geçidini seçmektir.

Buna kaynak tabanlı yönlendirme veya ilke yönlendirme denir. Bunu basit bir iptableskuralla yapabilirsiniz , ancak en iyi yol, her genel kaynak adresi için bir tane olmak üzere iki yönlendirme tablosu oluşturmaktır:

İlk olarak, iki tablo oluşturun (IP1, DEV1 vb. İle aynı olan iki sağlayıcınız için <NAME1> ve <NAME2> yerine mantıklı adlar koyun):

echo 200 <NAME1> >> /etc/iproute2/rt_tables
echo 201 <NAME2> >> /etc/iproute2/rt_tables

Her yönlendirme tablosuna bir ağ geçidi ekleyin (gerekirse):

ip route add <NET1> dev <DEV1> src <SRC1> table <NAME1>
ip route add <NET2> dev <DEV2> src <SRC2> table <NAME2>

Ardından varsayılan bir rota:

ip route add default via <IP1> table <NAME1>
ip route add default via <IP2> table <NAME2>

Ardından kaynak adrese göre rota tablosunu seçmek için kurallar:

ip rule add from <IP1> table <NAME1>
ip rule add from <IP2> table <NAME2>

Daha fazla ayrıntı için Birden çok bağlantı / sağlayıcı için Yönlendirme konusuna bakın .


Şunu yazdınız: 'Her paket bir yanıt değildir ve her paket diğer paketlerle eşleştirilemez, öyle ki "geldikleriyle aynı ağ arayüzü" mantıklıdır. 'Bunu daha fazla açıklayabilir misiniz? Her paketin bir yanıt olmadığını ve her paketin başka bir "kaynak" pakete eşleştirilemeyeceğini anlıyorum. Bu paketleri göz ardı edersek, herhangi bir soruna neden olmadıkları ve bu nedenle bizi ilgilendirmedikleri için, kalan paketler neden "geldikleriyle aynı ağ arayüzüne" yönlendirilemiyor?
Andrew Savinykh

@AndrewSavinykh Bu, tüm sorunu çözmez. Özellikle, bir giden paket yerel olarak (giden bir ping isteği gibi) kaynak IP adresi için yanlış arabirimden çıktığında ve ağ geçidi tarafından düştüğünde kırılacaktır. Sorun, açıkladığım gibi, aslında paketlerin kaynak IP adreslerine karşılık gelen ağ geçidinden çıkmasını sağlamakla ilgilidir.
David Schwartz

David, OP ile aynı şeyi başarmak istiyorum ama başaramıyorum. Burada bir soru gönderdim: serverfault.com/questions/992624/… , bir göz atabilirseniz çok iyi olurdu
Housemd

6

David Schwartz'ın cevabı mükemmel, ancak sadece bir ekstra masaya sahip olan ve diğeri için varsayılan rotanızı kullanarak yönlendirme kurallarını biraz basitleştirebilirsiniz. İki NAT ağ geçidinin arkasında bir sunucum var ve son zamanlarda bir grup VM arasında bu senaryoyu yeniden oluşturma sürecinden geçtim. Benim /etc/network/interfacesşöyle görünüyor:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
    address 192.168.13.13
    netmask 255.255.255.0
    up ip route add table optus default via 192.168.13.10
    up ip rule add from 192.168.13.213 table optus
    up ip route add default via 192.168.13.11

auto eth0:0
iface eth0:0 inet static
    address 192.168.13.213
    netmask 255.255.255.0

(bu, iki İSS'nin Optus ve iiNet olduğu bir kurulum içindir, dolayısıyla 'optus' tablo adıdır)

Bu, artı /etc/iproute2/rt_tablestablo oluşturma çizgisi, ihtiyacınız olan her şey olmalıdır. İki IP adresiniz olacak; 192.168.13.13 trafiği 192.168.13.11 üzerinden, 192.168.13.213 trafiği 192.168.13.10 üzerinden dışarı çıkacaktır. Bu iki ağ geçidini bağlantı noktası yönlendirmelerini uygun şekilde yapacak şekilde yapılandırın (192.168.13.11, işleri 192.168.13.13'e ve 192.168.13.10, işleri 192.168.13.213'e iletir) ve geri kalanı kendi kendine bakmalıdır.

Doğrudan genel IP'leri kullandığınız için durumunuz için bir şeyler ayarlamanız gerekebilir, ancak bunun gibi bir şey hala çalışmalıdır. Ayrıca, /etc/network/interfacesiki yıl sonra, sistemin yeniden başlatılması gerektiğinde, nasıl ayarladığınızı hatırlamak yerine, bunları yapmak ve sonra bu dosyaya gitmek-yönetmek çok daha kolay !


1

Çift ağ örneği

Bu örnek, netmask ve ağ geçidine eth1sahip bir 10.130.0.2ekin , ona benzer hizmetler için nasıl kullanılabilir hale getirildiğini göstermektedir.255.255.255.25510.130.0.1ping -I eth1 8.8.8.8

Teknik olarak:

  • Daha büyük bir metriğe sahip başka bir ağ geçidi ekleme
  • Tablo 100 ekleme / kullanma ve ayarlama
  • Eth1 üzerinden / üzerinden trafik yönlendirmek için bir kural ekleme
ip addr add 10.130.0.2/32 broadcast 10.130.0.2 dev eth1
ip link set eth1 up
ip route add 10.130.0.1 src 10.130.0.2 dev eth1
ip route add 10.130.0.1 src 10.130.0.2 dev eth1 table 100
ip route add default via 10.130.0.1 dev eth1 metric 10
ip route add default via 10.130.0.1 dev eth1 table 100
ip rule add from 10.130.0.2/32 table 100
ip rule add to 10.130.0.2/32 table 100
curl --interface eth1 ifconfig.co
curl --interface eth0 ifconfig.co
ping -I eth1 8.8.8.8
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.