Вопрос или проблема
Я использую Ubuntu Server 16.04 с двумя встроенными сетевыми интерфейсами. Ubuntu видит обе карты, но как eth0, так и eth1 передают трафик только через один физический интерфейс, хотя они настроены отдельно (по моему мнению). Информация ниже:
lshw -C network
*-network
description: Ethernet interface
product: 82579LM Gigabit Network Connection
vendor: Intel Corporation
physical id: 19
bus info: pci@0000:00:19.0
logical name: eth0
version: 04
serial: 54:be:f7:65:9a:9b
size: 1Gbit/s
capacity: 1Gbit/s
width: 32 bits
clock: 33MHz
capabilities: pm msi bus_master cap_list ethernet physical tp 10bt 10bt-fd 100bt 100bt-fd 1000bt-fd autonegotiation
configuration: autonegotiation=on broadcast=yes driver=e1000e driverversion=3.2.6-k duplex=full firmware=0.13-4 ip=172.22.1.112 latency=0 link=yes multicast=yes port=twisted pair speed=1Gbit/s
resources: irq:26 memory:f7e00000-f7e1ffff memory:f7e39000-f7e39fff ioport:f080(size=32)
*-network
description: Ethernet interface
product: 82574L Gigabit Network Connection
vendor: Intel Corporation
physical id: 0
bus info: pci@0000:02:00.0
logical name: eth1
version: 00
serial: 54:be:f7:65:9a:9c
size: 1Gbit/s
capacity: 1Gbit/s
width: 32 bits
clock: 33MHz
capabilities: pm msi pciexpress msix bus_master cap_list ethernet physical tp 10bt 10bt-fd 100bt 100bt-fd 1000bt-fd autonegotiation
configuration: autonegotiation=on broadcast=yes driver=e1000e driverversion=3.2.6-k duplex=full firmware=2.1-3 ip=172.22.1.113 latency=0 link=yes multicast=yes port=twisted pair speed=1Gbit/s
resources: irq:18 memory:f7d00000-f7d1ffff ioport:e000(size=32) memory:f7d20000-f7d23fff
/etc/network/interfaces:
# Сетевой интерфейс обратной связи
auto lo
iface lo inet loopback
# Основной сетевой интерфейс
auto eth0
iface eth0 inet dhcp
# Вторичный сетевой интерфейс
auto eth1
iface eth1 inet dhcp
Спасибо за любую помощь!
ifconfig:
eth0 Link encap:Ethernet HWaddr 54:be:f7:65:9a:9b
inet addr:172.22.1.112 Bcast:172.22.1.255 Mask:255.255.255.0
inet6 addr: fe80::56be:f7ff:fe65:9a9b/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:61 errors:0 dropped:0 overruns:0 frame:0
TX packets:11 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:5880 (5.8 KB) TX bytes:1436 (1.4 KB)
Interrupt:20 Memory:f7e00000-f7e20000
eth1 Link encap:Ethernet HWaddr 54:be:f7:65:9a:9c
inet addr:172.22.1.113 Bcast:172.22.1.255 Mask:255.255.255.0
inet6 addr: fe80::56be:f7ff:fe65:9a9c/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1093 errors:0 dropped:0 overruns:0 frame:0
TX packets:575 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:88205 (88.2 KB) TX bytes:42753 (42.7 KB)
Interrupt:18 Memory:f7d00000-f7d20000
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:160 errors:0 dropped:0 overruns:0 frame:0
TX packets:160 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:11840 (11.8 KB) TX bytes:11840 (11.8 KB)
route -n:
Таблица маршрутизации IP ядра
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 172.22.1.1 0.0.0.0 UG 0 0 0 eth1
172.22.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
172.22.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
route -n с отключенным eth0. Не удается получить доступ ни к одному IP-адресу.
Таблица маршрутизации IP ядра
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 172.22.1.1 0.0.0.0 UG 0 0 0 eth0
172.22.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
172.22.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
Скрипт с отключенным eth0 eth0 Link encap:Ethernet HWaddr 54:be:f7:65:9a:9b inet addr:172.22.1.112 Bcast:172.22.1.255 Mask:255.255.255.0 inet6 addr: fe80::56be:f7ff:fe65:9a9b/64 Scope:Link UP BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:28527 errors:0 dropped:0 overruns:0 frame:0 TX packets:10 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:2202058 (2.2 MB) TX bytes:1372 (1.3 KB) Interrupt:20 Memory:f7e00000-f7e20000 eth1 Link encap:Ethernet HWaddr 54:be:f7:65:9a:9c inet addr:172.22.1.113 Bcast:172.22.1.255 Mask:255.255.255.0 inet6 addr: fe80::56be:f7ff:fe65:9a9c/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:31516 errors:0 dropped:0 overruns:0 frame:0 TX packets:1730 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:6125004 (6.1 MB) TX bytes:155950 (155.9 KB) Interrupt:18 Memory:f7d00000-f7d20000 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:160 errors:0 dropped:0 overruns:0 frame:0 TX packets:160 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1 RX bytes:11840 (11.8 KB) TX bytes:11840 (11.8 KB) Таблица маршрутизации IP ядра Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 172.22.1.1 0.0.0.0 UG 0 0 0 eth1 172.22.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1 172.22.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 PING 8.8.8.8 (8.8.8.8) 56(84) байт данных. 64 байта от 8.8.8.8: icmp_seq=1 ttl=58 время=27.4 мс 64 байта от 8.8.8.8: icmp_seq=2 ttl=58 время=25.8 мс 64 байта от 8.8.8.8: icmp_seq=3 ttl=58 время=27.8 мс 64 байта от 8.8.8.8: icmp_seq=4 ttl=58 время=26.6 мс 64 байта от 8.8.8.8: icmp_seq=5 ttl=58 время=26.6 мс --- статистика пинга 8.8.8.8 --- 5 пакетов передано, 5 получено, 0% потеря пакетов, время 4007мс rtt min/avg/max/mdev = 25.818/26.897/27.860/0.733 мс Скрипт с отключенным eth1 eth0 Link encap:Ethernet HWaddr 54:be:f7:65:9a:9b inet addr:172.22.1.112 Bcast:172.22.1.255 Mask:255.255.255.0 inet6 addr: fe80::56be:f7ff:fe65:9a9b/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:28540 errors:0 dropped:0 overruns:0 frame:0 TX packets:10 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:2202968 (2.2 MB) TX bytes:1372 (1.3 KB) Interrupt:20 Memory:f7e00000-f7e20000 eth1 Link encap:Ethernet HWaddr 54:be:f7:65:9a:9c inet addr:172.22.1.113 Bcast:172.22.1.255 Mask:255.255.255.0 inet6 addr: fe80::56be:f7ff:fe65:9a9c/64 Scope:Link UP BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:31528 errors:0 dropped:0 overruns:0 frame:0 TX packets:1735 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:6125988 (6.1 MB) TX bytes:156460 (156.4 KB) Interrupt:18 Memory:f7d00000-f7d20000 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:160 errors:0 dropped:0 overruns:0 frame:0 TX packets:160 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1 RX bytes:11840 (11.8 KB) TX bytes:11840 (11.8 KB) Таблица маршрутизации IP ядра Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 172.22.1.1 0.0.0.0 UG 0 0 0 eth1 172.22.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1 172.22.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 PING 8.8.8.8 (8.8.8.8) 56(84) байт данных. --- статистика пинга 8.8.8.8 --- 5 пакетов передано, 0 получено, 100% потеря пакетов, время 4031мс
Обе ваши сетевые карты работают. У каждой из них есть свои IP-адреса:
eth0: 172.22.1.112
и
eth1: 172.22.1.113
Вы можете проверить, что обе из них работают, пингуя любой IP-адрес:
$ ping -c10 172.22.1.112
$ ping -c10 172.22.1.113
Если у вас есть другой компьютер в вашей сети, вы также можете получить доступ к вашему компьютеру с любого IP-адреса.
Если вы настроите веб-сервер на вашем компьютере, вы сможете получить доступ к веб-серверу, используя любой из IP-адресов:
http://172.22.1.112
http://172.22.1.113
Доступ (вывод, который вы видите при использовании любого из этих примеров) является подтверждением того, что обе сетевые карты работают. Кроме того, тот факт, что ваш dhcp
сервер смог получить доступ к ним и назначить IP-адреса, является еще одним подтверждением того, что обе карты работают.
Запустите этот скрипт, чтобы протестировать сетевые карты по отдельности:
Скопируйте и вставьте следующий скрипт. Вы можете назвать его: testnic.sh
.
Запустите скрипт по отдельности, когда каждая сетевуха подключена к компьютеру и маршрутизатору/модему.
testnic.sh:
#!/bin/bash
ifconfig
route -n
sudo route del default gw 172.22.1.1
sudo route add default gw 172.22.1.1
ping -c5 8.8.8.8
Запустите команду как:
$ ./testnic.sh
Покажите как команду, так и вывод.
Обновление:
Ваш предыдущий вывод указывает на проблему, как упоминалось, в маршруте. Вам нужно удалить предыдущий маршрут, когда вы отключаете эту сетевую карту, а затем создать другой маршрут на её место.
Ниже приведен пример скрипта, который поможет вам с этой задачей. Скрипт нужно будет протестировать и настроить под вашу среду. Но ответ на ваш вопрос в том, что обе сетевые карты работают. Разница, которую вы наблюдаете, является результатом их конфигурации.
Когда вы отключаете одну сетевую карту, измените свою сетевую конфигурацию так, чтобы использовать маршрутизацию оставшейся.
Это ещё один пример скрипта, чтобы облегчить изменение конфигураций, когда вы переключаете сетевые карты.
#!/bin/bash
currentroute=$(route -n | awk '/UG/{print $NF}')
available="none"
route="0"
available="none"
find /sys/class/net/en* -exec echo "{}/operstate" \; | while read line; do
# echo "[$line]"
IFS="https://askubuntu.com/" read -r -a array <<< "$line"
device="${array[4]}"
state="$(cat $line)"
thisdevice="$device:$state"
if [[ "$thisdevice" == "$currentroute:down" ]] ; then
route="0"
fi
if [[ "$state" == "up" ]]
then
echo "Устройство $device доступно"
echo "$device" > /tmp/available
fi
done
read -r available </tmp/available
if [[ "$route" == "0" ]]; then
route del default gw 172.22.1.1 $currentdevice
route add default gw 172.22.1.1 $available
fi
echo "[$route/$available]"
Почему бы не использовать объединённый интерфейс, чтобы объединить обе карты в один виртуальный интерфейс?
auto eth0
iface eth0 inet manual
mtu 9000
auto eth1
iface eth1 inet manual
mtu 9000
auto bond0
iface bond0 inet dhcp
mtu 9000
bond-mode 0
bond-primary eth0
bond-slaves eth0 eth1
Ответ или решение
Ваша проблема с двумя сетевыми интерфейсами (NIC) на Ubuntu Server 16.04, когда только один интерфейс передает трафик, действительно может быть результатом неправильной маршрутизации. Ниже приведено полное решение с пояснениями.
Анализ текущей конфигурации
На основе предоставленных вами данных, оба сетевых интерфейса (eth0
и eth1
) на самом деле функционируют и получают IP-адреса через DHCP:
eth0
: 172.22.1.112eth1
: 172.22.1.113
Тем не менее, вы наблюдаете, что они не могут одновременно работать как отдельные интерфейсы, и маршруты в вашей таблице маршрутизации вызывают конфликт.
Проблема в таблице маршрутизации
Вы можете заметить, что в ваших выводах маршрутизации (route -n
) для обоих интерфейсов прописан один и тот же маршрут (172.22.1.0/24). Это может стать причиной конфликтов, когда оба интерфейса пытаются передать трафик по одному и тому же маршруту.
Возможное решение
-
Измените конфигурацию интерфейсов. Убедитесь, что каждый интерфейс настроен правильно в
/etc/network/interfaces
. Вы можете использовать DHCP для обоих интерфейсов, как вы уже сделали, но убедитесь, что маршрутизация выполняется на основе одного основного интерфейса. -
Настройка маршрутизации. Попробуйте вручную задать маршруты для каждого интерфейса, чтобы убедиться, что один из них не перехватывает трафик другого.
-
Тестирование. Для тестирования лучше создать bash-скрипт для проверки состояния интерфейсов и маршрутов. Например:
#!/bin/bash
echo "Текущая конфигурация сетевых интерфейсов:"
ifconfig
echo "Текущая таблица маршрутов:"
route -n
# Управление маршрутами
sudo route del default gw 172.22.1.1 # Удаление текущего шлюза по умолчанию
sudo route add default gw 172.22.1.1 dev eth0 # Установка шлюза по умолчанию для eth0
ping -c5 8.8.8.8
Сохраните этот скрипт как testnic.sh
, сделайте его исполняемым с помощью chmod +x testnic.sh
, и запустите его.
Альтернатива: Объединение интерфейсов в "bonding"
Если ваша цель состоит в том, чтобы повысить надежность и пропускную способность, рассмотрите возможность использования объединенного интерфейса (bonding). Это позволит связать оба NIC в один виртуальный интерфейс. Вот пример конфигурации:
auto eth0
iface eth0 inet manual
mtu 9000
auto eth1
iface eth1 inet manual
mtu 9000
auto bond0
iface bond0 inet dhcp
mtu 9000
bond-mode 0
bond-primary eth0
bond-slaves eth0 eth1
После внесения этих изменений перезапустите сетевые сервисы:
sudo ifdown eth0 eth1
sudo ifup bond0
Заключение
Если вы будете следовать предложенным шагам, это должно помочь вам правильно настроить и использовать оба интерфейса NIC в вашей системе. Убедитесь, что после выполнения всех изменений у вас есть возможность тестировать каждый интерфейс отдельно и использовать их в совокупности, если это требуется.
Если у вас возникают дополнительные проблемы, пожалуйста, предоставьте полные логи, чтобы можно было глубже проанализировать вашу конфигурацию.