Я вставляю свой сетевой узел между двумя устаревшими устройствами, которые обмениваются сообщениями tcp и udp с использованием выделенных портов в обоих направлениях. Моему новому узлу необходимо прозрачно протолкнуть некоторые сообщения tcp / udp и перехватить другие сообщения tcp / udp для обработки на уровне приложения перед отправкой обработанных сообщений. Схема для этой конфигурации типа "человек посередине":
[legacy1] - [mitm] - [legacy2]
с этими интерфейсами
На машине MITM работает Ubuntu 16.04.
Достаточно ли iptables (на 3-м уровне), хотя я хочу установить мост (на 2-м уровне)? Что лучше: ebtables или nftables?
Вы упоминаете мост (L2), но согласно вашей диаграмме вы выполняете маршрутизацию (L3), поскольку кажется, что есть два одинаковых подсети (скажем, 192.168.1.0/24), одна из которых включает legacy1 и mitm-left, а вторая включает legacy2 и mitm-right.
Вам, вероятно, потребуется ...
# create bridge between mitm-left and mitm-right
ip l a name br0 type bridge
ip l set br0 up
ip l set eth0 up
ip l set eth0 master br0
ip l set eth1 up
ip l set eth1 master br0
# add IP within the subnet that legacy1 and legacy2 is part of
ip a a 192.168.1.0/24 dev br0
# now ensure that netfilter works on the l2 bridge
modprobe br_netfilter
echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
Последние две строки являются разовыми изменениями, вы должны сделать их постоянными, чтобы обеспечить:
br_netfilter
при каждом запуске bridge-nf-call
в iptables (т.е. по echo 'net.bridge.bridge-nf-call-iptables = 1' >> /etc/sysctl.conf
)[12177 visibleresult
Эта настройка позволяет netfilter части ядра Linux фильтр / журнал / правила NAT для мостового трафика.
Теперь вы можете:
iptables
для установки правил netfilter для обработки / изменения пакетов IPv4 / IPv6. ebtables
для установки правил netfilter для обработки / изменить любые другие фреймы. nftables
для установки правил netfilter (если ваш дистрибутив достаточно актуален). Что касается вашего последнего вопроса - так как есть много примеров а также поддержку iptables / ebtables, я бы пошел с ними. Nftables может обеспечить лучшую производительность, но я полагаю, что ваша установка не требует высокой производительности.