OLSR Mesh
Сети с ячеистой топологией (mesh-сети) обладают самоорганизацией и автонастройкой на основе сведений об изменении топологии сети.
Для примера, правильно настроенная OLSR сеть автоматически конфигурируется в случаях когда одна нода повреждается или появляется новый маршрут, или в случае появления или пропажи более быстрого маршрута.
Эта концепцияя mesh сетей не нова - Интернет сам представляет из себя огромную mesh сеть. Что-же нового? Ну, Wi-Fi mesh сети построенные на OpenWRT - это просто круто ;)
OLSR - это один из нескольких протоколов маршрутизации, предназначенный для создания Mobile Adhoc Networks (MANET), или, проще говоря, беспроводные децентрализованные самоорганизующиеся сети. OLSR код разработанный Andreas Tønnesen это лучшее решение для нашей сборки созданной для OpenWRT.
Эта страница содержит информацию, о том как создать mesh-сеть путём настройки OpenWrt и olsrd (процесс демона OLSR). Если ваша цель - быстро запустить OLSR-сеть, возможно вам захочется взглянуть на прошивку которая была создана специально для этих целей. Примером такой прошивки являетсяFreifunk project. Если вы хотите запустить OLSR в OpenWrt без помощи готовых прошивок, продолжайте чтение :)
olsrd 0.6.1-3 | ||
---|---|---|
Name | Size | Description |
olsrd | 108257 | OLSR (Optimized Link State Routing) daemon |
olsrd-mod-dyn-gw-plain | 2902 | Dynamic internet gateway plain plugin |
olsrd-mod-bmf | 12106 | Basic multicast forwarding plugin, dependece: kmod-tun |
olsrd-mod-httpinfo | 23831 | Small informative web server plugin |
olsrd-mod-quagga | 5848 | Quagga plugin |
olsrd-mod-dyn-gw | 4348 | Dynamic internet gateway plugin |
olsrd-mod-txtinfo | 6201 | Small informative web server plugin |
olsrd-mod-nameservice | 11511 | Lightweight hostname resolver plugin |
olsrd-mod-dot-draw | 4233 | Dot topology information plugin |
olsrd-mod-mdns | 5648 | Multicast DNS plugin |
olsrd-mod-watchdog | 2316 | Watchdog plugin |
olsrd-mod-arprefresh | 2703 | Kernel ARP cache refresh plugin |
olsrd-mod-p2pd | 8066 | Peer to Peer Discovery plugin |
olsrd-mod-secure | 9710 | Message signing plugin to secure routing domain |
Сеть
Есть бесчисленное количество вариантов конфигурации mesh сетей; ниже находится простой пример разрешающий роутинг подсетей 10.0.0.0/255.0.0.0 через OLSR mesh.
WAN WAN | | OpenWrt + OLSR Node 1 ---- wireless link ---- OpenWrt + OLSR Node 2 | | LAN LAN | | Workstation A Workstation B
На всех узлах (в нашем случае используется WRT54GL) должен быть установлен OLSR. В общем, OLSR должен быть установлен на любом узле который учавствует в создании маршрутизации между заданными OLSR подсетями.
OLSR узлы должны быть сконфигурированы на прослушивание всех WiFi интерфейсах на роутере. Включение на проводных интерфейсах не обязательно, в некоторых случаях это может помешать работе других служб, например DHCP.
Если проводные интерфейсы на роутере имеют подесть отличающуюся от WiFi то можно настроить OLSR для передачи host и network association (HNA) сообщений другим роутерам. В зависимости от использования IPv4 или IPv6 вы можете настроить опции Hna4 или Hna6 в файле /?/olsrd.conf
HOW TO
- Разделите WiFi и LAN интерфейсы в файле
/etc/config/network
, по умолчанию они соеденены в мост. - Настройте WNICs для работы в режиме adhoc. Файл
/etc/config/wireless
должен выглядеть так:config wifi-device wl0 option type broadcom option channel 11 # disable radio to prevent an open ap after reflashing: 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 “XXX” на WiFi интерфейс вашего роутера. Пример# olsr.org OLSR daemon config file # /etc/olsrd.conf # # Modified for sample OLSR network by Justin S. Leiteb # http://justin.phq.org/ Fri Jun 8 10:34:27 EDT 2007 # Many comments and commented line from conf file distributed # with olsrd omitted for brevity in wiki. DebugLevel 0 IpVersion 4 ClearScreen yes # On the second OLSR node (olsrd.conf not supplied for this node, since only one line is different), # which has a LAN interface on the 10.100.2.0/255.255.255.0 network, the Hna4 entry is: # 10.100.2.0 255.255.255.0. These Hna4 entries are what propagates information about how to route # to these subnets through the mesh. Hna4 { # My home LAN 10.100.1.0 255.255.255.0 } AllowNoInt yes UseHysteresis yes # Hysteresis parameters HystScaling 0.50 HystThrHigh 0.80 HystThrLow 0.30 LinkQualityLevel 0 Pollrate 0.05 NicChgsPollInt 3.0 Interface "wl0" { AutoDetectChanges yes } # Run http server with mesh information. Won't work unless you've already installed # the olsrd_httpinfo plugin through ipkg. LoadPlugin "olsrd_httpinfo.so.0.1" { PlParam "port" "1979" PlParam "Net" "0.0.0.0 0.0.0.0" }
- Файрвол - разрешите роутеру форвардинг пакетов между интерфейсами:
#!/bin/sh # Copyright (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 # The following chains are for traffic directed at the IP of the # WAN interface iptables -F input_wan iptables -F forwarding_wan iptables -t nat -F prerouting_wan # Does anyone have a command to get the name of the WIFI interface on Kamikaze so # that it doesn't have to be hard-coded here? This is a bit sloppy it seems. WIFI=wl0 iptables -A input_wan -p tcp --dport 22 -j ACCEPT # Allow connections to olsr info port. iptables -A input_wan -p tcp --dport 1979 -j ACCEPT # OLSR needs port 698 to transmit state messages. iptables -A input_rule -p udp --dport 698 -j ACCEPT # Debugging... do we have WIFI, LAN and WAN appropriately defined? # These values are passed to us from /etc/init.d/firewall, which # calls this script. # echo WIFI == $WIFI # echo LAN == $LAN # echo WAN == $WAN iptables -A forwarding_rule -i $WAN -o $WIFI -j ACCEPT iptables -A forwarding_rule -i $WIFI -o $WAN -j ACCEPT # For forwarding LAN & WIFI in nodes iptables -A forwarding_rule -i $LAN -o $WIFI -j ACCEPT # For WIFI clients to connect to nodes. iptables -A forwarding_rule -i $WIFI -o $WIFI -j ACCEPT # For connecting a wired lan client of node 1 to wired lan client of node 2 iptables -A forwarding_rule -i $LAN -o $LAN -j ACCEPT # WIFI needs to go to LAN ports, too! iptables -A forwarding_rule -i $WIFI -o $LAN -j ACCEPT
- Запустите olsrd
/etc/init.d/olsrd start /etc/init.d/olsrd enable
Перезагрузите роутер пропингуйте интерфейсы на разных устройствах. Выпейте любимый напиток для ощущения праздника!
После начальной конфигурации
Вы можете попробовать некоторые плагины которые легко настраиваются и могут показать простые статус вашей сети. В своей сети я запустил olsrd-mod-httpinfo
который запускает простой http сервер показывающий статус mesh сети.
Ссылки
- Master's thesis of primary developer of olsrd - Cледует читать перед установкой OLSR если вы не до конца понимаете фундаментальные осного его работы.
- Manual for Kamikaze by one of the developers - Отличный справочник по настройке сетевых интерфейсов и других частей OpenWrt.