aynı alt ağda IP'lerle birden çok fiziksel arabirim


13

Üzerinde 9 NIC olan bir linux kutusu var ve bunların sekizinin aynı alt ağda benzersiz adreslere sahip olmasını istiyorum, örneğin:

ifconfig eth1 192.168.123.1 netmask 255.255.0.0
ifconfig eth2 192.168.123.2 netmask 255.255.0.0
ifconfig eth3 192.168.123.3 netmask 255.255.0.0
...
ifconfig eth8 192.168.123.8 netmask 255.255.0.0

Varsayılan ARP davranışı, bu durumda son derece ters etkindir, çünkü tüm IP'ler için özel olarak geçen tüm trafik ile sonuçlanır eth1, bu da istediğimin tam tersidir.

Etrafta dolaştım ve sysctl'de böyle değişiklikler yaptım:

net.ipv4.conf.all.arp_filter=1
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce=2

Bu eth1, diğerlerinin kimliğine bürünmeyi engelledi , ancak yine de eth1adresinden başka bir şeye başarıyla ping atamıyorum . (örneğin, aynı anahtardaki ikinci bir bilgisayardan, yalnızca 192.168.123.1ping komutuna yanıt verir)

Arptables veya iproute veya SOMETHING ile bir şeyler yapmam gerektiğini tahmin ediyorum, ancak bu alanda denizde kayboldum.

Bonus Puanları: Çözüm Linux 2.6.27.27 ile uyumlu olmalıdır. (Daha spesifik olarak Slax 6.1.2)


Yönlendirme tablosunu gönderebilir misiniz?
ponsfonze

2
Bu yapılandırmayı oluşturmadaki amacınız nedir? Ne yapmaya çalışıyorsun?
David Schwartz

bu şekilde delilik yatar.
Sirex

eğer bu arayüzleri bağlamak istiyorsanız, aslında onları bağlamanız gerekecektir.
resmon6

1
@DavidSchwartz Hayır, makinenin bir anahtar (veya yönlendirici) gibi davranması beklenmemektedir. Daha her VM için özel bir fiziksel NIC ile 8 sanal makineleri çalıştırmak gibi düşünün ( Not: Ben am değil makinelerin çalıştırılmasını, bu sadece bir benzetme ). Aynı ağdaki başka bir kutunun bakış açısından, tek bilgisayarım sekiz ayrı bilgisayardan tamamen ayırt edilemez olmalıdır.
frustrated_tester

Yanıtlar:


17

Güçlü bir uç sistem modeline ihtiyacınız var . Linux temel olarak zayıf bir gönderme sistemi modeli üzerine inşa edilmiştir, bu yüzden bu uygulama için gerçekten iyi bir işletim sistemi seçimi değildir.

ARP'den politika yönlendirmesine ve kaynak adres seçimine kadar ihtiyacınız olan her davranışı taklit etmeniz gerekir. Ayrıca, yanlış arabirime ulaşmaları durumunda paketlerin kabul edilmesini önlemek için filtrelere ihtiyacınız olacaktır.

Kesinlikle gerekli adımlar:

  1. Tüm arabirimlerde arp_filter = 1 ve arp_ignore = 2'yi yapılandırın.

  2. Giden trafik için arayüz başına kaynak tabanlı yönlendirme ekleyin. (Hedef arabirimi kaynak adrese göre seçilmelidir.)

  3. Yanlış arabirimde alınan paketleri sessizce bırakmak için arabirim başına giriş filtresi ekleyin. (Hedef adresi başka bir arayüze atanmış paketler.)

Ne yazık ki, bu üç adımın gerekli olup olmadığı konusunda fikir birliği yoktur. Zayıf uç sistem modeli tüm Linux TCP / IP yığınında yerleşiktir ve çok noktaya yayın gibi ince sorunlarda neyin yanlış gidebileceği açık değildir.

Örneğin, yayınlar için çıkış arayüzünü nasıl seçeceğiniz açık değildir. Hepsi dışarı çıkmalı mı? Olabilir. Yığın, arabirimlerden birine atanmamış bir kaynak adresiyle giden bir yayın alırsa doğru davranış nedir?

Yine, iş için yanlış aracı seçtiniz.


7

Büyük olasılıkla 8/9 arayüzleri ile bir köprü oluşturmak ve daha sonra bu köprüye bir IP adresi atamak istersiniz (bridge-utils paketi, 'brctl add' komutu).

Bu şekilde köprü bir anahtar gibi davranacak ve alt ağınıza bir IP adresi alabilir.


AFAIK, bu aslında Linux için doğru cevap olmalı. Linux, köprü cihazlarını kullanarak David'in cevabında belirtilen sorunların çoğunu ele alır (daha iyi bir L2 mantıksal ağ oluşturarak L3 sorunlarından kaçının).
Dave

4

Fiziksel arayüzlerin bağlanmasını tavsiye ederim, sonra tek bağlı arayüzdeki tüm adresleri yapılandırın.

Anahtarda da desteğe ihtiyacınız olacak.

İşte bu küçük öğretici başlamak için kullanabilecekleri.


4

Görünüşe göre 9 ayrı makineye eşit bir test ortamı istiyor ve bir makinedeki 9 arayüzün bunu taklit edebileceğine inanıyorlardı. Linux'ta David Schwartz'ın tanımladığı nedenlerle bunu tek bir yığınla yapamaz. BTDT ve yara izleri var. 2 arayüz ile yeterince kötüydü.

Daha iyi bir çözüm, bir ana makinenizde 8 veya 9 ayrı sanal makine çalıştırmak ve bu sanal makinelerle 8 veya 9 arayüz arasında köprü kurmak olabilir.


Kaynak okuma: Unix Network Programming: Sockets Networking API, yazan Stevens, Fenner ve Rudoff. Ayrıca bkz. RFC1122 ve RFC4907.
Skaperen

0

Evet, David Schwartz önerisini takip etmek mümkündür:

echo -ne 0 > /proc/sys/net/ipv4/conf/all/rp_filter
echo -ne 0 > /proc/sys/net/ipv4/conf/eth0/rp_filter
echo -ne 0 > /proc/sys/net/ipv4/conf/eth3/rp_filter

// Düzgün işlevsellik için, yani eth0 ve eth1 aynı alt ağdayken üretilmek üzere eth1'den ARP yanıtları

echo -ne 0 > /proc/sys/net/ipv4/conf/all/arp_filter
echo -ne 2 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo -ne 0 > /proc/sys/net/ipv4/conf/eth0/arp_filter
echo -ne 2 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
echo -ne 0 > /proc/sys/net/ipv4/conf/eth1/arp_filter
echo -ne 2 > /proc/sys/net/ipv4/conf/eth1/arp_ignore

//Create a table called "new_rt_table" and create a routing rule that says any packet with a mark equal to '1' gets routed according to the "new_rt_table"(can name it whatever you want) table. The file /etc/iproute2/rt_tables is the only source of table names on the system. Internally, routing tables have integer identifiers.

echo 1 new_rt_table >> /etc/iproute2/rt_tables
ip rule add from all fwmark 1 table new_rt_table

// paketleri eth1 yoluyla yönlendirmek için "new_rt_table" tablosunu ayarlayın

ip route add default dev eth1 table new_rt_table
ip route show table new_rt_table

// 'ip route' komutunun eth1 üzerinden yönlendirilebilmesi için paketleri işaretleyin

iptables -F -t mangle
iptables -t mangle -I OUTPUT -s <ip addr of eth1> -o eth0 -j MARK --set-mark 1

// çekirdek yapılandırmasında çoklu yönlendirme tabloları için desteği etkinleştirin.

Çekirdek Yapılandırması

→ Ağ desteği → Ağ seçenekleri

[*] IP: gelişmiş yönlendirici

[*] IP: politika yönlendirmesi

CONFIG_IP_ADVANCED_ROUTER

CONFIG_IP_MULTIPLE_TABLES

// yukarıdaki adımlar, eth0'dan düzgün şekilde çıkmak için eth0'dan çıkması gereken paketleri yeniden yönlendirir.

Herkes işe alırsa lütfen diğer yöntemleri önerin.

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.