Einen OpenWRT router installieren

Seit einigen Jahren, genauer gesagt seit Linksys den legendären WRT54GL-Router herausgebracht hat, ist es möglich auf immer mehr billigen WLAN-Routern „OpenWRT“, als Linux zu installieren. – Diese Mini-Linux Distribution reicht in den meisten Anwendungsfällen um das PC-/Server basierte Gateway zu ersetzen.

Wir setzen hier eine default Konfiguration mit dem, immer noch populärsten Linksys WRT54GL auf.

Inhalt

Vergleich gegenüber eines Server-Gateways

Vorteile

  • Leise
  • Weniger Stromverbrauch
  • Platzsparender

Nachteile

  • Stark eingeschränkter Speicherplatz und RAM
  • Weniger flexibel

Voraussetzungen

  • PC
  • Linksys WRT54GL-Router

Hinweise zur verwendeten OpenWRT-Version

Leider ändert das OpenWRT-Projekt bei fast jedem neuen release die Konfigurationsmethoden wieder radikal; d.H., was in Version 7.09 galt, gilt nicht mehr für Version 8.09, usw.

[stextbox id=“warning“ caption=“Hinweis“]Dieses Tutorial bezieht sich deshalb ausdrücklich auf die Version 8.09![/stextbox]

[stextbox id=“warning“ caption=“Achtung“]Die neueren Kamikaze-Version (8.09) scheint ein Rückschritt zur Vorherigen Version (7.09) zu sein: Nebst der komplizierteren Konfiguration (z.B. die SUSE-Typische Konfiguration: „/etc/hosts“ is autogenerated, use „/etc/hosts.local“ instead…) ist OpenWRTso aufgeblasen, dass viele Pakete, wie z.B. OpenVPN (ohne Hacks) keinen Platz mehr finden! – Ich würde deshalb einigen Leuten (die, die keine Lust am lange rumbasteln und rumgoogeln haben) empfehlen die Version: 7.09 zu installieren![/stextbox]

Ich beschreibe hier die Version 8.09, schlicht aus dem Grund weil ich schon zu viel Zeit mit Basteln investiert hatte und nicht nochmals von vorne mit einem reflash von 7.09 beginnen wollte. 😉

You have been warned…

Installation von OpenWRT

Zuerst schliessen wir den Router über einen der Ethernet-Ports direkt am PC an, dieser sollte auf DHCP eingestellt sein.

Dann wählen wir die URL: http://192.168.1.1/ an (Benutzername/Passwort: admin/admin) und klicken und durch zu -> Administration -> Firmware Upgrade

[stextbox id=“note“ caption=“Hinweis“]Es ist ganz wichtig, zuerst die Kernel 2.4 Version zu installieren, um danach die NVRAM-Variablen „boot_wait“ und „boot_time“ zu setzen (geht in den 2.6-er Versionen nicht)!
Derzeit ist die 2.4-er Kernel Version auch besser, da auf Kernel 2.6. Wireless noch immer nicht richtig läuft.[/stextbox]

Nun laden wir das folgende Firmware-Image herunter: http://downloads.openwrt.org/kamikaze/8.09.2/brcm-2.4/openwrt-wrt54g-squashfs.bin
Dieses installieren wir nun auf dem Router wie ein Standard Firmware-Upgrade.

Nach ca. 2 Minuten rebootet der Router und wir können uns per telnet auf: 192.168.1.1 verbinden und konfigurieren.

NVRAM-Variablen setzen

(Hinweis: Dies muss nur bei der ersten OpenWRT Installation gemacht werden)

Gleich nach dem ersten Login muss folgendes ausgeführt werden:

nvram set boot_wait=on
nvram set boot_time=10
nvram commit && reboot

Konfiguration

IP ändern

Als erstes kann man die LAN-IP nach eigenen belieben setzen, wenn der Standard 192.168.1.1 nicht gefällt.
Dies lässt sich ganz einfach in der Datei: /etc/config/network machen:

#### VLAN configuration
config switch eth0
        option vlan0    "0 1 2 3 5*"
        option vlan1    "4 5"
 
 
#### Loopback configuration
config interface loopback
        option ifname   "lo"
        option proto    static
        option ipaddr   127.0.0.1
        option netmask  255.0.0.0
 
 
#### LAN configuration
config interface lan
        option type     bridge
        option ifname   "eth0.0"
        option proto    static
        option ipaddr   10.2.1.1
        option netmask  255.255.255.0
 
 
#### WAN configuration
config interface        wan
        option ifname   "eth0.1"
        option proto    dhcp

SSH auf dem Internet-Interface

Dies werden wohl die meisten benötigen, da man so den Router später auch remote administrieren kann:

passwd

schaltet SSH ein- und telnet aus.

Nun geben wir unter /etc/firewall.user folgendes ein:

#========================== Rulesets ==========================================
### Open ports to WAN
## -- This allows port 22 to be answered by (dropbear on) the router
iptables -t nat -A prerouting_wan -p tcp --dport 22 -j ACCEPT
iptables        -A input_wan      -p tcp --dport 22 -j ACCEPT

Nach einem: /etc/init.d/firewall restart sollte man sich dann auf die öffentliche IP einloggen können.

[stextbox id=“warning“ caption=“Zugriff einschränken“]Da der router quasi das „Tor zum Internet“ ist, sollte man diesen nicht einfach so per SSH login Weltweit verfügbar machen, sondern auf das interne Netzwerk einschränken; remote kann dann immer noch per VPN zugegriffen werden.

Dazu ändert man die obige Regel bei einem 10-er Netzwerk wie folgt ab (bei einer andere Netzadresse muss man das natürlich anpassen!):

### Open ports to WAN
## -- This allows port 22 to be answered by (dropbear on) the router
iptables -t nat -A prerouting_wan -p tcp --dport 22 -s 10.0.0.0/8 -j ACCEPT
iptables        -A input_wan      -p tcp --dport 22 -s 10.0.0.0/8 -j ACCEPT

Dazu kann man intern immer darauf zugreifen, selbst wenn eine VPN-Verbindung mal ausfallen sollte und remote nur noch per VPN.[/stextbox]

Zeit- und Zeitzone einstellen

Zuerst in <I>/etc/config/system</I> den Parameter „option timezone“ auf Mitteleuropäische Zeit (CEST) einstellen:

option timezone CET-1CEST-2,M3.5.0/02:00:00,M10.5.0/03:00:00

Und danach mittels:

date -s YYYY-MM-DD hh:mm[:ss]

die Zeit richtig Einstellen.

Wireless aktivieren

Unter /etc/config/wireless:

option disabled 1

entfernen.

Mit:

option encryption psk
        option key        "passwort"

Kann man nun noch die Verschlüsselung aktivieren.

Wer noch kein Passwort hat, mit:

pwgen --secret 13 1

kann man sich eins generieren lassen.

Firewall-Bug reparieren

Standardmässig blockt OpenWRT 8.09 ICMP- (ping) requests; dies ist unschön und führt zu nur sehr mühsam zu identifizierenden Netzwerk-Problemen.
Deshalb sollte in /etc/config/firewall folgendes eingefügt werden:

# Bugfix: Allow ICMP (<a href="https://dev.openwrt.org/ticket/4546)" target="blank">https://dev.openwrt.org/ticket/4546)</a>
config rule
        option proto ICMP
        option target ACCEPT

Paketliste aktualisieren:

opkg update

[stextbox id=“note“ caption=“Hinweis“]Dies muss in jeder shell session _immer_ einmal gemacht werden, sonst findet opkg die Pakete nicht![/stextbox]

QoS-Scripts

Die QoS-Funktionalität wird zwar nicht unbedingt gebraucht, ist aber trotzdem ganz Nett für einen Router:

ipkg install qos-scripts
/etc/init.d/qos start
/etc/init.d/qos enable

DynDNS

DynDNS ist sehr nützlich wenn sich die öffentliche IP-Adresse ab- und zu ändert, wie das bei den meisten Providern der Fall ist.

Dazu muss zuerst bei einem DynDNS-Anbieter ein Account erstellt werden (z.B. unter dyndns.org ), dann in OpenWRT die ddns-scripts installieren:

opkg install ddns-scripts

und unter /etc/config/ddns die Daten eintragen; diese Konfiguration sollte selbsterklärend sein… 😉

Zur initialisierung muss nun einmal folgendes gemacht werden:

sh
. /usr/lib/ddns/dynamic_dns_functions.sh # note the leading period
start_daemon_for_all_ddns_sections
exit

Ab jetzt wird sich die IP immer mit der DynDNS-URL synchronisieren, sobald diese ändert.

ntpclient

Um automatische Zeit updates empfangen zu können, installieren wir den ntpclient:

opkg install ntpclient

openvpn

Um den OpenWRT router als Client für eine VPN-Verbindung einzurichten ist folgendes zu tun:

opkg update
opkg install openvpn
mkdir /etc/openvpn/

[stextbox id=“note“ caption=“Hinweis“]Sollte beim client eine Meldung wegen ungenügendem Speicherplatz kommen, kann man folgendes probieren:

echo 'option force_space' >> /etc/opkg.conf

– Aus irgendeinem Grund funktioniert das häufig sogar.[/stextbox]

Nun erstellen wir das config file des clients:

client
dev tun
proto udp
port 1194
comp-lzo
daemon
remote vpnserver
resolv-retry infinite
#nobind
persist-key
persist-tun
ca /etc/openvpn/ca.crt
cert /etc/openvpn/client-1.crt
key /etc/openvpn/client-1.key
ns-cert-type server
verb 3

Bitte den ganzen Rest in dem File vorher weg löschen, z.B. durch: „echo > /etc/config/openvpn“)

package openvpn
config openvpn custom_config
option enable 1
option config /etc/openvpn/client-1.conf

Und auch hier noch die firewall unter /etc/firewall.user (nur der zusätzliche Teil, evtl. bestehende rules sollten beibehalten werden):

#========================== Rulesets ==========================================
### Open ports to WAN
## -- This allows port 22 to be answered by (dropbear on) the router
iptables -t nat -A prerouting_wan -p tcp --dport 22 -j ACCEPT
iptables        -A input_wan      -p tcp --dport 22 -j ACCEPT
 
### VPN
## -- VPN-Connection settings
iptables -t nat -A prerouting_rule -i eth0.1 -p udp --dport 1194 -j ACCEPT
iptables        -A input_rule      -i eth0.1 -p udp --dport 1194 -j ACCEPT
iptables        -A input_rule      -i tun0                     -j ACCEPT
iptables        -A forwarding_rule -i tun0                     -j ACCEPT
iptables        -A forwarding_rule -o tun0                     -j ACCEPT
iptables        -A output_rule     -o tun0                     -j ACCEPT

Als letztes definieren wir auf dem client noch, dass der DNS-Server des 10.1.1.0-er Netzwerks verwendet werden soll durch anfügen folgender Zeilen in /etc/config/dhcp:
Unterhalb: „config dhcp lan“

option dhcp-option=6,10.1.1.10
option domain-suffix=home.lan

und weisen den festen hosts wiederum feste IP-Adressen zu:

# pc01
00:00:00:00:00:00 10.2.1.10
# pc02
00:00:00:00:00:00 10.2.1.20
#usw.

Nun noch den Client aktivieren und neu starten:

/etc/init.d/openvpn enable
/etc/init.d/openvpn start
/etc/init.d/dnsmasq restart
/etc/init.d/firewall restart

Related Links

Related Downloads

Published by

Steven Varco

Steven ist ein Redhat RHCE- und Kubernetes CKA Zertifizierter Linux-Crack und ist seit über 20 Jahren sowohl beruflich wie auch privat auf Linux spezialisiert. In seinem Keller steht ein Server Rack mit diversen ESX und Linux Servern.

One thought on “Einen OpenWRT router installieren”

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert