Das Ziel ist es, ein Netzwerk aufzubauen mit einem WRT54g mit OpenWRT als zentrales Netzwerkelement. Der Internetzugang erfolgt via ADSL, daher muss der WRT54g PPPoE auf dem WAN-Interface fahren. Das WLAN soll eine vom LAN getrennte DMZ darstellen und durch WPA geschützt sein. Sowohl im LAN als auch im WLAN sollen per DHCP fixe IP-Adressen und Hostnamen vergeben werden.
Vor der ersten Installation muss die NVRAM-Variable boot_wait=on gesetzt werden. Wie das geht, ist in der OpenWRT-Dokumentation für verschiedene Original-Firmwareversionen genau beschrieben. Mit der Version 4.20.7 funktioniert das Skript von Uranium235 tadellos.
Eventuell möchte man sich auch noch die Originalfirmware sichern (via Web-Frontend).
Erstmal besorgt man sich die gewünschte Version von der OpenWRT-Downloadseite. Ausserdem benötigt man einen TFTP-Server, z.B. atftp. Der PC, von dem aus das Firmware-Image installiert werden soll, muss im Netz 192.168.1.0/24 sein, unter Linux am einfachsten zu bewerkstelligen mit ifconfig eth0:1 192.168.1.2 up
. Dann bereitet man auf der Kommandozeile folgenden Befehl vor (noch nicht ausführen):
atftp --trace --option "timeout 0.3" --option "mode octet" --put --local-file openwrt-xxx-x.x-xxx.bin 192.168.1.1
Nun trennt man den Router vom Stromnetz, startet das atftp-Kommando und schaltet den Router wieder ein.
Das Image wird nun auf den Router geladen und dort ins Flash geschrieben (Power-LED blinkt). Anschliessend bootet OpenWRT, was an der leuchtenden DMZ-LED zu erkennen ist. Sobald die DMZ-LED ausgeht, sollte der Router bereit sein.
Ist kein Router-Passwort gesetzt, kann man per telnet oder Web-Interface aus dem LAN zugreifen. Sobald man ein Passwort setzt (per Web-Interface oder mit passwd), wird der Telnet-Daemon ausgeschaltet und der SSHd gestartet.
Die Konfiguration von PPPoE beschränkt sich auf das Setzen der folgenden NVRAM-Variablen:
nvram set wan_ifname=ppp0
nvram set wan_proto=pppoe
nvram set ppp_idletime=10
nvram set ppp_mtu=1492 # Nach Angabe des ISP
nvram set ppp_passwd=Passwort
nvram set ppp_redialperiod=15
nvram set ppp_username=PPP-Loginname
nvram set pppoe_ifname=vlan1
nvram commit
Um die Zeitzone für die Schweiz/Deutschland zu setzen:
echo "CET-1CEST-2,M3.5.0/02:00:00,M10.5.0/03:00:00" > /etc/TZ
Da der WRT54g keine Uhr besitzt, empfiehlt es sich, die Zeit mit Hilfe des ntpclient automatisch per NTP zu setzen. Dazu genügt ein ipkg install ntpclient
.
Falls WPA schon in der Original-Firmware konfiguriert wurde, reicht ein ipkg install nas
. Ansonsten kann WPA nach der Installation des nas-Pakets über das Web-Frontend konfiguriert werden.
Um das WLAN in eine eigene DMZ zu bringen, sind folgende Schritte nötig:
1. und 2. werden durch das Setzen der folgenden NVRAM-Variablen erreicht:
nvram set lan_ifname=vlan0
nvram set lan_proto=static
nvram set lan_ipaddr=192.168.1.1
nvram set lan_netmask=255.255.255.0
nvram set wifi_ifname=eth1
nvram set wifi_proto=static
nvram set wifi_ipaddr=192.168.2.1
nvram set wifi_netmask=255.255.255.0
nvram set wan_ifname=vlan1
nvram set wan_proto=dhcp
nvram set lan_ifnames=vlan0 eth3 eth3
nvram commit
Die Firewallregeln werden in /etc/init.d/S45firewall angepasst. Eine Möglichkeit sind die folgenden Regeln:
WIFI=$(nvram get wifi_ifname) # Definition des WIFI-Interfaces
iptables -A FORWARD -i $LAN -o $WIFI -j ACCEPT # Freier Zugriff vom LAN ins WIFI
iptables -A FORWARD -i $WIFI -o $WAN -j ACCEPT # Freier Zugriff vom WIFI ins WAN
Damit ist der Zugriff vom WIFI ins LAN gesperrt, Internet-Zugang jedoch möglich und auch vom LAN ins WIFI ist alles erlaubt.
Beispielkonfiguration /etc/dnsmasq.conf:
domain-needed
bogus-priv
filterwin2k
localise-queries
local=/lan/
domain=lan
expand-hosts
except-interface=ppp0
dhcp-authoritative
dhcp-range=192.168.1.100,192.168.1.200,255.255.255.0,12h
dhcp-range=wlan0,192.168.2.2,static,255.255.255.0,12h
dhcp-leasefile=/tmp/dhcp.leases
dhcp-host=00:B0:D0:3A:7D:E4,host1,192.168.1.5,infinite
dhcp-host=00:B0:D0:3A:7D:C8,host2,192.168.1.6,infinite
dhcp-host=00:11:24:9C:15:24i,net:wlan0,host3,192.168.2.4,infinite
dhcp-option=wlan0,3,192.168.2.1
Um den Webserver von aussen zugänglich zu machen, muss folgende Firewall-Regel hinzugefügt werden:
iptables -t nat -A prerouting_rule -i $WAN -p tcp --dport 80 -j ACCEPT
iptables -A input_rule -i $WAN -p tcp --dport 80 -j ACCEPT
Um FreeDNS zu nutzen, reicht es, folgende Zeile in /etc/ppp/ip-up anzuhängen:
wget -q -O NUL http://freedns.afraid.org/dynamic/update.php?XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Damit wird bei jedem Start des PPP-Interfaces die IP bei FreeDNS aktualisiert.