Tanken med Broadband Hamnet (BBHN)är att bygga upp ett autonomt trådlöst IP nätverk, men det är tyvärr inte alltid praktiskt möjligt. Man får helt enkelt ett flertal isolerade “öar” med täckning. Man kan då använda sig av diverse varianter av något som kallas IP tunnel protokoll. Dessa skapar helt enkelt fasta kanaler genom internet mellan två punkter. För det Svenska Broadband Hamnet används en metod som populärt kallas “GRE Tunneling” (Läs mer här). Med hjälp av detta protokoll och bredbands anslutningar på två noder kan vi koppla ihop två BBHN öar.


Förberedelser
Denna beskrivning förutsätter att det finns två BBHN noder konfigurerade och uppstartade, anslutna till bredband och att du kan nå noderna med en SSH konsol. Nedanstående är uppsatt på noder som kör mjukvaruversion 0.4.3.
I linux finns ett antal olika system för att distribuera mjukvarupaket och hålla dem uppdaterade. I den Linux distributionen som BBHN bygger på används ipkg package manager och det första som måste göras på båda noderna är att uppdatera listan med tillgängliga paket:
kör: ipkg update
Nästa steg är att installera tre paket för att kunna köra GRE-Tunneling
kör:
ipkg install kmod-gre
ipkg install kmod-tun
ipkg install ez-ipupdate


________________


Script för att sätta upp GRE-Tunneling


Dessa filer skall ligga i katalogen /etc/rc.d och vara chmod 755
Dessa skript är validerade på både HSMM v.0.4.3 och BBHN v.1.0.0
OBS: /etc/config.mesh och olsrd.conf behöver modifieras enligt nedan för att möjliggöra GRE tunneling.

S51tun


S51tun är ett skript som etablerar en eller flera GRE tunnlar. Den körs vid start av noden och består av flera sektioner som är kommenterade inuti skriptet.
Man kan definiera ett godtyckligt antal tun# gränssnitt men var noga med att hålla ordning på IP adresserna för varje gränssnitt.
I exemplet nedan används 1.1.1.0 / 255.255.255.252 nätet och det ger oss följande IP adresser att arbeta med,
1.1.1.0 Network address
1.1.1.1 Mynode
1.1.1.2 Remotenode
1.1.1.3 Broadcast address
Så om vi behöver etablera flera GRE tunnlar blir exemplevis tun2 enligt nedan,
1.1.1.4 Network address
1.1.1.5 Mynode2
1.1.1.6 Remotenode2
1.1.1.7 Broadcast address


(Skript)

#!/bin/sh /etc/rc.common
START=51
start() {
# Firewall section is needed for applying rules to and from the tunnel interface and LAN as well as WLAN
iptables -D FORWARD 11
iptables -I FORWARD -i tun1 -o eth0.0 -j ACCEPT
iptables -I FORWARD -i eth0.0 -o tun1 -j ACCEPT
iptables -I FORWARD -i tun1 -o wl0 -j ACCEPT
iptables -I FORWARD -i wl0 -o tun1 -j ACCEPT
# Nodes connected behind NAT router or has dynamically assigned IP address from its ISP, needs to check its external IP in order to be able to update DynDNS account. This can be omitted if the node has a static public IP on WAN interface.
ip=`wget --quiet -O - http://www.millhill.org/myip.php/ | awk '{print $4}' | cut -d"<" -f1`
sleep 5
ez-ipupdate -a $ip -u username:password -h mynode.ham-radio-op.net -S dyndns
# This section resolves the IP address of remote node that will be used to establish the GRE tunnel
ip0="$(ifconfig | grep -A 1 'eth0.1' | tail -1 | cut -d ':' -f 2 | cut -d ' ' -f 1)"
ip1="$(ping -q -c 1 remotenode.ham-radio-op.net | grep PING | sed -e 's/.*(//' | sed -e 's/).*//')"
insmod ip_gre
# Tunnel to remotenode.ham-radio-op.net
iptunnel add tun1 mode gre local $ip0 remote $ip1 ttl 225
ifconfig tun1 1.1.1.1 netmask 255.255.255.252 broadcast 1.1.1.3
ifconfig tun1 up
ifconfig tun1 multicast
ifconfig tun1 pointopoint 1.1.1.2
}
stop() {
iptunnel del tun1
}

(/skript)


S52update


Detta skript används i de fall vi använder internatanslutning med dyanmiskt tilldelning av IP adresser (DHCP). Om anslutningen har fast IP tilldelning behövs inte detta skript. Skriptet kontrollerar om IP adressen ändrats och om så är fallet kommer tunneln att laddas om med den nya IP adressen.

(Skript)

#!/bin/sh
ip0="$(iptunnel | grep -A 0 'tun1' | tail -1 | cut -d ':' -f 2 | cut -d ' ' -f 5)"
ip="$(ifconfig | grep -A 1 'eth0.1' | tail -1 | cut -d ':' -f 2 | cut -d ' ' -f 1)"
ip1="$(ping -q -c 1 remotenode.ham-radio-op.net | grep PING | sed -e 's/.*(//' | sed -e 's/).*//')"
if [ $ip1 = $ip0 ]; then
echo "IP is equal. Returning..."
return
else
echo "IP is not equal. Reconfiguring GRE..."
# Tunnel to remotenode.ham-radio-op.net
iptunnel del tun1
iptunnel add tun1 mode gre local $ip remote $ip1 ttl 225
ifconfig tun1 1.1.1.1 netmask 255.255.255.252 broadcast 1.1.1.3
ifconfig tun1 up
ifconfig tun1 multicast
ifconfig tun1 pointopoint 1.1.1.2
fi


(/Skript)


ipupd


Detta skript körs var 5:e minut för att uppdatera den externa IP adressen och hålla DynDNS kontot uppdaterat.

(Skript)

#!/bin/sh
# Nodes connected behind NAT router or has dynamically assigned IP address from its ISP, needs to check its external IP in order to be able to update DynDNS account. This can be omitted if the node has a static public IP on WAN interface.
ip=`wget --quiet -O - http://www.millhill.org/myip.php/ | awk '{print $4}' | cut -d"<" -f1`
sleep 5
ez-ipupdate -a $ip -u username:password -h mynode-shack.ham-radio-op.net -S dyndns

(/Skript)

crontab


Crontab är en Linux komponent som kör skript och program enligt ett schema. I vårt fall ser det till att S52update och ipupd skripten körs med lämpliga intervaller. Med andra ord se till att IP adresser och värdnamn är uppdaterade och startar om GRE tunnlar om så behövs.


*/5 * * * * /usr/local/bin/fccid
* * * * * /etc/rc.d/S52update
*/5 * * * * /etc/rc.d/ipupd


OLSR


Optimized Link State Routing eller OLSR är ett routing protokoll för mobila adhoc nätverk och det är en av nyckelprotokollen i BBHN.
För att GRE tunneling skall fungera i våra noder behöver vi modifiera i OLSR konfigurationen.
Detta görs i olsrd.conf som ligger i /etc/config , /etc/config.mesh
Leta upp “OLSRD default interface configuration” och ta bort “hash #” före “IP4Broadcast” för att göra så att OLSR använder tun gränssnittet som skapades av S51tun skriptet.
Sedan är det bara att lägga till tun gränssnitten (i mitt fall tun1 och tun2) till gränssnittslistan nedanför OLSRd gränssnitts konfigurations delen av file.
Det skall se ut så här i olsrd.conf file under /etc/config.mesh


### OLSRD default interface configuration ###
#############################################
# the default interface section can have the same values as the following
# interface configuration. It will allow you so set common options for all
# interfaces.
InterfaceDefaults {
Ip4Broadcast 255.255.255.255
}


######################################
### OLSRd Interfaces configuration ###
######################################
# multiple interfaces can be specified for a single configuration block
# multiple configuration blocks can be specified
# WARNING, don't forget to insert your interface names here !
Interface "tun1" "tun2" <olsrd_bridge>
{


And the olsrd.conf file in /etc/config should look like:


#############################################
### OLSRD default interface configuration ###
#############################################
# the default interface section can have the same values as the following
# interface configuration. It will allow you so set common options for all
# interfaces.
InterfaceDefaults {
Ip4Broadcast 255.255.255.255
}


######################################
### OLSRd Interfaces configuration ###
######################################
# multiple interfaces can be specified for a single configuration block
# multiple configuration blocks can be specified
# WARNING, don't forget to insert your interface names here !
Interface "tun1" "tun2" "wl0"
{

 


Lite tips om GRE tunneling


Kommandot “iptunnel” sätter upp tunnelparametrar och dessa måste vara rätt för att tunneln skall skapas, notera kommando nedan:
iptunnel add tun1 mode gre local $ip remote $ip1 ttl 225
Låt oss fokusera på lokala och fjärr IP adresserna. I ovanstående kommando är de ersatta av variabler som är bestämda av tidigare körda kommandon.
Det är ett par saker att komma ihåg här för att få detta att fungera riktigt.
Fjärr IP är naturligtvis alltid den externa IP adressen till fjärrnoden vi skall skapa en tunnel till. Om fjärrnoden har dynamisk IP tilldelning måste vi låsa fjärnnodens adress med namnupplösning, därav att vi använder DynDNS eller någon annan dynamisk DNS tjänst.
Den lokala IP adressen kan däremot ta lite former beroende på hur den lokala noden är konfigurerad.
Om noden är direktansluten till internet med statisk publik IP adress är det inga problem, då är det bara att ladda variablen med din fasta IP adress innan “iptunnel” kommandot körs. Men om du har dynamiskt tilldelad IP adress, så måste vi leta upp vilken IP adress som för tillfället är tilldelad, detta kan göras på flera sätt, exempelvis:


ip=`wget --quiet -O - http://www.millhill.org/myip.php/ | awk '{print $4}' | cut -d"<" -f1`
or
ip="$(ifconfig | grep -A 1 'eth0.1' | tail -1 | cut -d ':' -f 2 | cut -d ' ' -f 1)"


Ett tredje alternativ är att din nod är ansluten bakom en Router med NAT eller en brandvägg, i så fall har denna router eller brandvägg blivit tilldelad den externa IP adressen och din BBHN node har fått en IP adress av routern/brandväggen som inte är åtkomlig från internet. Oavsett vilket så måste den lokal IP som används av kommandot “iptunnel” vara den IP adress som är tilldelad eth0.1 annars kommer inte tunneln att skapas.
Så, slutsatsen blir: 1. Man kan ansluta till en fjärrnod med en publik IP adress, och 2. Man måste använda IP adressen på den lokala noden som är tilldelad eth0.1. Detta gäller naturligtvis omvänt, när remote noden konfigurerar sin GRE tunnel for din nod.


DynDNS


Så här långt har vi använt “ez-ipupdate” med DynDNS, men vad göra om du använder noip.com, eftersom “ex-ipupdate” inte stödjer noip.com så behövs en annan lösning. Nedan finns ett förslag:
wget http://dynupdate.no-ip.com/dns?username=$1&password=$2&hostname=$3
Detta kommando kommer att uppadatera ditt noip konto och värdnamn med den IP adress du skickade kommandot ifrån.
Som alltid ändra variablerna med din egen information.


Som en slutkläm är det nu bara att starta om noden, luta dig tillbaks och bevittna magin när dina noder kopplar ihop sig helt automagiskt.

av Johan Engdahl SM7I, översatt och redigerad av Kent Hansson SM7MMJ

Joomla templates by a4joomla

Vi använder cookies för att förbättra våra webbsidor och din upplevelse när du använder dem. Cookies som används för den nödvändigt funktionaliteten för dessa webbsidor har redan blivit satta.
Läs mer om cookies och vad vi använder dom till i vårt policydokument (länk till dokumentet).

  Det är ok med cookies från den här webbplatsen.
EU Cookie Directive Module Information