Настройка Batman-adv для экспериментов с MESH-сетью

Материал из Викиадмин
Перейти к навигации Перейти к поиску

Что такое MESH и зачем это нам сейчас нужно

Всё очень просто: MESH - децентрализованная сеть, где каждый элемент - равноправный участник. Военные изначально увлеклись этой идеей, чтобы невозможно было одной убитой точкой оставить часть личного состава без связи. Каждая точка может через себя пропускать трафик, и клиент и роутер в одном лице, если совсем просто.

Например, у нас есть трое пользователей с редкими в настоящее время именами: Вася, Петя и Федя. У них роутеры с Wi-Fi на борту и поддержкой batman-adv. Ок, они поднимают MESH-сеть и теперь могут видеть друг друга. И, несмотря на то, что Весилий и Фёдор не могут соединится напрямую ввиду большого расстояния, трафик прекрасно ходит через Петра. При этом они видят друг друга на 2 уровне (то есть видят MAC-адреса, если проще), а не используют Петра как строго прописанный бридж. Теперь представим, что где-то недалеко от Петра появляется 4 участник сети: Акакий. Ну повезло с именем, что уж тут. Он становится таким же участником сети со своим роутером и, когда Петя в очередной раз что-то натворил и остался без связи, Акакий стал транзитом для Василия и Фёдора. Играя в очередную стрелялку типа Urban Terror, я думаю, они даже не заметили потери Петра. Таким образом получается, что чем больше участников, тем лучше становится сама сеть. Нет, до хорошей оптики тут как пешком до Сатурна, но на безрыбье…

В моём случае это помогает, когда есть несколько компьютеров в разных сетях и надо видеть их, а VPN поднять не всегда возможно. Например, сервера находятся внутри компании без выхода в интернет, но есть компьютеры, которые видят и VPN и сеть внутри. Через них и будет идти доступ для клиентов VPN к серверам для других участников. А так же доступы к северам в mesh-сети получат и компьютеры, которые сидят за роутерами-участниками VPN сети.

Установка на Debian, Ubuntu, Linux Mint и так далее.

В этом плане всё просто, так как пакеты есть уже в хранилище.

   apt install batmand
   modprobe batman-adv

Установка на CentOS.

Несмотря на серверное предназначение этой ОС, batman-adv в хранилищах нет. Неприятно, но не смертельно. Ставим “управляшку”

   yum install batctl

Смотрим версию (в нашем примере 2016.0)

   batctl -v

Скачиваем исходники ядра

   yum install kernel-devel

Скачиваем исходники модуля

   wget -c https://downloads.open-mesh.org/batman/stable/sources/batman-adv/batman-adv-2016.0.tar.gz

Разархивируем

   tar zxvf batman-adv-2016.0.tar.gz

Заходим

   cd batman-adv-2016.0

Собираем

   make
   make install

Подгружаем модуль

   modprobe batman-adv


Настройка

Смотрим какие есть интерфейсы и какие хотим добавить

   ip a

И добавляем их

   batctl if add eth0
   batctl if add wlan0

Поднимаем интерфейс

   ifconfig bat0 up

По идее, уже сейчас пишем batctl o и видем другие компьютеры. Но уж доведём до конца. Назначаем адрес:

   ifconfig bat0 192.168.1.1 netmask 255.255.255.0

И пингуем такого же бедолагу, но с адресом 192.168.1.2

Полезные команды

На самом деле, просто batctl -h выдаст массу полезного. Приведу пару примеров:

batctl o - соседи
batctl td bat0 - tcpdump, смотрим траффик

Поднимаем ad-hoc с помощью Network Manager (nmcli)

Network Manager достаточно плотно засел на поппулярных дистрибутивах линукс и править конфиг вручную становится иногда уже бесполезно. Но и не везде есть графика, чтобы запускать приложение для конфигурации сети. И в этом случае используем nmcli.

Итак, создаём соединение My WiFi на борту ноута или другой машинки, которая станет участником сети.

   nmcli connection add type wifi ifname wlan0 ssid ‘My WiFi’

Далее заходим в shell nmcli и редактируем

   nmcli con edit wifi-wlan0

смотрим параметры

   nmcli> print

выставляем ipv4 в shared

   nmcli> set ipv4.method shared

а ipv6 игнорируем вообще (для тех, кто до ipv6 ещё не дорос)

   nmcli> set ipv6.method ignore

автоматически поднимаем эту сеть

   nmcli> set connection.autoconnect no

ставим режим ad-hoc (со всеми его ограничениями по скорости и т.д.)

   nmcli> set 802-11-wireless.mode adhoc

сохраняем

   nmcli> save

выходим из shell nmcli

   nmcli> quit

поднимаем интерфейс

   nmcli con up wifi-wlan0

Далее уже, как только batman увидит соседей (batctl o), вы становитесь полноправным участником сети, о которой речь шла в начале страницы.