- [Fortgeschrittene] OpenWRT hinter TC7200 Beitrag #1
Kiependraeger
- Beiträge
- 46
- Punkte Reaktionen
- 0
Moin,
da es im Internetz wirklich wenig vollständige Anleitungen zum Thema "Zweiter Router hinter TC7200 gibt", hier eine kleine Anleitung wie man einen OpenWRT-Router (in meinem Fall ein TP-Link TL-WDR3600 N600) hinter einem TC zum laufen bringt. Ich setze vorraus, dass ihr OpenWRT bereits geflasht habt und im allgeimeinen Basiswissen im Umgang mit Netzwerken habt (DHCP, IPv6, NAT, DNS sollten keine Fremdworte sein). Außerdem solltet ihr wissen, wie man eine SSH-Verbindung zum Router aufbaut und mit der Shell umgeht (Ansonsten kann das ganze in die Hose gehen). Diese Anleitung beschreibt, wie ihr einen IPv6 + IPv4 Zugang mit Firewall (IPv4 mit NAT) erstellen könnt. Ja, Double-NAT ist suboptimal (das wird einem hier ja förmlich fast schon eingeprügelt) aber ich habe keine Lust, dass nach einem Werksreset meine Hostnamen (geht das überhaupt mit dem TC?) verloren gehen und damit auch statische IPs. Aber genug geschwafelt:
IPv4 Zugang
Dies sollte eigentlich schon von Beginn an funktionieren. Wenn ihr wollt, könnt ihr noch den DHCP-Range oder die IPv4 des Routers ändern. Klickt euch einfach durch die Menüs mal durch und googelt was ihr nicht versteht.
IPv6 Zugang
Jetzt wird es interessant: Wie richte ich eine funktionierende Firewall ein, ohne das der IPv6 als Router fungiert(1). Ein Problem ist, dass sich der Präfix der IPv6 Adresse (Also der Teil vor eurem /57 Präfix) dynamisch mit der Zeit ändert. Der Teil hinter dem Präfix (Also der Suffix) bleibt in der Regel gleich (Ausnahme: Privacy Extensions). Dieser wird aus der MAC der Netzwerkkarte generiert, und die ist bekanntlich statisch. IPTables kann allerdings nur Präfixe anständig verwalten. Wir müssen uns also was Einfallen lassen... Ich habe mit einen Cron-Script geschrieben, der alle 60 Sekunden die IPv6 des OpenWRTs überprüft und ggf. die Firewall mit dem neuen Präfix aktualisiert.
(1) Der TC beherrscht weder Prefix-Delegation noch DHCPv6. Ihr seid also drauf angewiesen, euch die IPs von dem Gerät geben zu lassen.
Um euren Router jetzt bereit für IPv6 zu machen, arbeitet bitte folgende Schrit-für-Schritt Anleitung durch (Bis auf den Punkt, wo ihr die /etc/firewall.user bearbeiten sollt. Dort nehmt ihr bitte meine Datei) http://wiki.openwrt.org/doc/howto/ipv6#directly_forward_isp_s_ndp_proxy_address_to_lan
Der Skript sucht also bei jeder Ausführung in der Datei /etc/ipv6prefix nach dem passenden IPv6 Präfix. Damit dieser auch dorthin kommt, erstellt bitte noch folgenden Skript:
Nachdem ihr den Skript gespeichert habt, macht ihn ausführbar:
Nun navigiert über das Webinterface auf folgenden Reiter: System -> Scheduled Tasks und fügt folgende Zeile ein:
Kommentiert außerdem folgenden String in der "/etc/sysctl.conf" aus:
umändern in:
Falls noch nicht geschehen, startet das ganze System neu.
Nun solltet ihr eine vernünftig zu konfigurierende Firewall haben. Um Ports freizugeben, könnt ihr jetzt in das Menü Network->Firewall und dann in den Reiter Custom Rules wechseln und dort für jeden Port eine Zeile ergänzen (Einige Beispiele sind ja schon angegeben).
Sollte euch eine bessere Lösung einfallen (außer die Fritzbox bzw Anbieterwechsel), dann schreibt es hierunter. Fehler und Verbesserungsvorschläge sind gerne gesehen.
Viel Erfolg!
da es im Internetz wirklich wenig vollständige Anleitungen zum Thema "Zweiter Router hinter TC7200 gibt", hier eine kleine Anleitung wie man einen OpenWRT-Router (in meinem Fall ein TP-Link TL-WDR3600 N600) hinter einem TC zum laufen bringt. Ich setze vorraus, dass ihr OpenWRT bereits geflasht habt und im allgeimeinen Basiswissen im Umgang mit Netzwerken habt (DHCP, IPv6, NAT, DNS sollten keine Fremdworte sein). Außerdem solltet ihr wissen, wie man eine SSH-Verbindung zum Router aufbaut und mit der Shell umgeht (Ansonsten kann das ganze in die Hose gehen). Diese Anleitung beschreibt, wie ihr einen IPv6 + IPv4 Zugang mit Firewall (IPv4 mit NAT) erstellen könnt. Ja, Double-NAT ist suboptimal (das wird einem hier ja förmlich fast schon eingeprügelt) aber ich habe keine Lust, dass nach einem Werksreset meine Hostnamen (geht das überhaupt mit dem TC?) verloren gehen und damit auch statische IPs. Aber genug geschwafelt:
IPv4 Zugang
Dies sollte eigentlich schon von Beginn an funktionieren. Wenn ihr wollt, könnt ihr noch den DHCP-Range oder die IPv4 des Routers ändern. Klickt euch einfach durch die Menüs mal durch und googelt was ihr nicht versteht.
IPv6 Zugang
Jetzt wird es interessant: Wie richte ich eine funktionierende Firewall ein, ohne das der IPv6 als Router fungiert(1). Ein Problem ist, dass sich der Präfix der IPv6 Adresse (Also der Teil vor eurem /57 Präfix) dynamisch mit der Zeit ändert. Der Teil hinter dem Präfix (Also der Suffix) bleibt in der Regel gleich (Ausnahme: Privacy Extensions). Dieser wird aus der MAC der Netzwerkkarte generiert, und die ist bekanntlich statisch. IPTables kann allerdings nur Präfixe anständig verwalten. Wir müssen uns also was Einfallen lassen... Ich habe mit einen Cron-Script geschrieben, der alle 60 Sekunden die IPv6 des OpenWRTs überprüft und ggf. die Firewall mit dem neuen Präfix aktualisiert.
(1) Der TC beherrscht weder Prefix-Delegation noch DHCPv6. Ihr seid also drauf angewiesen, euch die IPs von dem Gerät geben zu lassen.
Um euren Router jetzt bereit für IPv6 zu machen, arbeitet bitte folgende Schrit-für-Schritt Anleitung durch (Bis auf den Punkt, wo ihr die /etc/firewall.user bearbeiten sollt. Dort nehmt ihr bitte meine Datei) http://wiki.openwrt.org/doc/howto/ipv6#directly_forward_isp_s_ndp_proxy_address_to_lan
Code:
<i>
</i>PREFIX=`cat /etc/ipv6prefix`
# Create IPv6 bridge between WAN and LAN
ebtables -t broute -A BROUTING -i eth0.2 -p ! ipv6 -j DROP
brctl addif br-lan eth0.2
echo "Starting IPv6 firewall..."
# Clear all rules
ip6tables -F
ip6tables -X
ip6tables -t mangle -F
ip6tables -t mangle -X
# unlimited access to loopback
ip6tables -A INPUT -i lo -j ACCEPT
ip6tables -A OUTPUT -o lo -j ACCEPT
# DROP all incomming traffic
ip6tables -P INPUT DROP
ip6tables -P OUTPUT DROP
ip6tables -P FORWARD DROP
# Allow full outgoing connection but no incomming stuff
ip6tables -A INPUT -i br-lan -m state --state ESTABLISHED,RELATED -j ACCEPT
ip6tables -A OUTPUT -o br-lan -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
# allow incoming ICMP ping pong stuff
ip6tables -A INPUT -i br-lan -p ipv6-icmp -j ACCEPT
ip6tables -A OUTPUT -o br-lan -p ipv6-icmp -j ACCEPT
ip6tables -A FORWARD -i br-lan -p ipv6-icmp -j ACCEPT
############# add your custom rules below ############
### open IPv6 port 80
#ip6tables -A INPUT -i br-lan -p tcp --destination-port 80 -j ACCEPT
### open IPv6 port 22
#ip6tables -A INPUT -i br-lan -p tcp --destination-port 22 -j ACCEPT
### open IPv6 port 25
#ip6tables -A INPUT -i br-lan -p tcp --destination-port 25 -j ACCEPT
### open IPv6 port 444
#ip6tables -A INPUT -i br-lan -p tcp --destination-port 444 -j ACCEPT
############ End custom rules ################
#### no need to edit below ###
# Forward traffic
ip6tables -A FORWARD -i br-lan -m state --state ESTABLISHED,RELATED -j ACCEPT
ip6tables -A FORWARD -i eth0.1 -j ACCEPT
ip6tables -A FORWARD -s fe80::/10 -j ACCEPT
ip6tables -A FORWARD -s $PREFIX:/57 -j ACCEPT
# Redirect all DNS-requests to this device
ip6tables -t nat -I PREROUTING -p tcp --dport 53 -j REDIRECT --to-ports 53
ip6tables -t nat -I PREROUTING -p udp --dport 53 -j REDIRECT --to-ports 53
iptables -t nat -I PREROUTING -p tcp --dport 53 -j REDIRECT --to-ports 53
iptables -t nat -I PREROUTING -p udp --dport 53 -j REDIRECT --to-ports 53 Der Skript sucht also bei jeder Ausführung in der Datei /etc/ipv6prefix nach dem passenden IPv6 Präfix. Damit dieser auch dorthin kommt, erstellt bitte noch folgenden Skript:
Code:
$vim /etc/updateIPv6Prefix.sh Code:
<i>
</i>#!/bin/ash
FILE="/etc/ipv6prefix"
IP=$(ifconfig br-lan | grep Global | head -n1 | sed -e's/^.*inet6 addr\: \([^ ]*\)\/.*$/\1/;t;d' | head -n 1)
ARRAYIP=${IP//:/ }
OLDPREFIX=`cat $FILE`
## Get prefix from ipv6 address
prefix=""
i=0
for j in $ARRAYIP
do if [ $i -lt 4 ] then prefix=$prefix$j: fi i=`expr $i + 1`
done
## Check if prefix has changed
if [ "$OLDPREFIX" != "$prefix" ] then echo Prefix has been changed! ## Write new prefix rm $FILE touch $FILE echo $prefix > $FILE ## Refresh firewall ash /etc/init.d/firewall restart
else echo No need to change!
fi Nachdem ihr den Skript gespeichert habt, macht ihn ausführbar:
Code:
$chmod 755 /etc/updateIPv6Prefix.sh Nun navigiert über das Webinterface auf folgenden Reiter: System -> Scheduled Tasks und fügt folgende Zeile ein:
Code:
*/1 * * * * ash /etc/updateIPv6Prefix.sh Kommentiert außerdem folgenden String in der "/etc/sysctl.conf" aus:
Code:
<i>
</i>net.ipv6.conf.default.forwarding=1
net.ipv6.conf.all.forwarding=1 Code:
<i>
</i>#net.ipv6.conf.default.forwarding=1
#net.ipv6.conf.all.forwarding=1 Falls noch nicht geschehen, startet das ganze System neu.
Nun solltet ihr eine vernünftig zu konfigurierende Firewall haben. Um Ports freizugeben, könnt ihr jetzt in das Menü Network->Firewall und dann in den Reiter Custom Rules wechseln und dort für jeden Port eine Zeile ergänzen (Einige Beispiele sind ja schon angegeben).
Sollte euch eine bessere Lösung einfallen (außer die Fritzbox bzw Anbieterwechsel), dann schreibt es hierunter. Fehler und Verbesserungsvorschläge sind gerne gesehen.
Viel Erfolg!