протоколирование пакетов на мосту Linux

Я пытаюсь регистрировать пакеты, используя мост, созданный на espressobin v5 SOC. Я установил его с помощью пакета arm archlinux. Эта плата встроена в стандартную комплектацию и обеспечивает встроенные возможности коммутации и маршрутизации. Я думаю, что отключил все эти функции, поскольку мне не нужны возможности маршрутизации. Мне нужны только возможности моста с проверкой пакетов.

Намерение состоит в том, чтобы разместить это устройство выше по потоку от ряда VoIP-телефонов и использовать его для проверки пакетов, поступающих на эти телефоны, и их регистрации. Регистрируемые пакеты будут служить индикатором для отдельного процесса (не в рамках этого вопроса), чтобы указать, что телефоны звонят. Эти пакеты перестанут регистрироваться, когда кто-то ответит на звонок (протокол меняется с UDP на TCP, тем самым аннулируя правило регистрации).

ootb Espressobin настроен с мостом br0, который подключается к lan0 lan1. Я отключил dnsamasq и мост по умолчанию br0.

Вместо br0 есть br1, который соединяет lan0 lan1 и устанавливается на статический IP-адрес, назначенный маршрутизатором. Я установил ebtables и запустил следующее:

modprobe br_netfilter 
modprobe nf_conntrack

вот ifconfig

br1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.1.216  netmask 255.255.255.0  broadcast 10.0.1.255
        inet6 fe80::a423:15ff:fe81:681a  prefixlen 64  scopeid 0x20<link>
        ether a6:23:15:81:68:1a  txqueuelen 1000  (Ethernet)
        RX packets 211400  bytes 21894506 (20.8 MiB)
        RX errors 0  dropped 696  overruns 0  frame 0
        TX packets 11036  bytes 485479 (474.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
lan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::f2ad:4eff:fe08:6070  prefixlen 64  scopeid 0x20<link>
        ether f0:ad:4e:08:60:70  txqueuelen 1000  (Ethernet)
        RX packets 279130  bytes 32859949 (31.3 MiB)
        RX errors 0  dropped 74  overruns 0  frame 0
        TX packets 2615  bytes 132663 (129.5 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lan1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::f2ad:4eff:fe08:6070  prefixlen 64  scopeid 0x20<link>
        ether f0:ad:4e:08:60:70  txqueuelen 1000  (Ethernet)
        RX packets 13767  bytes 1200675 (1.1 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 8539  bytes 361411 (352.9 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

вот мое правило ebtables:

[root@alarm ipv4]# ebtables -t nat -L
Bridge table: nat

Bridge chain: PREROUTING, entries: 3, policy: ACCEPT
-p IPv4 --ip-src 10.0.1.198 --log-level notice --log-prefix "nf_conn" --log-ip -j CONTINUE

вот результат правила:

[91201.408471] nf_conn IN=lan1 OUT= MAC source = b8:27:eb:87:49:d4 MAC dest = ff:ff:ff:ff:ff:ff proto = 0x0800 IP SRC=10.0.1.198 IP DST=10.0.1.255, IP tos=0x00, IP proto=17 SPT=137 DPT=137
[91306.855593] nf_conn IN=lan1 OUT= MAC source = b8:27:eb:87:49:d4 MAC dest = ff:ff:ff:ff:ff:ff proto = 0x0800 IP SRC=10.0.1.198 IP DST=10.0.1.255, IP tos=0x00, IP proto=17 SPT=138 DPT=138
[91306.869812] nf_conn IN=lan1 OUT= MAC source = b8:27:eb:87:49:d4 MAC dest = ff:ff:ff:ff:ff:ff proto = 0x0800 IP SRC=10.0.1.198 IP DST=10.0.1.255, IP tos=0x00, IP proto=17 SPT=138 DPT=138

10.0.1.198 i работает небольшой сервер nodejs, который обменивается данными через порт 15000 эспрессобин помещается между моей рабочей станцией и 10.0.1.198 следующим образом:

router ---- workstation (10.0.1.X)
|_____espressobin (lan0) - (lan1) ---- nodejs server (10.0.1.198)

когда я перехожу с экспрессобина на 10.0.1.198 ( http://10.0.1.198:15000 ), я вижу пакеты

когда я заворачиваюсь с рабочей станции на 10.0.1.198, я не вижу зарегистрированных пакетов. я ожидал увидеть пакеты.

согласно эта документация ebtables не может выполнять полноценный IPv4, поэтому modprobe br_netfilter

Мой вопрос: я на правильном пути или я выполняю миссию невыполнимой?

Если это частично связано с этим ограничением ebtables, то каков был бы (если таковой имеется) возможный метод для достижения моей цели регистрации пакетов на мосту.

0
задан 26 June 2019 в 23:22
1 ответ

В системе ESPRESSObin используется встроенный чип коммутатора Ethernet, который поддерживается Linux DSA (распределенная архитектура коммутатора). Насколько я понимаю, когда вы соединяете 2 порта Ethernet, которые оба подключены к этой микросхеме коммутатора, все кадры, которые направляются с одного порта на другой (а не на сам SoC)будет полностью обходить основную SoC и обрабатываться микросхемой коммутатора. Вот почему tcpdump не показывает трафик; он никогда не касается сетевой карты на SoC.

0
ответ дан 23 November 2019 в 23:15

Теги

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