Linux'ta aynı alt ağda iki ağ arabirimi ve iki IP adresi


22

Geçenlerde, bir SSL sunucusuna atanan aynı alt ağ üzerinde iki IP adresine ihtiyaç duyduğum bir durumla karşılaştım, böylece iki SSL / TLS sitesi çalıştırabilirdik. İlk yaklaşımım IP takma adlarını kullanmaktı, örneğin, eth0: 0, eth0: 1, vb. Kullanma.

  1. DHCP gözetleme kullanıyorlar ve normal olarak statik IP adreslerine izin vermiyorlar. Statik adresleme statik DHCP girişleri kullanılarak gerçekleştirilir, böylece aynı MAC adresi her zaman aynı IP atamasını alır. İsterseniz ve bunun için bir nedeniniz varsa, bu özellik switchport başına devre dışı bırakılabilir (Neyse ki ağ adamları ile iyi bir ilişkim var ve bunu yapmak zor değil).
  2. DHP’nin geçişi devre dışı bırakma devre dışı bırakıldığında, söz konusu MAC adresinin X IP adresine Y girmesine izin verildiğine dair bir kural koymaları gerekirdi. IP adresi Y. IP takma işlemi, MAC adresine X iki IP adresi atanmasını gerektirdi, bu yüzden işe yaramadı.

Anahtar yapılandırmasında bu sorunlar etrafında bir yol olabilir, ancak ağ yöneticileriyle iyi ilişkileri korumak için başka bir yol bulmaya çalıştım. İki ağ arayüzüne sahip olmak bir sonraki mantıksal adım gibi görünüyordu. Neyse ki bu Linux sistemi sanal bir makine, bu yüzden ikinci bir ağ arayüzü kolaylıkla ekleyebildim (yeniden başlatmadan ekleyebilirim - oldukça havalı). Birkaç tuşa basma işleminden sonra DHCP'den iki ağ arayüzü kurulup çalışıyor ve IP adresleri çekildi.

Ancak sorun ortaya çıktı: ağ yöneticileri her iki arabirim için ARP girişini (anahtara) görebildiler, ancak yalnızca açtığım ilk ağ arabirimi ping'lere ya da her türlü TCP ya da UDP trafiğine yanıt verebilirdi.

Kazma ve dürtme işleminden sonra, işte bunu buldum. İşe benziyor, ancak basit olması gereken gibi görünen bir şey için çok iş gibi görünüyor. Başka alternatif fikir var mı?


Adım 1: Tüm arayüzlerde ARP filtrelemeyi etkinleştirin:

# sysctl -w net.ipv4.conf.all.arp_filter=1
# echo "net.ipv4.conf.all.arp_filter = 1" >> /etc/sysctl.conf

Linux çekirdeğindeki dokümanlar / ip-sysctl.txt dosyasından:

arp_filter - BOOLEAN
    1 - Allows you to have multiple network interfaces on the same
    subnet, and have the ARPs for each interface be answered
    based on whether or not the kernel would route a packet from
    the ARP'd IP out that interface (therefore you must use source
    based routing for this to work). In other words it allows control
    of which cards (usually 1) will respond to an arp request.

    0 - (default) The kernel can respond to arp requests with addresses
    from other interfaces. This may seem wrong but it usually makes
    sense, because it increases the chance of successful communication.
    IP addresses are owned by the complete host on Linux, not by
    particular interfaces. Only for more complex setups like load-
    balancing, does this behaviour cause problems.

    arp_filter for the interface will be enabled if at least one of
    conf/{all,interface}/arp_filter is set to TRUE,
    it will be disabled otherwise

2. Adım: Kaynak tabanlı yönlendirmeyi uygulama

Temelde http://lartc.org/howto/lartc.rpdb.multiple-links.html adresindeki talimatları izledim , ancak bu sayfa farklı bir amaç göz önünde bulundurularak yazılmıştır (iki ISS ile ilgili olarak).

Alt ağın 10.0.0.0/24, ağ geçidi 10.0.0.1, eth0 için IP adresinin 10.0.0.100 olduğunu ve eth1 için IP adresinin 10.0.0.101 olduğunu varsayalım.

/ Etc / iproute2 / rt_tables dizininde eth0 ve eth1 adlı iki yeni yönlendirme tablosu tanımlayın:

... top of file omitted ...
1    eth0
2    eth1

Bu iki tablonun rotalarını tanımlayın:

# ip route add default via 10.0.0.1 table eth0
# ip route add default via 10.0.0.1 table eth1
# ip route add 10.0.0.0/24 dev eth0 src 10.0.0.100 table eth0
# ip route add 10.0.0.0/24 dev eth1 src 10.0.0.101 table eth1

Yeni yönlendirme tablolarının ne zaman kullanılacağına ilişkin kuralları tanımlayın:

# ip rule add from 10.0.0.100 table eth0
# ip rule add from 10.0.0.101 table eth1

Ana yönlendirme tablosu zaten DHCP tarafından halledildi (ve bu durumda kesinlikle gerekli olduğu bile belli değil), fakat temelde buna eşittir:

# ip route add default via 10.0.0.1 dev eth0
# ip route add 130.127.48.0/23 dev eth0 src 10.0.0.100
# ip route add 130.127.48.0/23 dev eth1 src 10.0.0.101

Ve işte! Her şey yolunda gibi görünüyor. Her iki IP adresine de ping göndermek iyi sonuç verir. Bu sistemden ping'lerin diğer sistemlere gönderilmesi ve ping'in belirli bir arayüzü kullanmaya zorlanması iyi çalışır ( ping -I eth0 10.0.0.1, ping -I eth1 10.0.0.1). Ve en önemlisi, her iki IP adresinden gelen / gelen tüm TCP ve UDP trafiği beklendiği gibi çalışır.


Yine, sorum şu: Bunu yapmanın daha iyi bir yolu var mı? Bu görünüşte basit bir sorun için çok iş gibi görünüyor.


Güncelleme: Yukarıdaki çözüm eksik kaldı. Trafik aynı alt ağda kalırsa, işler iyi çalışıyordu, ancak 2. arabirimi kullanan diğer alt ağlarla iletişim düzgün çalışmazdı. Daha büyük bir çukur kazmak yerine, ağ yöneticileri ile konuşmayı bıraktım ve tek bir arabirim için çoklu IP adreslerine izin vermelerini sağladım ve IP takma adını kullandım (örn. Eth0 ve eth0: 0).


Hatırlanması gereken en önemli nokta IP'nin arayüze ait olmadığı, makineye ait olduğu. Bu yüzden bu kurulumda her iki IP için bir arayüz göndermek doğru, bu yüzden neden bunu yapmamak için bazı hileler gerektiriyor ?
MikeyB

Kaynak yönlendirmenin bu durumda gerekli olmadığına inanıyorum, çünkü ark filtreleme yalnızca anahtar bir arabirime gönderirken / onu bağlantı noktaları arasında bulması gerektiğinde uygulanmalıdır. Yanılıyor olabilirim, ancak makine anahtara doğru veri gönderdiğinde, kaynak alanındaki IP (IP başlığı) kontrol edilmez, sadece paketi gönderen arp kullanılır.
AndreasM

MikeyB doğrudur, kaynak yönlendirmesi tek yoldur. Makine, aynı alt ağda olduğu sürece trafik göndermek istediği herhangi bir arabirim seçebilir. IP gerçekten bu arayüzde bulunup bulunmadığı önemli değildir.
Patrick

2
AndreasM: Gelen paketler sorun değil, sorun giden paketler. Kaynak yönlendirmesi olmadan, tüm giden paketler, bir arabirime veya diğerine bağlı olan varsayılan yolu kullanır. Giden paketler doğru kaynak IP adresine sahip olsalar bile, anahtar üzerindeki filtreler bu IP adresinin bu arayüzün MAC adresine ait olmadığından dışarı çıkmalarına izin vermeyecektir. Geçiş için sadece bir müşteri başka bir müşterinin IP'sini taklit etmeye çalışıyor gibi görünüyor. (Bunlar akıllı katman 3 anahtarlarıdır).
Scott Duckworth

IP takma adları eskimiş ve bir kesmek, gerçeği yansıtmıyor, birincil çıkarmanın tüm takma adları alacağından bahsetmiyor. Kullanım ipgelen iproute2aynı arabirime birden fazla adres ekleyin.
pilona

Yanıtlar:


8

Evet, daha iyi bir yol, uygun bir iş durumu oluşturmak ve bir NIC'de birden fazla IP alabilmeniz için anahtarların kurallarını gevşetmelerini sağlamaktır.

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.