Tunnel HNA mit OpenWrt White Russian

Aus Freifunk Halle
Wechseln zu: Navigation, Suche

Vorab: Grundsätzlich ist diese Freifunkfirmware und die passende Hartware auch heute noch zum Betrieb freier Netze geeignet, es ist aber die Technik aus der Anfangszeit von Freifunk.

Diese Beschreibung geht davon aus, das auf Deinem Linksys WRT54GL Router OpenWrt White Russian in der verlinkten Version installiert ist.

Sowie die VPN-Tunnel zu den VPN-Servern bestehen.

Anmerkung hinter vpn2.freifunk-halle.org sind mehrere Server vpn2a, vpn2b, vpn2c.

Nach den Änderungen musst Du Deinen Router neu starten.

Zum Testen auf dem Router einloggen (z.B. PuTTY) und dann traceroute google.com eingeben.

Du kannst die Schritte mit den Programm Putty, WinSCP und einem Webbrowser (z.B. Firefox) abarbeiten.


1. OPENVPN

Die Dateien für OPENVPN bekommst Du von 3dfx oder kwm. Auf Deinem Freifunkrouter musst Du das Verzeichnis openvpn als Unterverzeichnis von /etc/ anlegen. In das Verzeichnis /etc/openvpn speicherst Du die Dateien für OPENVPN.

Jetzt muss OPENVPN noch in die Liste der zu startenden Dienste aufgenommen werden. Die Dienste welche automatisch gestartet werden, stehen im Verzeichnis /etc/init.d/ und beginnen mit einem S gefolgt von einer Zahl. Die Zahl bestimmt die Startreihenfolge.

Um OPENVPN auf Autostart zu stelle melde Dich als root mit einem Terminalprogramm (z.B. Putty) auf Deinem Freifunkrouter an und gib folgenden Befehl ein

ln -s /etc/init.d/openvpn /etc/init.d/S99openvpn

und bestätige mit Enter. Jetzt startet OPENVPN automatisch beim Starten des Routers.


2. ändern der DNS-Abfrage /etc/init.d/S60dnsmasq (S = starten | Zahl = Startreihenfolge)

#!/bin/sh

. /etc/functions.sh

write_config()
{

	WAN_DOMAIN_LOCAL=
	WAN_DOMAIN_DOMAIN=
	test -n "$WAN_DOMAIN" && WAN_DOMAIN_LOCAL="local=/.$WAN_DOMAIN/"
	test -n "$WAN_DOMAIN" && WAN_DOMAIN_DOMAIN="domain=$WAN_DOMAIN"

	cat>/var/etc/dnsmasq.conf<<EOF
# filter what we send upstream
#domain-needed
bogus-priv
filterwin2k

# To speed up ssh, all lookups throug dnsmasq
no-resolv

# allow /etc/hosts and dhcp lookups via *.lan
addn-hosts=/etc/local.hosts
$WAN_DOMAIN_LOCAL
$WAN_DOMAIN_DOMAIN
expand-hosts

##############################################
# new ff root server ips (intranet)
##############################################
server=10.62.28.36
server=10.62.28.35
server=10.62.2.131
server=10.62.16.1
server=10.62.16.37
##############################################
# new ff root server ips (internet)
##############################################
server=134.255.239.79
server=178.254.31.83
##############################################
# reverse dns
##############################################
server=8.8.8.8
server=8.8.4.4
##############################################


EOF

	IFS=\;
	for i in $WAN_DNS;do
		echo "server=$i">>/var/etc/dnsmasq.conf
	done

	unset IFS

	if [ -z "$WANOLSR" ]; then
		cat>>/var/etc/dnsmasq.conf<<EOF
# no dns queries from the wan
except-interface=$(nvram get wan_ifname)

EOF
	fi

	DHCPEND=$(nvram get dhcp_num)
	test -z "$DHCPEND" && DHCPEND=4
	if [ $DHCPEND -gt 0 ]; then
		DHCPLEASE=$(nvram get dhcp_lease)
		test -z "$DHCPLEASE" && DHCPLEASE=12h
		test "$DHCPLEASE" = "0" && DHCPLEASE=12h
		DHCPNET=$(echo $LANNET|cut -d'.' -f1-3)
		DHCPBEG=$(nvram get dhcp_start)
		DHCPBEG=${DHCPBEG##*.}
		test -z "$DHCPBEG" && DHCPBEG=100
		DHCPEND=$(( $DHCPBEG + $DHCPEND - 1 ))
		echo "dhcp-range=wired,$DHCPNET.$DHCPBEG,$DHCPNET.$DHCPEND,$LANMSK,$DHCPLEASE">>/var/etc/dnsmasq.conf
	else
		echo "no-dhcp-interface=$(nvram get lan_ifname)">>/var/etc/dnsmasq.conf
	fi

	WLDHCP=$(nvram get ff_wldhcp)
	IFS=\;
	for ENT in $WLDHCP; do
		NET=${ENT%[:,]*}
		MSK=${ENT#*[:,]}
		if [ -n "$NET" ] && [ -n "$MSK" ]; then
			DHCPLEASE=30m
			DHCPBEG=$(ipcalc -n $NET|cut -d'.' -f4)
			#DHCPBEG=$(( $DHCPBEG + 2 ))
			DHCPEND=$(ipcalc -b $NET|cut -d'.' -f4)
			#DHCPEND=$(( $DHCPEND - 1 ))
			DHCPNET=$(ipcalc -n $NET|cut -d'=' -f2|cut -d'.' -f1-3)
			echo "dhcp-range=wlnat,$DHCPNET.$DHCPBEG,$DHCPNET.$DHCPEND,$MSK,$DHCPLEASE">>/var/etc/dnsmasq.conf
		fi
	done

	WAN_HOSTNAME=$(nvram get wan_hostname)
	if test -n "$WAN_HOSTNAME" && test -n "$LANADR"; then
		echo "address=/$WAN_HOSTNAME/$LANADR">>/var/etc/dnsmasq.conf
		echo "address=/$WAN_HOSTNAME.$WAN_DOMAIN/$LANADR">>/var/etc/dnsmasq.conf
	fi

	cat>>/var/etc/dnsmasq.conf<<EOF
dhcp-leasefile=/var/run/dhcp.leases

# allow a /etc/ethers for static hosts
read-ethers

# other useful options:
#      subnet mask: dhcp-option=wired,1,255.255.255.0
# default route(s): dhcp-option=wired,3,192.168.1.1,192.168.1.2
#    dns server(s): dhcp-option=wired,6,192.168.1.1,192.168.1.2
#   broadcast addr: dhcp-option=wired,28,192.168.1.255
#   broadcast addr: dhcp-option=wlnat,28,172.31.255.255
EOF

	test -f /etc/local.dnsmasq.conf && cat>>/var/etc/dnsmasq.conf</etc/local.dnsmasq.conf
}

case $1 in
	start)
		# Compatibility with openwrt
		ln -sf /var/etc/resolv.conf /tmp/resolv.conf
		rm -f /var/etc/resolv.conf
		WAN_DNS=$(nvram get wan_dns)
		WAN_DOMAIN=$(nvram get wan_domain)
		# No DNS: Use well known DNS servers
		test -z "$WAN_DNS" && WAN_DNS="88.198.178.18;141.54.1.1;212.204.49.83;208.67.220.220;208.67.222.222"

		if [ "0" != "$(nvram get ff_dnsmasq)" ];then
			echo "Starting dnsmasq..."
			export NVRAM_wan_ifname
			export NVRAM_lan_ifname
			export NVRAM_lan_ifnames
			eval $(/usr/bin/netparam)
			write_config
			echo "search olsr">/var/etc/resolv.conf
			echo "nameserver 127.0.0.1">>/var/etc/resolv.conf

			/usr/sbin/dnsmasq
		else
			echo "Configure resolv..."
			:>/var/etc/resolv.conf
			IFS=\;
			for i in $WAN_DNS;do
				echo "nameserver $i">>/var/etc/resolv.conf
			done
			unset IFS
		fi
		test -n "$WAN_DOMAIN" && echo "search $WAN_DOMAIN">>/var/etc/resolv.conf
	;;
	stop)
		echo "Stopping dnsmasq..."
		killall dnsmasq
	;;
	restart)
		$0 stop
		$0 start
	;;
	*)
		echo "Usage: $0 start|stop|restart"
	;;
esac


3. ändern der Zeit-Abfrage /etc/init.d/S92rdate (S = starten | Zahl = Startreihenfolge)

#!/bin/sh
# Zeit und Datum Abgleich mit Zeitservern

ntp_pool="192.53.103.108 192.53.103.104 128.138.140.44 171.64.7.77 171.64.7.99 81.169.154.44"

test -n "$FAILSAFE" && exit
if [ ! -f ${0%/*}/*ntp* ]; then
	i=0
	while [ "$i" -le 6 ]; do
#		if [ -n "$(for t in main olsr 68; do ip route list exact 0/0 table $t; done)" ]; then
			sh -c "
				pool='$ntp_pool'
				i=0
				
				while [ \$i -lt 4 ]; do
					let i=\$i+1
					for n in \$pool; do
						rdate -s \$n 2>/dev/null 1>/dev/null && exit
						sleep 5
					done
				done
			"&			
			return
#		else 
#			let i=$i+1
#			sleep 30
#		fi
	done
fi


4. Hinweis

Wir gehen in der Beschreibung davon aus, das Du einen DSL-Router, einen Freifunk-Router und einen Internetzugang hast.

Die beiden Router haben jeweils einen WAN-Port (Weg Richtung Internet) und oft vier LAN-Ports (internes NETZ).

Der WAN-Port des Freifunk-Routers ist mit einem Netzwerkkabel mit einem Lan-Port des DSL-Routers zu verbinden.

Aus Sicht des DSL-Routers gehört der WAN-Port des Freifunk-Router zum lokalen Netz des DSL-Routers.

Aus Sicht des Freifunk-Routers gehört der LAN-Port des DSL-Router zum Internet.

Der DSL-Router ist für den Freifunk-Router das Gateway zum Internet.

Der Freifunk-Router muss am Wan-Port eine IP-Adresse aus dem LAN (lokalen Netz) des DSL-Router zugeteilt bekommen. Die IP-Adresse des DSL-Routers im LAN (lokales Netz) ist die Gateway IP für den Freifunk-Router.


5. WAN-Default-Route entfernen in den Einstellungen WAN

Öffne mit einem Webbrowser die Startseite Deines Freifunkrouters. Gehe auf Verwalten und melde Dich als root an. Dann gehe auf WAN.

Verwaltung: WAN 

WAN-Protokoll: WAN IP eintragen

WAN-Netzmaske: Netzmaske eintragen

WAN-Default-Route: hier nichts eintragen!

Wenn in den WAN-Einstellungen die WAN-Default-Route nicht entfernt ist, geht der Internetverkehr wie bisher direkt ins Internet. Mit Eintrag WAN-Default-Route ist also alles wie bisher. Ohne diesen Eintrag und mit den hier beschriebenen Änderungen geht der Internetverkehr über den VPN-Server ins Internet.


6. Statische Routen setzen im Bereich LAN


Öffne mit einem Webbrowser die Startseite Deines Freifunkrouters. Gehe auf Verwalten und melde Dich als root an. Dann gehe auf LAN.

    134.255.239.79:255.255.255.255:X.X.X.X:0:vlan1
    178.254.31.83:255.255.255.255:X.X.X.X:0:vlan1 
    62.141.46.39:255.255.255.255:X.X.X.X:0:vlan1 
    188.68.48.88:255.255.255.255:X.X.X.X:0:vlan1 
    192.53.103.108:255.255.255.255:X.X.X.X:0:vlan1
    192.53.103.104:255.255.255.255:X.X.X.X:0:vlan1
    128.138.140.44:255.255.255.255:X.X.X.X:0:vlan1
    8.8.8.8:255.255.255.255:X.X.X.X:0:vlan1
    8.8.4.4:255.255.255.255:X.X.X.X:0:vlan1 

x.x.x.x ist durch die IP zu ersetzen, welche Dein DSL-Router an den LAN-Ports hat.

vlan1 ist der WAN-Port des Freifunk-Routers.

Die Routen zeigen auf vpn1, vpn2a, vpn2b, vpn2c, Zeit-Server, DNS-Server.


7. ändern der Firewall /etc/local.fw und noch dises 10.62.X.X auf Deine Node-IP-Adresse ändern.

#!/bin/sh

# Place your firewall addons here or use /etc/local.fw-xxx

#MACS="00:00:01:00:00:01 0c:68:0b:02:a3:1e"

case $1 in
	start)
		for i in $MACS; do
			# You can also add "-I INPUT", but it is sufficient
			# to block forwarding, since the delinquent will get
			# the routing but no (internet) connectivity.
			iptables -I FORWARD -m mac --mac-source $i -j DROP
		done
		iptables -I INPUT -i tap+ -j ACCEPT
		iptables -I OUTPUT -o tap+ -j ACCEPT
		iptables -I FORWARD -i tap+ -j ACCEPT
		iptables -I FORWARD -o tap+ -j ACCEPT

		iptables -I POSTROUTING -t nat -o tap+ -s 192.168.1.0/24 -j SNAT --to-source 10.62.X.X


	;;
	stop)
		for i in $MACS; do
			iptables -D FORWARD -m mac --mac-source $i -j DROP
		done
	;;
esac