Создайте два TAP-устройства, каждое из которых будет считываться и записываться стеком протоколов пользовательского пространства. Кроме того, два устройства TAP соединены мостом Linux.
Скрипт для подготовки среды выглядит следующим образом.
sudo ip tuntap добавить режим dev tap0
sudo ip tuntap добавить dev tap1 mode tap
sudo ip-адрес добавить 10.0.0.1/24 dev tap0
sudo ip addr add 10.0.0.2/24 dev tap1
sudo ip link настроить tap0
sudo ip link настроить tap1
sudo brctl addbr br0
sudo brctl addif br0 tap1
sudo brctl addif br0 tap0
sudo ip link set br0 up
Стек протоколов пользовательской области имеет возможность отправлять и получать ARP. Процедура создания этой проблемы была следующей.
- скинуть ARP-запрос от tap0.
- Он достигает tap1 через br0 и отправляет ARP-ответ.
- br0 получает ответ ARP, но не достигает tap0.
Я захватил пакеты следующим образом.
vagrant@impish64:~$ sudo tcpdump -i br0 -nv
tcpdump: прослушивание на br0, тип канала EN10MB (Ethernet), длина снимка 262144 байт
13:14:23.103549 ARP, Ethernet (длина 6), IPv4 (длина 4), Запросить, у кого есть 10.0.0.2, сообщить 10.0.0.1, длина 28
13:14:23.104203 ARP, Ethernet (длина 6), IPv4 (длина 4), ответ 10.0.0.2 is-at 3a:2c:25:5b:e1:40, длина 28
vagrant@impish64:~$ sudo tcpdump -i tap0 -nv
tcpdump: прослушивание по tap0, тип ссылки EN10MB (Ethernet), длина снимка 262144 байт
13:13:40.868761 ARP, Ethernet (длина 6), IPv4 (длина 4), Запросить у кого есть 10.0.0.2 сообщить 10.0.0.1, длина 28
vagrant@impish64:~$ sudo tcpdump -i tap1 -nv
tcpdump: прослушивание по tap1, тип ссылки EN10MB (Ethernet), длина снимка 262144 байт
13:12:50.368294 ARP, Ethernet (длина 6), IPv4 (длина 4), Запросить, у кого есть 10.0.0.2, сообщить 10.0.0.1, длина 28
13:12:50.368699 ARP, Ethernet (длина 6), IPv4 (длина 4), ответ 10.0.0.2 is-at 3a:2c:25:5b:e1:40, длина 28
Схема этой задачи выглядит следующим образом.
диаграмма
Почему ARP-ответ не прилетает на кран0
с этой настройкой?