Вопрос или проблема
Для проекта на работе мне нужно иметь возможность тестировать различные Ethernet NIC, подключая их к “петлевому адаптеру”, как этот, на различных встраиваемых Linux-боксах, которые выходят с производственной линии. Я хотел бы настроить два разных IP-адреса (AddressA и AddressB) на одном Ethernet-интерфейсе, а затем запустить ping с AddressA на AddressB.
Пример: ping -I AddressA AddressB
Это вообще возможно?
Также существует ли тест, который проверяет Ethernet-интерфейс исключительно на уровне L2 / MAC-адреса, используя петлевую вилку? Если я правильно помню, у RealTek был инструмент диагностики для их Ethernet-адаптеров 8139, который выполнял тест петлевого соединения только на уровне L2, и мне интересно, есть ли инструмент для Linux, который делает то же самое.
ОБНОВЛЕНИЕ: Добавил комментарии о том, почему я тестирую боксы в вышеуказанных комментариях. Я собираюсь попробовать некоторые из этих идей в эти выходные, чтобы увидеть, что будет. Может быть, сделаю свой собственный “петлевой адаптер”, используя разъем Keystone и несколько проводов из хозяйственного магазина, и попробую посмотреть на сигналы с помощью осциллографа или логического анализатора, чтобы убедиться, что сигналы действительно поступают на провод. Поскольку это кажется более сложным, чем я ожидал, наша команда на работе приняла решение тестировать Ethernet-порты Linux-боксов, купив небольшой домашний NAT-роутер, а затем выполнив ping на роутер, и разместив это в тестовых установках. Тем не менее, мне интересны технические аспекты этого, и я хочу экспериментировать с этой темой самостоятельно.
Определенно 🙂
# ip address list dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:1e:4f:9b:4a:ab brd ff:ff:ff:ff:ff:ff
inet 10.10.141.83/24 brd 10.10.141.255 scope global eth0
inet6 fe80::21e:4fff:fe9b:4aab/64 scope link
valid_lft forever preferred_lft forever
# ip address add 10.10.141.253/24 dev eth0
# ip address list dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:1e:4f:9b:4a:ab brd ff:ff:ff:ff:ff:ff
inet 10.10.141.83/24 brd 10.10.141.255 scope global eth0
inet 10.10.141.253/24 scope global eth0
inet6 fe80::21e:4fff:fe9b:4aab/64 scope link
valid_lft forever preferred_lft forever
# ping -I 10.10.141.83 10.10.141.253
PING 10.10.141.253 (10.10.141.253) from 10.10.141.83 : 56(84) bytes of data.
64 bytes from 10.10.141.253: icmp_seq=1 ttl=64 time=0.050 ms
64 bytes from 10.10.141.253: icmp_seq=2 ttl=64 time=0.034 ms
64 bytes from 10.10.141.253: icmp_seq=3 ttl=64 time=0.038 ms
^C
--- 10.10.141.253 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1999ms
rtt min/avg/max/mdev = 0.034/0.040/0.050/0.010 ms
# ip address delete 10.10.141.253/24 dev eth0
# ping -I 10.10.141.83 10.10.141.253
PING 10.10.141.253 (10.10.141.253) from 10.10.141.83 : 56(84) bytes of data.
From 10.10.141.83 icmp_seq=1 Destination Host Unreachable
From 10.10.141.83 icmp_seq=2 Destination Host Unreachable
From 10.10.141.83 icmp_seq=3 Destination Host Unreachable
^C
--- 10.10.141.253 ping statistics ---
4 packets transmitted, 0 received, +3 errors, 100% packet loss, time 3016ms
На самом деле очень просто. 🙂 (Шучу, всегда просто, если ты это уже знаешь)
Я не уверен, что L2 сработает, но с помощью ip neigh
вы должны иметь возможность изменить кэш arp тоже (так много о простой задаче)
Возможно, вы обнаружите, что arping с большей вероятностью достигнет провода, так как он использует arp и, следовательно, полностью избегает IP-стека.
В этом сценарии маловероятно, что сигнал когда-либо действительно “достигнет провода”. Поскольку устройство увидит, что на одном интерфейсе присвоены оба IP-адреса, все MAC-обращения / маршрутизация (если два интерфейса находятся в разных подсетях) будет происходить в самой системе и никогда не попадет на физический интерфейс.
Петлевое соединение можно использовать, чтобы обмануть систему, заставив ее видеть интерфейс как “работающий”, чтобы вы могли провести это тестирование, но просто использование обычного кабеля и свободного порта коммутатора даст тот же результат.
Если вы имеете в виду, что будете подключать eth0 к eth1 в одном блоке, то вы можете просто использовать кроссоверный кабель, но может произойти то же самое, что и выше.
Петлевой адаптер Ethernet: http://www.tikkiweb.net/loopback
Я провел небольшое исследование и нашел эту страницу о преобразовании сигналов Ethernet в свет и тестировании этого в конфигурации петлевого соединения: http://ronja.twibright.com/testing/ploss_tetrapolis_ping.php.
К сожалению, это не настоящий ping, так как вы просто видите один и тот же ICMP пакет дважды в Wireshark/tcpdump. Однако это гарантирует, что сигнал достигает провода.
Так что ответ на 2024 год – использовать VRF
Предположим, 1 интерфейс, eno5 и eno6
ip link add vrf5 type vrf table 10
ip link add vrf6 type vrf table 11
ip link set vrf5 up
ip link set vrf6 up
ip link set eno5 master vrf5
ip link set eno6 master vrf6
ip addr add 192.168.68.5/24 dev eno5
ip addr add 192.168.68.6/24 dev eno6
ip link set eno5 up
ip link set eno6 up
ping -I vrf5 192.168.68.6
Если вы сделаете
ping -I vrf5 192.168.68.5
тогда вы должны обнаружить более быстрое время ответа ping, потому что это не проходит через кабель.
В моих тестах я могу отключить кабель, и ping останавливается, и он снова запускается, когда кабель снова подключен.
Я не уверен, почему ему нужно 2 VRF, и почему используется обычная таблица маршрутизации для одного конца, но по какой-то причине это не работает для меня.
Ответ или решение
Тестирование Ethernet NIC с использованием адаптера обратной связи
Ethernet адаптеры обратной связи, такие как рассматриваемый здесь, являются отличным инструментом для тестирования сетевых интерфейсов (NIC). Данный подход позволяет убедиться, что ваш сетевой интерфейс исправен и функционирует так, как ожидается. В данной статье мы подробно рассмотрим, как использовать адаптер обратной связи для выполнения тестов с помощью команд ping и других утилит.
Возможность тестирования с двумя IP-адресами
Как вы указали, вы хотите настроить два разных IP-адреса (AddressA и AddressB) на одном Ethernet-интерфейсе и выполнить ping с одного адреса на другой. Это возможно на операционной системе Linux, и в вашем случае вы можете использовать команду ip address
для добавления второго IP-адреса.
Пример, который можно использовать:
# Просмотр текущих IP-адресов на интерфейсе eth0
ip address list dev eth0
# Добавление второго IP-адреса
ip address add 10.10.141.253/24 dev eth0
# Тестирование ping
ping -I 10.10.141.83 10.10.141.253
При успешной настройке вы должны увидеть ответы от второго IP-адреса, что подтверждает, что интерфейс работает должным образом и может обрабатывать локальные подключения.
Локальный уровень тестирования на уровне L2 / MAC-адреса
Для проверки Ethernet интерфейса на уровне L2 (канального уровня) с использованием адаптера обратной связи можно рассмотреть применение утилиты arping
. Это позволяет отправлять ARP-запросы, которые не проходят через стек IP и обеспечивают прямое взаимодействие на уровне канала:
arping 10.10.141.253
Эта команда вызывает ARP-запрос и проверяет доступность заданного IP-адреса непосредственно на уровне Ethernet, что полезно для диагностики Ethernet-кабелей и оборудования.
Кросс-кабель и альтернативные решения
Как упоминалось, использование адаптера обратной связи — это один из способов проверки, но существует ряд альтернативных методов. Например, если вы хотите проверить связь между двумя интерфейсами на одном устройстве, можно использовать кросс-кабель или подключить к обычному коммутатору. Это позволит избежать сложностей взаимодействия локальной подсистемы.
Лично меня радует ваша инициатива по исследованию возможностей самодельного адаптера обратной связи. Создание такого устройства может быть дешевле и более наглядно продемонстрировать работу Ethernet сигналов. Вы также упомянули об использовании логического анализатора или осциллографа, что является отличной идеей для получения точной информации о состоянии сигнала.
Итог
Использование Ethernet адаптера обратной связи — отличный метод для проверки сетевых интерфейсов, особенно при работе с встраиваемыми системами. Вы можете без труда настроить несколько IP-адресов и протестировать их с помощью команд ping
и arping
. Не забывайте о других доступных средствах тестирования и диагностики, таких как использование кросс-кабелей и анализаторов сигналов, чтобы достичь наилучших результатов при тестировании оборудования.
Тестирование сетевых интерфейсов с использованием адаптера обратной связи предоставляет полезный способ удостовериться в их надежности и работоспособности перед выходом на рынок.