Рубрики
openwrt

openwrt \ libremesh \ batman\ batmand \ batman-adv

Ссылки

https://openwrt.org/docs/guide-user/network/wifi/mesh/batman
https://openwrt.org/docs/guide-user/installation/openwrt_x86
https://openwrt.org/docs/guide-user/base-system/basic-networking
https://openwrt.org/docs/guide-developer/toolchain/use-buildsystem
https://openwrt.org/ru/doc/howto/build#%D1%83%D1%81%D0%BB%D0%BE%D0%B2%D0%B8%D1%8F
https://downloads.openwrt.org/

https://chef.libremesh.org/
http://downloads.libremesh.org/
https://libremesh.org/
https://libremesh.org/development.html

https://github.com/binnes/WiFiMeshRaspberryPi/blob/master/part1/ROUTE.md

https://librecmc.org/
Home
Libre design
https://github.com/open-mesh-mirror/batctl https://trex-tgn.cisco.com/ https://www.open-mesh.org/doc/batman-adv/Tweaking.html https://openwrt.su/sborka/maskirovka-svoej-sborki-openwrt-pod-ofitsialnyj-repozitarij https://4pda.to/forum/index.php?showtopic=911457&st=1180#entry83632397 https://openwrt.org/docs/guide-user/network/wifi/mesh/batman

openwrt сборка

0. Устанавливаем пакеты для сборки:
apt install build-essential git gcc make bc fakeroot dpkg-dev libncurses5-dev libssl-dev

1. Скачиваем openwrt
git clone https://git.openwrt.org/openwrt/openwrt.git
cd openwrt
git pull
 
2. Выбираем бранч 
git branch -a
git tag
git checkout v21.02.2
 
3. Обновляем бранч
./scripts/feeds update -a
./scripts/feeds install -a
 
4 Приступаем к сборке 
!!! make defconfig будет произведено основное конфигурирование системы сборки, включая проверку зависимостей и условий для окружения сборки и т.п.
!!! будет проводится проверка для зависимостей. Установите отсутствующие компоненты и запустите снова.
!!! выберите вашу платформу перед использованием defconfig
настраиваем платформу (Target System, Subtarget, Target Profile) и сохраняем конфигурацию в файл .config:
make menuconfig 

5. применяем стандартные параметры для профиля:
make defconfig

6. модифицируем набор пакетов и сохраняем конфигурацию (в файл .config):
make menuconfig

7. Сохраняем свои изменения конфигурации в файл mydiffconfig на будущее:
scripts/diffconfig.sh >mydiffconfig 

8. Выполняем make либо make V=w либо make V=s:
# make -j $(nproc) defconfig download clean world
# make -j $(nproc) kernel_menuconfig
# make -j $(nproc)
make -j4 V=s

Установка на VM x86-x64

0. К виртуальной машине подключаем два диска, второй диск будем использовать как хранилище, туда мы загрузим прошивку.
Для того что бы не запутается в дисках, создаем диски разного размера 10Гб и 20Гб
1. Загружаемся с LiveCD (например https://www.system-rescue.org/)
2. монтируем второй диск и загружаем на него прошивку (https://downloads.openwrt.org/)
https://downloads.openwrt.org/releases/21.02.2/targets/x86/64/openwrt-21.02.2-x86-64-generic-ext4-combined-efi.img.gz

3. Переходим в каталог куда мы загрузили прошивку и распаковываем 
gunzip openwrt-*.img.gz
 
4. Определяем диск куда будем заливать прошивку
lsblk
fdisk -l 
 
5. Заливаем прошивку
dd if=openwrt-21.02.0-x86-64-generic-ext4-combined.img bs=1M of=/dev/sdX


openwrt

opkg update
opkg install mc
opkg install luci
opkg install luci-i18n-base-ru
opkg install tcpdump
opkg install pciutils
opkg install lsblk
opkg install speedtest-netperf
opkg install netperf
opkg install ip-full

batman bmx7:

opkg install bmx7 bmx7-uci-config
opkg install kmod-batman-adv
opkg install batctl

uci изменить имя хоста:

uci set system.@system[0].hostname=newhostname
uci commit system
echo newhostname > /proc/sys/kernel/hostname

uci настройки сети:

uci show network - показать настройки сети 
uci show wireless - показать настройки wifi

uci set network.lan.ipaddr='10.0.0.2' - задать ip адрес "10.0.0.2" для интерфейса lan
uci set network.lan.netmask='255.255.255.0' - задать маску "255.255.255.0"  для интерфейса lan
uci commit network 
service network restart

uci пример сетевых параметров:

network.loopback=interface
network.loopback.ifname='lo'
network.loopback.proto='static'
network.loopback.ipaddr='127.0.0.1'
network.loopback.netmask='255.0.0.0'
network.globals=globals
network.globals.ula_prefix='fd27:70fa:5c1d::/48'
network.lan=interface
network.lan.type='bridge'
network.lan.ifname='eth0.1'
network.lan.proto='static'
network.lan.netmask='255.255.255.0'
network.lan.ip6assign='60'
network.lan.ipaddr='192.168.1.1'
network.wan=interface
network.wan.ifname='eth0.2'
network.wan.proto='dhcp'
network.wan6=interface
network.wan6.ifname='eth0.2'
network.wan6.proto='dhcpv6'
network.@switch[0]=switch
network.@switch[0].name='switch0'
network.@switch[0].reset='1'
network.@switch[0].enable_vlan='1'
network.@switch_vlan[0]=switch_vlan
network.@switch_vlan[0].device='switch0'
network.@switch_vlan[0].vlan='1'
network.@switch_vlan[0].ports='1 2 3 4 5t'
network.@switch_vlan[1]=switch_vlan
network.@switch_vlan[1].device='switch0'
network.@switch_vlan[1].vlan='2'
network.@switch_vlan[1].ports='0 5t'

Русификация:

В поиске набираем base-ru
opkg install luci-i18n-base-ru
opkg install luci-i18n-firewall-ru

batctl

Показать добавленные интерфейсы в bat0:
batctl if 

Создать bat0 и добавить интерфейс enp1s0  в bat0:
batctl if add enp1s0

Показать MAC интерфейса bat0:
batctl n
batctl originators

Проверить доступность MAC_ADDRESS:
batctl traceroute MAC_ADDRESS

batmand

batmand -b -c -d 1 - подключится к запущенному bat0  и показать информацию  

Убить batmand:
killall batmand
pkill batmand
systemctl stop batmand.service

Тестирование работы:
batmand -b -c -d 1

-b запуск соединения в пакетном режиме
По умолчанию отладочная информация обновляется через определенный промежуток времени, поэтому, если вы используете "-b", она будет выполняться один раз, а затем остановится.

В данном случае это означает однократный запуск debug level 1.

Обратите внимание, что-b можно использовать только с-c и уровнями отладки 1 и 2.

Примеры запуска batmand:
batmand -o 500 -r 3 -d 3 -p 192.168.1.1 eth1

-o интервал инициатора в мс
Узел передает широковещательные сообщения (мы называем их originator message или OGM), чтобы сообщить соседним узлам о своем существовании. 
Интервал инициатора-это время ожидания после отправки одного сообщения и перед отправкой следующего. Значение по умолчанию-1000 мс (1 секунда).
В мобильной сети может потребоваться очень быстрое обнаружение сетевых изменений, поэтому вам нужно отправлять сообщения очень часто, например, использовать значение 500 мс. 
В статической сети вы можете сэкономить пропускную способность, используя более высокое значение. Эта опция доступна только в режиме демона.


-r класс маршрутизации
Класс маршрутизации может быть установлен в четыре значения - он включает "модус поиска в Интернете". 
Демон выберет интернет-шлюз на основе определенных критериев (если не указано "- p").:

0 - установить no default route (по умолчанию)
1 - используйте быстрое соединение
2 - используйте стабильное соединение
3 - используйте быстрое коммутационное соединение
XX - используйте соединение с поздним переключением

Уровень 1
B. A. T. M. A. N пытается найти наилучшее доступное соединение, наблюдая за пропускной способностью восходящих линий и качеством связи.

Уровень 2
B. A. T. M. A. N сравнивает качество связи интернет-узла и выбирает тот, который имеет лучшее соединение.

Уровень 3
B. A. T. M. A. N сравнивает качество связи интернет-узла и выбирает тот, у которого лучшее соединение, но переключается на другой шлюз, как только найдено лучшее соединение.

Уровень XX
B. A. T. M. A. N сравнивает качество связи интернет-узла и выбирает узел с лучшим качеством связи, но переключается на другой шлюз, как только этот шлюз имеет значение TQ,
которое на xx лучше, чем выбранный в данный момент шлюз.
XX это число от 3 до 256

-d уровень отладки
Уровень отладки может быть установлен в пять значений.
0 - отладка выключена (по умолчанию)
1 - список соседей
2 - список шлюзов
3 - наблюдайте за батмандом
4 - наблюдайте за батмандом (очень многословным).
5 - отладка памяти / использование процессора
-p предпочтительный шлюз
Установите интернет-шлюз самостоятельно.
Если предпочтительный шлюз не найден, выбор шлюза будет использовать текущий класс маршрутизации для выбора шлюза.

-g класс шлюза
Класс шлюза используется для указания другим узлам сети доступной пропускной способности Интернета. 
Просто введите любое число (необязательно с последующим "kbit" или "mbit"), и демон угадает ваш соответствующий класс шлюза. Используйте"/", чтобы разделить скорость спуска и загрузки. 
Вы можете опустить скорость загрузки, и batmand возьмет на себя загрузку.
5000
5000кбит
5мбит
5 мбит/1024
5mbit/1024kbit
5 мбит/1 мбит

-s сервер визуализации
Поскольку база данных топологии не вычисляется протоколом, было реализовано дополнительное решение для создания графов топологии, демоны vis server. 
B. A. T. M. A. N. могут отправлять свое локальное представление о своих односкачковых соседях на сервер vis. 
Он собирает информацию и предоставляет данные в формате, аналогичном выходу топологической информации OLSR. 
Поэтому существующие решения для построения топологических графиков, разработанные для OLSR, могут быть использованы для визуализации сетчатых облаков с использованием B. A. T. M. A. N.

--policy-routing-scriptотключает функцию маршрутизации политики batmand - все изменения маршрутизации отправляются сценарию
Этот параметр отключает функцию маршрутизации политики batmand - все изменения маршрутизации отправляются сценарию, который может использовать эту информацию или нет. 
Разработчики микропрограммного обеспечения и пакетов могут использовать эту опцию для тесной интеграции batmand в свои собственные политики маршрутизации. 
Эта опция доступна только в режиме демона.

Kernel enable

CONFIG_IP_ADVANCED_ROUTER
CONFIG_IP_MULTIPLE_TABLES

debian /etc/network/interfaces

# The loopback network interface 
auto lo 
iface lo inet loopback

# The primary network interface 
auto enp5s0 
iface enp5s0 inet dhcp

auto enp1s0 
iface enp1s0 inet static 
   address 10.50.50.50/24  
   post-up batctl if add enp1s0 
   post-up batctl if add enp5s0

auto bat0 
iface bat0 inet static  
  address 172.25.0.3/24

openwrt /etc/config/batmand

config batmand general 
       option interface 'eth1 eth4' 
       option routing_class '3'

openwrt /etc/config/network


config interface 'loopback'
        option device 'lo'
        option proto 'static'
        option ipaddr '127.0.0.1'
        option netmask '255.0.0.0'

config globals 'globals'
        option ula_prefix 'fd8a:d1c1:22a8::/48'

config device
        option name 'br-lan'
        option type 'bridge'
        list ports 'eth0'

config interface 'lan'
        option device 'br-lan'
        option proto 'static'
        option ipaddr '192.168.1.1'
        option netmask '255.255.255.0'
        option ip6assign '60'

config interface 'eth5'
        option device 'eth5'
        option proto 'static'
        option ipaddr '192.168.200.1'
        option netmask '255.255.255.0'

config interface 'eth4'
        option device 'eth4'
        option proto 'static'
        option ipaddr '10.150.150.20'
        option netmask '255.255.255.0'

config interface 'wan'
        option device 'eth1'
        option proto 'dhcp'

config interface 'wan6'
        option device 'eth1'
        option proto 'dhcpv6'

config interface 'eth6'
        option proto 'static'
        option netmask '255.255.255.0'
        option ipaddr '10.0.7.1'
        option device 'eth6'

config interface 'bat0'
        option proto 'batadv'
        option routing_algo 'BATMAN_IV'
        option aggregated_ogms '1'
        option ap_isolation '0'
        option bonding '0'
        option fragmentation '1'
        option gw_mode 'off'
        #option gw_mode 'server'
        #option gw_mode 'client'
        #gw_bandwidth '10000/2000' # speed server
        #gw_sel_class '5000' # speed client
        option log_level '0'
        option orig_interval '1000'
        option bridge_loop_avoidance '1'
        option distributed_arp_table '1'
        option multicast_mode '1'
        option multicast_fanout '16'
        option network_coding '0'
        option hop_penalty '30'
        option isolation_mark '0x00000000/0x00000000'

config interface 'bat0_hardif_mesh0'
        option proto 'batadv_hardif'
        option master 'bat0'
        option mtu '1536'

config interface 'bat0_hardif_eth0'
        option proto 'batadv_hardif'
        option master 'bat0'
        option mtu '1536'
        option hop_penalty '15'
        option throughput_override '100mbit' # TQ / penalty / fix 5 hop
        option device 'eth0'

config interface 'bat0_hardif_eth1'
        option proto 'batadv_hardif'
        option master 'bat0'
        option mtu '1536'
        option hop_penalty '15'
        option throughput_override '100mbit'
        option device 'eth1'

config interface 'bat0_hardif_eth2'
        option proto 'batadv_hardif'
        option master 'bat0'        
        option mtu '1536'           
        option hop_penalty '15'
        option throughput_override '100mbit'
        option device 'eth2'

config interface 'bat0_hardif_eth3'
        option proto 'batadv_hardif'
        option master 'bat0'        
        option mtu '1536'           
        option hop_penalty '15'
        option throughput_override '100mbit'
        option device 'eth3'

config interface 'bat0_hardif_eth4'
        option proto 'batadv_hardif'
        option master 'bat0'        
        option mtu '1536'           
        option hop_penalty '15'
        option throughput_override '100mbit'
        option device 'eth4'

config interface 'bat0_hardif_eth5'
        option proto 'batadv_hardif'
        option master 'bat0'        
        option mtu '1536'           
        option hop_penalty '15'
        option throughput_override '100mbit'
        option device 'eth5'


config interface 'bat0_hardif_eth6'
        option proto 'batadv_hardif'
        option master 'bat0'        
        option mtu '1536'           
        option hop_penalty '15'
        option throughput_override '100mbit'
        option device 'eth6'

config interface 'bat0_hardif_eth7'
        option proto 'batadv_hardif'
        option master 'bat0'        
        option mtu '1536'           
        option hop_penalty '15'
        option throughput_override '100mbit'
        option device 'eth7'

systemd \ systemctl enable batmand \ error

Добавить в файл строки"/lib/systemd/system/batmand.service":
-----------------------------------------------------------
[Install] 
WantedBy=multi-user.target
-----------------------------------------------------------

Пример /lib/systemd/system/batmand.service:
------------------------------------------

[Unit] 
Description=Layer3 multi-hop ad-hoc mesh daemon 
After=network.target 

[Service] 
EnvironmentFile=/etc/default/batmand 
ExecStart=/usr/sbin/batmand --no-detach $DAEMON_OPTS 

[Install] 
WantedBy=multi-user.target
-----------------------------------------

Запускаем:
systemd enable batmand 
systemct start batmand

openwrt upgrade all package:

opkg update
opkg list-upgradable | cut -f 1 -d ' ' | xargs opkg upgrade

batctl traceroute script:

for i in ` arp | awk '{print $4}' | grep -v type | tr '\n' ' '` ; do batctl tr  $i ; done

openwrt upgrade

cd /tmp
wget https://downloads.openwrt.org/releases/22.03.0-rc1/targets/x86/64/openwrt-22.03.0-rc1-x86-64-generic-ext4-combined.img.gz
sysupgrade openwrt-22.03.0-rc1-x86-64-generic-ext4-combined.img.gz