Ссылки:
https://ru.wikipedia.org/wiki/B.A.T.M.A.N. https://www.kernel.org/doc/html/v4.18/networking/batman-adv.html https://www.open-mesh.org/doc/batman-adv/Quick-start-guide.html https://www.open-mesh.org/projects/batman-adv/wiki/Understand-your-batman-adv-network https://www.open-mesh.org/projects/batmand/wiki/BATMAN_Daemon_HowTo https://www.open-mesh.org/projects/open-mesh https://www.open-mesh.org/projects/batman-adv/wiki https://www.open-mesh.org/projects/batman-adv/wiki/Wiki https://www.open-mesh.org/projects/batmand/wiki/DebugOutput https://openwrt.org/docs/guide-user/network/wifi/mesh/batman https://www.open-mesh.org/projects/batman-adv/wiki/Debian_batman-adv_AutoStartup https://www.open-mesh.org/projects/batmand/wiki/RoutingVodoo https://www.open-mesh.org/projects/batman-adv/wiki/Understand-your-batman-adv-network https://gist.github.com/IgorKha/78c95c35347ad7e7ff9d36b23a045490
Что?
B.A.T.M.A.N. — протокол маршрутизации, разрабатываемый в настоящее время сообществом Freifunk как замена OLSR. Основной особенностью B.A.T.M.A.N. является децентрализация сведений о лучшем маршруте в сети — ни один узел не владеет всеми данными. С использованием этой техники отпадает необходимость в распространении информации об изменениях в сети на все узлы. Каждый узел хранит информацию только о «направлении», из которого поступают данные, и так же их отправляет. Таким образом, узлы передают друг другу пакеты по динамически создаваемым маршрутам. Описание протокола У B.A.T.M.A.N. имеются элементы классических протоколов маршрутизации: он находит другие узлы B.A.T.M.A.N. и определяет наилучший путь до них. Он также информирует соседей о появлении в сети новых узлов. Каждый узел регулярно отправляет широковещательное сообщение, информируя таким образом соседей о своём существовании. Соседи передают это сообщение своим соседям и так далее. Таким образом, каждый узел в сети получает эту информацию. B.A.T.M.A.N. не пытается определить весь маршрут, а только первый шаг пакета в нужном направлении. Данные пересылаются соседу в этом направлении, который использует тот же механизм. Процесс повторяется, пока данные не достигнут цели. B.A.T.M.A.N. может использоваться не только в беспроводных, но и в кабельных сетях, таких как Ethernet. Для работы B.A.T.M.A.N. : 0. Загружаем модуль ядра batman-adv 1. Настраиваем сетевой порт bat0 2. рабочий порт UDP 4305 (batmand)
0. Включаем модуль ядра:
0. Показать модули ядра lsmod - для просмотра загруженных модулей на вашей системе lsmod | grep batman 1. Для загрузки модуля при следующей загрузки системы vim /etc/modules ---------------- batman-adv ---------------- 2. Для загрузки модуля "batman-adv" сейчас modprobe batman-adv
Опция в ядре linux:
CONFIG_BATMAN_ADV=m
1. Установка «batmand,batctl» на debian 11:
apt install batmand batctl
2. Настроим интерфейс bat0:
vim /etc/network/interfaces
---------------------------
auto lo
iface lo inet loopback
auto enp1s0
iface enp1s0 inet dhcp
post-up batctl if add enp1s0
auto enp7s0
iface enp7s0 inet static
address 10.0.1.25/24
post-up batctl if add enp7s0
auto bat0
iface bat0 inet static
address 192.168.100.3/24
---------------------------
3. Настройка batmand:
vim /etc/default/batmand ------------------------- DAEMON_OPTS="-d 0 eth1 eth2" ------------------------- systemctl enable batmand systemctl start batmand
Routing — магия batman
Команда «route» обеспечивает доступ к таблице маршрутизации 254. Чтобы просмотреть или изменить записи маршрутизации в других таблицах, вам нужна команда «ip». Чтобы увидеть содержимое таблицы hosts, используйте: ip route ls table 66 ip route ls table 65 ip rule list ip rule show ip rule show table 66
Troubleshooting
0. Остановка killall batmand - убить batmand pkill batmand - убить batmand systemctl stop batmand.service - убить batmand 1. batmand batmand -i - показать установленные компоненты batmand eth1 - пробуем запустить batmand -b -c -d 1 - проверка что происходит 2. batmand debug batmand -r -d 1 eth1 2. batctl batctl n - показать MAC интерфейса bat0 batctl traceroute MAC_ADDRESS - проверить доступность MAC_ADDRESS batctl if - показать на каких интерфейсах работает batmand-adv batctl o - показать всех Originator 3. Интерфейсы 10Gbit apt search librte-pmd-ixgbe apt install librte-pmd-ixgbe17.11
batctl подробнее:
batctl gwl (Таблица шлюза - Gateway table)
В таблице шлюзов перечислены все доступные шлюзы batman-adv в этой сети.
<символ выбора>
<шлюз>
<значение TQ (качество передачи) в сторону шлюза>
<следующий лучший переход>
<исходящее ифейс>
<объявленная пропускная способность>
batctl gw
( шлюз - назначение шлюза - проверка является этот хост шлюзом batman-adv)
batctl n
(neighbor table - соседний стол - ближайший сосед )
Список всех обнаруженных им соседей с одним переходом.
Решение о том, направляется ли сосед с одним переходом напрямую или через другого соседа с одним переходом, зависит от качества канала.
B.A.T.M.A.N. IV:
<интерфейс>
<соседний узел с одним переходом>
<последнее посещение>
B.A.T.M.A.N. V:
<сосед>
<последнее посещение>
<пропускная способность>
<интерфейс>
batctl o
(originator table - таблица авторов - сосед )
Каждый узел бэтмена ведет список всех других узлов в сети и запоминает,
в каком направлении отправлять пакеты, если данные должны быть переданы.
Направление проявляется в виде «лучшего следующего соседа», что по сути является следующим шагом к цели.
Вы можете получить внутреннюю таблицу оригинаторов batman, прочитав файл оригинаторов.
Печатная таблица начинается со строки заголовка с некоторыми более или менее полезными данными о состоянии,
за которыми следует исходная таблица.
Каждая строка содержит информацию о конкретном оригинаторе
B.A.T.M.A.N. IV:
<метка выбора следующего перехода>
<создатель>
<последнее посещение>
<Значение TQ (качество передачи) для отправителя>
<следующий лучший переход>
<исходящее ифейс>
B.A.T.M.A.N. V:
<метка выбора следующего перехода>
<создатель>
<последнее посещение>
<пропускная способность к отправителю>
<следующий лучший переход>
<исходящее ифейс>
В Batman 2014.1.0+ была введена концепция таблицы маршрутизации для каждого интерфейса.
В результате каждый интерфейс будет предоставлять свою таблицу маршрутизации:
batctl meshif ${meshif} o -i ${интерфейс}
batctl tl
(translation tables - таблицы перевода - таблица перехода - локальная таблицы трансляции)
<тег VLAN>
<флаги>
<последнее посещение>
RPNXW — это флаги, которые имеют следующие значения:
R/Roaming: этот клиент переместился на другой узел, но по соображениям согласованности он по-прежнему сохраняется до отправки следующего OGM.
P/noPurge: этот клиент представляет собой локальный программный интерфейс и никогда не будет удален.
N/New: этот клиент недавно был добавлен, но не объявляется в ячеистой сети до тех пор, пока не будет отправлено следующее OGM (по соображениям согласованности).
X/delete: этот клиент должен быть удален по какой-то причине, но он по-прежнему сохраняется из соображений согласованности до тех пор, пока не будет отправлено следующее OGM.
W/Wireless: этот клиент подключен к узлу через беспроводное устройство.
batctl tg
(translation tables global - глобальная таблица трансляции)
R/Roaming: этот клиент переместился на другой узел, но по соображениям согласованности он по-прежнему сохраняется до отправки следующего OGM.
X/delete: этот клиент должен быть удален по какой-то причине, но он по-прежнему сохраняется из соображений согласованности до тех пор, пока не будет отправлено следующее OGM.
W/Wireless: этот клиент подключен к узлу через беспроводное устройство.
batctl cl
(Bridge loop avoidance claim table - Таблица претензий по предотвращению образования петель)
<идентификатор виртуальной локальной сети>
<оригинатор, претендующий на этого клиента>
<клиент заявлен мной>
<контрольная сумма CRC всей таблицы заявок>
Клиенты, заявленные самим узлом, отмечены знаком «[x]».
Если VLAN не найдено, печатается VID '-1'.
batctl bbt
(Bridge loop avoidance backbone table - Магистральная таблица предотвращения образования петель моста )
Эта таблица является частью кода предотвращения петель моста и содержит все магистральные шлюзы
В нашей схеме у нас нет шлюзов внутри сети batman-adv, поэтому таблица будет пуста.
batctl dc
(Distributed ARP Table - local cache table - Распределенная таблица ARP — таблица локального кэша)
Эта таблица является частью кода распределенной таблицы ARP и содержит все локально кэшированные записи ARP (IPv4+MAC-адрес).
Если данный IP-адрес появляется в этой таблице, это означает, что batman-adv предотвратит любой запрос ARP,
запрашивающий отправку такого адреса через сетку, и немедленно предоставит ответ в локальную сеть самостоятельно.
Подмножество записей, принадлежащих этому кешу, также являются записями, которые узел отвечает за обработку в DHT .
<мак адрес хоста>
<идентификатор виртуальной локальной сети>
<последняя активность ARP>
batman-adv + batctl 2023.3 debian x86_64
cat > install_batman.sh << "EOF" #!/bin/bash cd /opt/ # Install dependencies needed for src compile apt install -y git libnl-3-dev libnl-genl-3-dev libnl-genl-3-dev make pkg-config gcc #linux-headers-amd64-??? # batman-adv git clone https://github.com/open-mesh-mirror/batman-adv.git cd batman-adv git checkout v2023.3 # Enabled debugging/network coding/tracing support sed -i '/export/s/=n/=y/' Makefile make -j4 # Remove old batman-adv module rmmod batman_adv # Install new batman-adv module make install # Add in autoload batman-adv module echo "batman-adv" | tee -a /etc/modules cd /opt/ # batctl git clone https://github.com/open-mesh-mirror/batctl.git && cd batctl/ git checkout v2023.3 make -j`nproc` # Install new batctl make install echo "================================" echo "ATTENTION! reboot needed!" echo "================================" EOF chmod +x install_batman.sh
batman-adv + batctl 2022.1 rpi arm
#!/bin/bash cd /opt/ # Install dependencies needed for src compile apt install -y raspberrypi-kernel-headers git libnl-3-dev libnl-genl-3-dev make # batman-adv git clone https://github.com/open-mesh-mirror/batman-adv.git cd batman-adv git checkout v2022.1 # Enabled debugging/network coding/tracing support sed -i '/export/s/=n/=y/' Makefile make -j4 # Remove old batman-adv module rmmod batman_adv # Install new batman-adv module make install # Add in autoload batman-adv module echo "batman-adv" | tee -a /etc/modules cd /opt/ # batctl git clone https://github.com/open-mesh-mirror/batctl.git && cd batctl/ git checkout v2022.1 make -j4 # Install new batctl make install echo "================================" echo "ATTENTION! reboot needed!" echo "================================"
interfaces
### apt install tcpdump tmux iperf3 htop bridge-utils openvswitch-switch vim
auto lo
iface lo inet loopback
# The primary network interface
auto enp2s0
iface enp2s0 inet dhcp
auto eno1
iface eno1 inet manual
pre-up batctl ra BATMAN_V
post-up batctl if add eno1
auto eno2
iface eno2 inet manual
post-up batctl if add eno2
auto br0
iface br0 inet static
address 10.0.0.2/24
bridge_ports bat0
bridge_stp off
bridge_fd 0
bridge_maxwait 0
Конфиг /etc/bat-hosts
При создании файла /etc/bat-hosts в выводе многих команд batctl MAC-адреса будут заменены символическими именами. Эти имена не обязательно должны совпадать с именем хоста или соответствовать DNS. Используемый MAC-адрес — это адрес «необработанных» интерфейсов, используемых bat0 — в этом примере конфигурации это адреса mesh0 на каждом из узлов. (Ну то есть MAC интерфейса который добавили командой "batctl if add name_interface" ) cat > /etc/bat-hosts << "EOF" 32:b5:c2:aa:aa:aa office.5g c6:6e:1f:bb:bb:bb garage.5g 32:b5:c2:cc:cc:cc front.5g 1a:d6:c7:dd:dd:dd back.5g c6:e9:84:ee:ee:ee devel.5g 0c:d0:51:0e:00:01 n1-e1 0c:d0:51:0e:00:02 n1-e2 0c:a4:32:06:00:01 n2-e1 0c:a4:32:06:00:02 n2-e2 0c:44:b9:13:00:01 n3-e1 0c:44:b9:13:00:02 n3-e2 0c:e2:fb:ea:00:02 n4-e1 0c:e2:fb:ea:00:01 n4-e2 EOF