Я получил две сетевые карты на стороне сервера, eth0? 192.168.8.140 и eth1? 192.168.8.142. Клиент отправляет данные в 192.168.8.142, и я ожидаю iftop
показать трафик для eth1, но это не так. Все сети проходят через eth0, так как я могу протестировать две сетевые карты?
Почему весь трафик проходит через eth0 вместо eth1? Я ожидал, что смогу получить 1 Гбит / с на интерфейс. Что не так с моей настройкой или настройкой?
сервер
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
Серверная сторона
# 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!
клиент
# 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!
Серверная сторона
$ 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
Ответы:
Существуют две возможные модели проектирования сетевого стека TCP / IP: модель сильного хоста и модель слабого хоста. Вы ожидаете поведения, которое будет соответствовать модели сильного хоста. Linux предназначен для использования модели слабого хоста. В целом, модель слабого хоста является более распространенной, поскольку она уменьшает сложность кода маршрутизации и, следовательно, может предложить более высокую производительность. В остальном две хост-модели - это просто разные принципы проектирования: ни одна из них не лучше, чем другая.
По сути, модель слабого хоста означает, что исходящий трафик будет отправляться по первому интерфейсу, указанному в таблице маршрутизации, который соответствует IP-адресу назначения (или выбранному шлюзу, если пункт назначения недоступен напрямую), без учета исходного IP- адреса. адрес .
Именно поэтому, как правило, не рекомендуется использовать два отдельных физических интерфейса, если вам нужны два IP-адреса в одном сегменте сети. Вместо этого назначьте два IP-адреса для одного интерфейса (псевдонимы IP: например, eth1 = 192.168.8.142 и eth1: 0 = 192.168.8.140). Если вам нужна большая полоса пропускания, чем может предоставить один интерфейс, соедините (или объедините, если применимо) два или более интерфейсов вместе, а затем запустите оба IP-адреса в объединении / группе.
Путем настройки ряда параметров sysctl и использования функции «расширенной маршрутизации» для настройки независимых таблиц маршрутизации для каждого сетевого адаптера можно заставить Linux вести себя как система с сильной моделью хоста. Но это очень особенная конфигурация, и я бы рекомендовал дважды подумать, прежде чем ее применять.
См. Ответы в разделе « Маршрутизация исходного кода Linux», «Модель систем с сильным концом / Модель с мощным хостом»? если тебе это действительно нужно
источник
Дополнительным моментом, который следует учитывать, является то, что интерфейс eth1 настроен с маской подсети 255.255.255.255.
Это означает, что интерфейс eth1 настроен на отсутствие других устройств (хостов) в его сетевом интерфейсе. Это означает, что он не сможет общаться с вашим клиентом 192.168.8.142.
источник
После долгих поисков я обнаружил, почему netcat не использует правильный интерфейс, связанный с IP? и это та же проблема. Как сказал @telcoM, исходящий трафик будет отправляться на первый интерфейс, и это проблема, поэтому самый простой способ решить это:
Этот маршрут
ip route get 192.168.8.135 from 192.168.8.142
вернет eth1 вместо eth0. Тогда все работает как положено.источник