Linux ağ trafiği neden sadece eth0'dan geçiyor?


20

Sunucu tarafında iki tane NIC var, eth0? 192.168.8.140 ve eth1? 192.168.8.142. İstemci 192.168.8.142'ye veri gönderir ve iftopeth1 için trafiği göstermeyi beklerim, ancak göstermez. Tüm ağlar eth0'dan geçer, bu yüzden iki NIC'yi nasıl test edebilirim?

Neden tüm trafik et1 yerine eth0'dan geçiyor? Arayüz başına 1 Gbit / sn alabileceğimi umuyordum. Kurulumumda veya yapılandırmamda sorun nedir?

Sunucu

ifconfig

eth0    Link encap:Ethernet  HWaddr 00:00:00:19:26:B0
        inet addr:192.168.8.140  Bcast:0.0.0.0  Mask:255.255.252.0
        inet6 addr: 0000::0000:0000:fe19:26b0/64 Scope:Link
        UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
        RX packets:45287446 errors:0 dropped:123343 overruns:2989 frame:0
        TX packets:3907747 errors:0 dropped:0 overruns:0 carrier:0
        collisions:0 txqueuelen:1000
        RX bytes:66881007720 (62.2 GiB)  TX bytes:261053436 (248.9 MiB)
        Memory:f7e00000-f7efffff

eth1    Link encap:Ethernet  HWaddr 00:00:00:19:26:B1
        inet addr:192.168.8.142  Bcast:0.0.0.0  Mask:255.255.255.255
        inet6 addr: 0000::0000:0000:fe19:26b1/64 Scope:Link
        UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
        RX packets:19358 errors:0 dropped:511 overruns:0 frame:0
        TX packets:14 errors:0 dropped:0 overruns:0 carrier:0
        collisions:0 txqueuelen:1000
        RX bytes:1772275 (1.6 MiB)  TX bytes:1068 (1.0 KiB)
        Memory:f7c00000-f7cfffff

Sunucu tarafı

# Listen for incomming from 192.168.8.142
nc -v -v -n -k -l 192.168.8.142 8000 | pv > /dev/null
Listening on [192.168.8.142] (family 0, port 8000)
Connection from 192.168.8.135 58785 received!

müşteri

# Send to 192.168.8.142
time yes | pv |nc -s 192.168.8.135 -4 -v -v -n 192.168.8.142 8000 >/dev/null
Connection to 192.168.8.142 8000 port [tcp/*] succeeded!

Sunucu tarafı

$ iftop -i eth0
interface: eth0
IP address is: 192.168.8.140

TX:             cumm:  6.34MB   peak: 2.31Mb   rates: 2.15Mb  2.18Mb  2.11Mb
RX:                    2.55GB          955Mb           874Mb   892Mb   872Mb
TOTAL:                 2.56GB          958Mb           877Mb   895Mb   874Mb

$ iftop -i eth1
interface: eth1
IP address is: 192.168.8.142

TX:             cumm:      0B   peak:     0b   rates:     0b      0b      0b
RX:                    4.51KB         3.49Kb          3.49Kb  2.93Kb  2.25Kb
TOTAL:                 4.51KB         3.49Kb          3.49Kb  2.93Kb  2.25Kb

$ ip link show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
    link/ether 00:00:00:19:26:b0 brd ff:ff:ff:ff:ff:ff
$ ip link show eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
    link/ether 00:00:00:19:26:b1 brd ff:ff:ff:ff:ff:ff

1
Gerçekten aradığınız şey arayüz bağıdır
Flexo

@flexo tamamen haklıdır - nihai hedefinize bağlı olarak, iki ağ arayüzünü birbirine bağlamak size daha fazla genel bant genişliği verebilir, ancak yapıştırma seçenekleri değişiklik gösterir. Alabileceğiniz en iyi şey 2 akış ~ 1 Gbit ve 1 akış 2 Gbit değil. Ayrıca yönetilen bir ethernet anahtarının hizmetlerine ihtiyacınız var. Benzer şekilde, 4 bağlanması aynı anda 4x 1 Gbit akışı verebilir.
Criggie

Yanıtlar:


32

TCP / IP ağ yığını için iki olası tasarım modeli vardır: güçlü bir ana bilgisayar modeli ve zayıf bir ana bilgisayar modeli. Güçlü ana bilgisayar modeliyle eşleşen bir davranış bekliyorsunuz. Linux zayıf ana bilgisayar modelini kullanacak şekilde tasarlanmıştır. Genel olarak zayıf ana bilgisayar modeli, yönlendirme kodunun karmaşıklığını azalttığı ve dolayısıyla daha iyi performans sunabileceği için daha yaygındır. Aksi takdirde, iki ana model sadece farklı tasarım ilkeleridir: ikisi de doğal olarak diğerinden daha iyi değildir.

Temel olarak, zayıf ana bilgisayar modeli, giden trafiğin , kaynak IP'ye bakılmaksızın , yönlendirme tablosunda listelenen, hedefin IP adresiyle (veya hedefe doğrudan ulaşılamıyorsa seçilen ağ geçidiyle) eşleşen ilk arayüzden gönderileceği anlamına gelir. adres .

Bu nedenle, aynı ağ kesiminde iki IP adresine ihtiyacınız varsa, genellikle iki ayrı fiziksel arabirimin kullanılması önerilmez. Bunun yerine bir arabirim için iki IP adresi atayın (IP takma adları: örn. Eth1 = 192.168.8.142 ve eth1: 0 = 192.168.8.140). Tek bir arabirimin sağlayabileceğinden daha fazla bant genişliğine ihtiyacınız varsa, iki veya daha fazla arabirimi birbirine bağlayın (veya varsa ekibi) ve ardından her iki IP'yi de bağ / ekip üzerinde çalıştırın.

Bir dizi sysctl ayarını değiştirerek ve her NIC için bağımsız yönlendirme tabloları oluşturmak üzere "gelişmiş yönlendirme" işlevini kullanarak, Linux'un güçlü bir ana bilgisayar modeli sistemi gibi davranması mümkündür. Ancak bu çok özel bir konfigürasyon ve onu uygulamadan önce iki kez düşünmenizi tavsiye ederim.

En cevapları görün Linux Kaynak Yönlendirme Güçlü Bitiş Sistem Modeli / Güçlü Sunucu Modeli? gerçekten ihtiyacınız varsa.


Varsayılan mod, iptables ile trafiği şekillendirmeye çalışırsanız da kötü bir sürpriz bekliyor :)
rackandboneman

evet, geçmişte güçlü ana bilgisayar modelini uygulamakta çok eğlendim. Bu proje için gerekliydi, ama kişisel bir makine için o baş ağrısından geçmekten rahatsız olmazdım.
Baldrickk

11

Dikkate alınması gereken ek bir nokta, eth1 arabiriminin 255.255.255.255 alt ağ maskesi ile yapılandırılmış olmasıdır.

Bu, eth1 arabiriminin ağ arabiriminde başka hiçbir aygıt (ana bilgisayar) beklemeyecek şekilde yapılandırıldığı anlamına gelir. Bu 192.168.8.142 istemcinizle iletişim kuramayacağı anlamına gelir.


2

Bir çok aramadan sonra, netcat neden IP ile ilişkili doğru arayüzü kullanmadığını buldum ? ve bu da aynı problem. @TelcoM'in dediği gibi, giden trafik ilk arayüze gönderilecek ve sorun bu, bu yüzden bunu çözmenin en kolay yolu:

ip route add default via 192.168.8.142 dev eth1 table 142
ip rule add from 192.168.8.142 table 142

Bu rota ip route get 192.168.8.135 from 192.168.8.142eth0 yerine eth1 iadesini yapacak . Sonra her şey beklendiği gibi çalışır.


3
Bahsettiğim soruda belirtilen ARP sysctl ayarlarını atlarsanız ve kurumsal düzeyde anahtarlar ve yönlendiricilerle uğraşırsanız, ağ yöneticiniz, yönlendiricinizde gereksiz "IP adresi çırpma" mesajlarına neden olacak şekilde sizden biraz mutsuz olacaktır. sistem, her iki arabirimdeki her iki IP için de ARP isteklerini yanıtlayabilir. Veya ağda IP ele geçirme koruması varsa, sisteminize gelen tüm trafiği devreye sokup devre dışı bırakabilir.
telcoM
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.