Table of Contents

OLSR Mesh

OLSR и http://www.olsr.org/

Сети с ячеистой топологией (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

Outdated Information!
This article contains information that is outdated or no longer valid. You can edit this page to update it.

HOW TO

  1. Разделите WiFi и LAN интерфейсы в файле /etc/config/network, по умолчанию они соеденены в мост.
  2. Настройте 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
  3. Установите olsrd
      opkg update
      opkg install olsrd
  4. Измените /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"
    }
  5. Файрвол - разрешите роутеру форвардинг пакетов между интерфейсами:
    #!/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
  6. Запустите olsrd
    /etc/init.d/olsrd start
    /etc/init.d/olsrd enable

Перезагрузите роутер пропингуйте интерфейсы на разных устройствах. Выпейте любимый напиток для ощущения праздника!

После начальной конфигурации

Вы можете попробовать некоторые плагины которые легко настраиваются и могут показать простые статус вашей сети. В своей сети я запустил olsrd-mod-httpinfo который запускает простой http сервер показывающий статус mesh сети.

Ссылки