Устройство Tap в Linux неправильно передает пакеты ARP/IP?

Кажется, есть и другие люди, у которых есть вопросы, похожие на мои, но я думаю, что они особенно специфичны. Я думаю, что я могу столкнуться с общей проблемой.

У меня есть TAP-устройство в Linux (созданное на C), которое подключено к другой сети, и я хочу, чтобы мой компьютер мог связываться с другой сетью через это TAP-устройство.

Я четко вижу пакеты arp, поступающие с помощью wireshark, но мое ядро ​​​​не отвечает на них. Я попытался настроить мост и установить IP-адрес моста безрезультатно. Я также пытался подключиться к физическому оборудованию, и по какой-то причине Linux, похоже, не передает данные на другой сетевой адаптер.

Если я настрою статические маршруты ARP, кажется, что этот Linux-компьютер не отвечает на эхо-запросы к устройствам на нем.

# ifconfig tap0 up
# brctl addbr br0
# brctl addif br0 tap0
# brctl addif br0 eth9
# ifconfig br0 up

Я могу попробовать настроить br0, eth9 или tap0 на IP-адрес, но ни один из них не отвечает на ping или arps. Даже если я разрушу мост, ничего.

Я чувствую, что мне нужен «притворный» интерфейс. Например, «это поддельная сетевая карта» и обсудить это. Я чувствую, что это должно быть возможно с краном.

Похожие проблемы:

Linux TUN/TAP: невозможно прочитать данные обратно с TAP-устройств

Почему пакеты ARP или ICMPv6 не обрабатывается TAP-устройством Linux


person Charles Lohr    schedule 09.02.2017    source источник
comment
ARP не маршрутизируется, потому что широковещательные сообщения уровня 2 не могут быть маршрутизированы (кадры уровня 2 удаляются до достижения уровня 3, например, маршрутизация). ARP может быть соединен мостом, но мосты не понимают уровень-3, например. ИП. Вы никогда не должны соединять две разные IP-сети. Я думаю, вы неправильно понимаете сетевые уровни и назначение TUN/TAP.   -  person Ron Maupin    schedule 09.02.2017


Ответы (1)


Я сожалею, что это не было связано с тем, как устройства tap/tun работают в Linux. На самом деле этот механизм будет работать.

Проблема заключалась в том, что я использовал «отправить» и «получить» для связи с необработанным устройством. Wireshark не может отличить, но ОС Linux откажется использовать данные, поступающие из сокета.

Используйте пример этого парня: http://www.cis.syr.edu/~wedu/seed/Labs/VPN/files/simpletun.c

person Charles Lohr    schedule 09.02.2017