IPv6 в Linux tun / tap: NDP не работает

Я работаю над старым кодом, который использовался для подключения различных устройств IPv6 к другому типу сети (сеть Power Line, PLC, которая очень похожа на 802.15.4) . Для этого он создал интерфейсы tun / tap Linux на каждом устройстве (на самом деле Tun, а не Tap) с кодом C, который может принимать исходящие пакеты от tun и доставлять их в ПЛК, а в другом направлении он может читать входящие пакеты из PLC и вставьте в интерфейс tun.

Система работает в основном нормально, но только я обнаружил, что функция NDP работает некорректно. Во-первых, я заметил, что с двумя такими устройствами я не могу пинговать друг друга по их локальному адресу IPv6 link (fe80 :: ... / 10). Затем я использовал tcpdump для мониторинга трафика tun и обнаружил, что сообщения Neighbor Solicitation / Advertising вообще нет. Еще одна странная вещь, которую я обнаружил, заключается в том, что объявление маршрута отправляется с одного устройства сети (главного устройства ПЛК, которое является так называемым узлом координатора вызова), но не с любого другого устройства в сети.

Я хочу понять, какого правильного поведения я должен ожидать от такой сети в соответствии с протоколом IPv6 NDP и как это сделать.

Буду признателен, если кто-нибудь подскажет мне что-нибудь.

-woody

2
задан 20 January 2019 в 15:59
1 ответ

Ожидаемое поведение заключается в том, что NDP используется на интерфейсах TAP, но не на интерфейсах TUN.

TAP эмулирует Ethernet,поэтому ядро ​​будет доставлять кадры Ethernet в ваш код и ожидать кадры Ethernet от вашего кода. Таким образом, он должен сначала выполнить NDP, чтобы узнать, какой MAC-адрес назначения использовать для IP-пакетов, которые он передает вашему коду.

TUN, с другой стороны, выполняет IP без уровня Ethernet. Ваш код будет получать IP-пакеты без дополнительных заголовков, и он будет ожидать получения IP-пакетов от вашего кода. При желании можно настроить небольшой заголовок перед IP-пакетом, чтобы различать пакеты IPv4 и IPv6, однако вы также можете использовать поле версии IP для различения (если вы не используете очень устаревшую версию ядра).

I ожидает, что локальные для ссылки адреса будут работать на обоих типах интерфейсов. Как и в случае с другими адресами, NDP будет использоваться на TAP, но не на интерфейсах TUN.

2
ответ дан 3 December 2019 в 11:23

Теги

Похожие вопросы