OLSR Mesh
OLSR, Mesh-мережі та http://www.olsr.org/ (більше не доступний)
OLSR зазнав значних змін з моменту написання цієї статті. Зокрема, з'явилася версія “v2”, що є частиною офіційного стандарту IETF — описана в [https://tools.ietf.org/html/rfc7181], з оновленнями, опублікованими після 2014 року.
Mesh-мережі самостійно організовуються та автоматично налаштовуються відповідно до змін у топології мережі. Наприклад, правильно налаштована OLSR mesh автоматично адаптується в разі відмови вузла, появи нового маршруту або зміни доступності менш завантажених маршрутів. Концепція mesh-мереж не є новою — сам Інтернет є величезною mesh-мережею. Що нового? Mesh-мережі з бездротовими технологіями на OpenWrt — це справді круто! ;)
OLSR — один із протоколів маршрутизації, який можна використовувати для створення мобільних adhoc-мереж (MANET) або, загальніше, бездротових mesh-мереж. Код OLSR, розроблений Андреасом Тоннесеном (Andreas Tønnesen) — найкраще підходить для OpenWrt, оскільки для нього створено відповідні пакунки.
Ця сторінка wiki містить інформацію про те, як вручну створити mesh-мережу на основі OLSR, налаштовуючи OpenWrt та демон olsrd. Якщо ваша мета — якнайшвидше запустити OLSR-мережу, можливо, варто розглянути прошивки, спеціально створені для цього, наприклад проєкт Freifunk. Якщо ж ви налаштовані запускати OLSR на OpenWrt без сторонніх збірок — читайте далі!
| olsrd 0.6.1-3 | ||
|---|---|---|
| Назва | Розмір | Опис |
| olsrd | 108257 | демон маршрутизації OLSR (Optimized Link State Routing) |
| olsrd-mod-dyn-gw-plain | 2902 | Простий плагін динамічного шлюзу в Інтернет |
| olsrd-mod-bmf | 12106 | Плагін базової передачі multicast, залежить від kmod-tun |
| olsrd-mod-httpinfo | 23831 | Невеликий вбудований веб-сервер для перегляду інформації |
| olsrd-mod-quagga | 5848 | Плагін інтеграції з Quagga |
| olsrd-mod-dyn-gw | 4348 | Плагін динамічного інтернет-шлюзу |
| olsrd-mod-txtinfo | 6201 | Простий текстовий інформаційний плагін |
| olsrd-mod-nameservice | 11511 | Легкий DNS-резолвер плагін |
| olsrd-mod-dot-draw | 4233 | Плагін для візуалізації топології у форматі Dot |
| olsrd-mod-mdns | 5648 | Плагін Multicast DNS |
| olsrd-mod-watchdog | 2316 | Плагін Watchdog |
| olsrd-mod-arprefresh | 2703 | Плагін оновлення ARP-кешу ядра |
| olsrd-mod-p2pd | 8066 | Плагін Peer-to-Peer Discovery |
| olsrd-mod-secure | 9710 | Плагін підпису повідомлень для безпеки домену маршрутизації |
Мережа
Mesh-мережі можуть бути налаштовані безліччю способів. Нижче представлено простий приклад, який демонструє маршрутизацію між підмережами в діапазоні 10.0.0.0/255.0.0.0 через OLSR:
WAN WAN
| |
OpenWrt + OLSR Вузол 1 ---- бездротове з’єднання ---- OpenWrt + OLSR Вузол 2
| |
LAN LAN
| |
Робоча станція A Робоча станція B
Обидва вузли (у прикладі використовується WRT54GL) мають мати встановлений OLSR. Загалом, OLSR потрібно встановлювати на всіх вузлах, що беруть участь у маршрутизації між підмережами з підтримкою OLSR. OLSR потрібно налаштувати на прослуховування всіх Wi-Fi інтерфейсів на цих маршрутизаторах. Запуск на дротових інтерфейсах зазвичай не потрібен і, згідно з деякими джерелами, може конфліктувати з іншими службами, такими як DHCP.
Якщо дротові інтерфейси маршрутизатора належать до іншої підмережі, ніж бездротові, можна налаштувати OLSR для розповсюдження повідомлень HNA (host and network association) до інших маршрутизаторів. Залежно від того, чи ви використовуєте IPv4 або IPv6, у вашому файлі конфігурації /?/olsrd.conf мають бути директиви Hna4 або Hna6.
How to
- Розділіть бездротовий інтерфейс і інтерфейс LAN у файлі
/etc/config/network, оскільки за замовчуванням вони об’єднані в міст (bridge). - Налаштуйте бездротові інтерфейси (WNIC) для роботи в режимі adhoc. Ваш файл
/etc/config/wirelessможе виглядати так:
config wifi-device wl0
option type broadcom
option channel 11
# вимкніть радіо, щоб уникнути відкритої точки доступу після прошивки:
option disabled 0
config wifi-iface
option device wl0
# option network lan
option mode adhoc
option ssid OLSR
option hidden 0
option encryption none
- Встановіть olsrd:
opkg update opkg install olsrd
- Відредагуйте файл
/etc/olsrd.confі замініть “Interface” на назву бездротового інтерфейсу маршрутизатора. Приклад:
# olsr.org OLSR daemon config file
# /etc/olsrd.conf
#
# Приклад змінено для демонстрації роботи мережі OLSR
DebugLevel 0
IpVersion 4
ClearScreen yes
# На другому вузлі OLSR (olsrd.conf не надається, оскільки відрізняється лише одним рядком),
# який має LAN-інтерфейс у мережі 10.100.2.0/255.255.255.0, запис Hna4 виглядатиме так:
# 10.100.2.0 255.255.255.0 — ці записи повідомляють іншим вузлам як маршрутизувати трафік через mesh.
Hna4
{
# Моя домашня мережа
10.100.1.0 255.255.255.0
}
AllowNoInt yes
UseHysteresis yes
# Параметри гістерезису
HystScaling 0.50
HystThrHigh 0.80
HystThrLow 0.30
LinkQualityLevel 0
Pollrate 0.05
NicChgsPollInt 3.0
Interface "wl0"
{
AutoDetectChanges yes
}
# Запуск вбудованого HTTP-сервера для перегляду інформації про mesh.
# Працює лише за наявності встановленого плагіна olsrd_httpinfo
LoadPlugin "olsrd_httpinfo.so.0.1"
{
PlParam "port" "1979"
PlParam "Net" "0.0.0.0 0.0.0.0"
}
- Налаштуйте firewall для дозволу пересилання трафіку між інтерфейсами. Приклад скрипта:
#!/bin/sh # Авторські права (C) 2006 OpenWrt.org iptables -F input_rule iptables -F output_rule iptables -F forwarding_rule iptables -t nat -F prerouting_rule iptables -t nat -F postrouting_rule # Правила для трафіку, що спрямований на IP WAN-інтерфейсу iptables -F input_wan iptables -F forwarding_wan iptables -t nat -F prerouting_wan # Вказати інтерфейс Wi-Fi вручну (можна автоматизувати) WIFI=wl0 # Дозволити SSH-з’єднання iptables -A input_wan -p tcp --dport 22 -j ACCEPT # Дозволити підключення до інформаційного порту OLSR iptables -A input_wan -p tcp --dport 1979 -j ACCEPT # OLSR використовує порт 698 для передачі повідомлень про стан мережі iptables -A input_rule -p udp --dport 698 -j ACCEPT # Дозвіл на пересилання між інтерфейсами iptables -A forwarding_rule -i $WAN -o $WIFI -j ACCEPT iptables -A forwarding_rule -i $WIFI -o $WAN -j ACCEPT # Дозвіл для пересилання між LAN і WIFI iptables -A forwarding_rule -i $LAN -o $WIFI -j ACCEPT iptables -A forwarding_rule -i $WIFI -o $WIFI -j ACCEPT iptables -A forwarding_rule -i $LAN -o $LAN -j ACCEPT iptables -A forwarding_rule -i $WIFI -o $LAN -j ACCEPT
- Запустіть OLSR та увімкніть автозапуск:
/etc/init.d/olsrd start /etc/init.d/olsrd enable
Перезавантажте маршрутизатор і перевірте з’єднання, намагаючись “пропінгувати” інтерфейси інших пристроїв. Сядьте, розслабтеся та насолодіться напоєм за власним вибором на честь вдалого налаштування!
Після базового налаштування
Варто звернути увагу на деякі плагіни, які легко налаштовуються та показують базову інформацію про стан вашої mesh-мережі.
У моїй мережі я використовую olsrd-mod-httpinfo, який надає простий веб-сервер для перегляду статусу mesh.
Посилання
- Магістерська робота основного розробника olsrd — обов’язкова до прочитання перед встановленням OLSR, якщо ви не впевнені у розумінні принципів його роботи
- Посібник для Kamikaze від одного з розробників — чудове джерело з налаштування мережевих інтерфейсів і загалом системи OpenWrt