Linux Router für IPv6 mit ip6tables und Tunnelbroker.net / Hurricane Electic
Wer wirklich schnell zum eigenen IPv6-Netzwerk kommen möchte sollte sich Tunnelbroker.net anschauen. Im Gegensatz zu SIXXS (bei denen es wegen dieses Creditsystems ewig dauert) hat man das Netzwerk in wenigen Minuten am laufen.
1. Schritt: Registrierung
http://www.tunnelbroker.net/register.php
Kurz darauf erhält man seine Logindaten und es geht los.
2. Schritt: Einloggen und auf Create Regular Tunnel klicken; dann erscheint folgendes Fenster:
3. Schritt: Die angezeigten Daten (wie unten) in das startscript einfügen:
Jetzt erstellen wir ein Startup-script unter /etc/network/if-up.d/startipv6tunnel
Code:
#!/bin/bash
# dieses Script liegt auf /etc/network/if-up.d/startipv6tunnel
# The IPv4 address of the hurricane PoP you're using
HURRICANE4="216.66.80.98" #siehe Screenshot in Schritt 3 (1)
EXTIP="223.67.22.22" #siehe Screenshot in Schritt 3 (2)
TUNNELPREFIX="2001:7f7:25:477::" #siehe Screenshot in Schritt 3 (3) + Anmerkung 1
INTPREFIX="2001:7f7:b6b1::/64" #siehe Screenshot in Schritt 3 (4) + Anmerkung 2
INTPREFIXIP="2001:7f7:b6b1::1" #siehe Screenshot in Schritt 3 (4) + Anmerkung 2
EXTERNALIF="eth0"
INTERNALIF="eth1"
#OPTIONAL:/sbin/ip addr add $EXTIP/32 dev $EXTERNALIF
MYTUNNELIP="${TUNNELPREFIX}2"
HURRICANETUNNELIP="${TUNNELPREFIX}1"
MTU=1280
IPTABLES="/sbin/iptables"
IPT6="/sbin/ip6tables"
IP6DEV="hurricane"
## ENABLING IPv6 Tunnel ##
$IPTABLES -A INPUT -p 41 -s $HURRICANE4 -d $EXTIP -j ACCEPT
$IPTABLES -A OUTPUT -p 41 -d $HURRICANE4 -s $EXTIP -j ACCEPT
$IPTABLES -A POSTROUTING -o $EXTERNALIF -t nat -d $HURRICANE4 -p all -j SNAT --to-source $EXTIP
## ENABLING IPv6 Tunnel ##
/sbin/ip tunnel add $IP6DEV mode sit local ${EXTIP} remote ${HURRICANE4} ttl 255
/sbin/ip link set $IP6DEV up
/sbin/ip -6 addr add ${MYTUNNELIP}/64 dev $IP6DEV
/sbin/ip -6 ro add ::/0 dev $IP6DEV
#INTERNALIF #
/sbin/ip a a $INTPREFIXIP dev $INTERNALIF
/sbin/ip r a $INTPREFIX dev $INTERNALIF
echo "Starting IPv6 firewall..."
#OPTIONAL: enable IPv6 forwarding
#OPTIONAL:echo 1 > /proc/sys/net/ipv6/conf/all/forwarding
/etc/init.d/radvd restart
$IPT6 -F
$IPT6 -X
$IPT6 -t mangle -F
$IPT6 -t mangle -X
#unlimited access to loopback
$IPT6 -A INPUT -i lo -j ACCEPT
$IPT6 -A OUTPUT -o lo -j ACCEPT
#$IPT6 -P INPUT ACCEPT
#$IPT6 -P OUTPUT ACCEPT
#$IPT6 -P FORWARD ACCEPT
## DROP all incomming traffic
$IPT6 -P INPUT DROP
$IPT6 -P OUTPUT DROP
$IPT6 -P FORWARD DROP
# Allow full outgoing connection but no incomming stuff
$IPT6 -A INPUT -i $IP6DEV -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT6 -A OUTPUT -o $IP6DEV -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
# allow incoming ICMP ping pong stuff
$IPT6 -A INPUT -i $IP6DEV -p ipv6-icmp -j ACCEPT
$IPT6 -A OUTPUT -o $IP6DEV -p ipv6-icmp -j ACCEPT
# Clients are allowed to connect to router
$IPT6 -A INPUT -i $INTERNALIF -p all -j ACCEPT
$IPT6 -A OUTPUT -o $INTERNALIF -p all -j ACCEPT
# clients are allowed to reach internet
$IPT6 -A FORWARD -i $INTERNALIF -o $IP6DEV -p all -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPT6 -A FORWARD -o $INTERNALIF -i $IP6DEV -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
############## add your custom rules below ############
#### open IPv6 port 80
##$IPT6 -A INPUT -i $IP6DEV -p tcp --destination-port 80 -j ACCEPT
#### open IPv6 port 22
##$IPT6 -A INPUT -i $IP6DEV -p tcp --destination-port 22 -j ACCEPT
#### open IPv6 port 25
##$IPT6 -A INPUT -i $IP6DEV -p tcp --destination-port 25 -j ACCEPT
############# End custom rules ################
#
##### no need to edit below ###
## log everything else
#$IPT6 -A INPUT -i $IP6DEV -j LOG
$IPT6 -A INPUT -i $IP6DEV -j DROP
Abschließend radvd konfigurieren:
/etc/radvd.conf:
Code:
interface eth1 {
AdvSendAdvert on;
prefix 2001:7f7:b6b1::/64 #siehe Screenshot in Schritt 3 (4) + Anmerkung 2
{
AdvAutonomous on;
AdvOnLink on;
AdvRouterAddr on;
};
};
Anmerkung 1:
Im Screenshot steht
Server IPv6 Address 2001:7f7:25:477::1/64 und
Client IPv6 Address 2001:7f7:25:477::2/64. Da das in der Regel immer so ist nehme ich im Script einfach das 2001:7f7:25:477::
Anmerkung 2:
Im Screenshot steht Routed /48 2001:7f7:b6b1::/48: Da ich über radvd im Netzwerk nur ein /64-er Netzwerk freigebe. Wähle ich hier einfach irgendein Teilnetz - in diesem Fall 2001:7f7:b6b1::/64 mit der lokalen IP 2001:7f7:b6b1::1. (Es wäre natürlich auch möglich 2001:7f7:b6b1:ab::/64 zu verwenden.)
Das ganz noch starten:
Code:
debian:~# /etc/network/if-up.d/startipv6tunnel
That's it!