IPv6 Forum

Normale Version: Linux Router für IPv6 mit ip6tables und SIXXS-Tunnel
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
In meinem Beitrag "Einrichten eines 6in4 static Tunnels mit SIXXS unter Linux" habe ich beschrieben, wie man einen IPv6 Tunnel einrichtet.

Nun möchte ich das ganze auf ein Netzwerk erweitern:

Mein Linux-Router (hier ein Debian Lenny) ist mit 2 Netzwerkkarten ausgestattet:
eth0: Netzwerkkarte mit Internetzugang
eth1: Internes Netzwerk

Als erstes habe ich bei Sixxs ein subnet beantragt. Innerhalb weniger Stunden bekam ich mein approval-mail, das ungefähr so aussieht:
Code:
The SixXS Staff have honored your request for a subnet on the following tunnel:
-------
  PoP Name     : xxxx (xxxx [ASxxxx])
  Subnet IPv6  : 2001:15c0:zzzz::/48
  Routed to    : 2001:15c0:xxxx:xxxx::2/64
  Your IPv4    : yy.yy.yyy.yy9
-------

Eigentlich sind nur 2 Änderungen notwendig:
1. Das Start-Skript muss für das Netzwerk auf der internen Netzwerkkarte erweitert werden.
2. radvd - konfigurieren.

radvd - damit alle Clients IP-Adressen bekommen:

Dazu muss folgende Datei angepasst werden:
/etc/radvd.conf
Code:
interface eth1 {
   AdvSendAdvert on;
    prefix 2001:15c0:zzzz::/64  
    {
        AdvAutonomous on;
        AdvOnLink on;
        AdvRouterAddr on;
   };
};

Als nächstes das Startup-Skript:
Code:
#!/bin/bash
# dieses Script liegt auf /etc/network/if-up.d/startipv6tunnel
# The IPv4 address of the SixXS PoP you're using
SIXXS4="yyy.yyy.yy.73"
EXTIP="yy.yy.yyy.yy9"
TUNNELPREFIX="2001:15c0:xxxx:xxxx::"
INTPREFIX="2001:15c0:zzzz::"
EXTERNALIF="eth0"
INTERNALIF="eth1"

MYTUNNELIP="${TUNNELPREFIX}2"
SIXXSTUNNELIP="${TUNNELPREFIX}1"
MTU=1280
IPTABLES="/sbin/iptables"
IPT6="/sbin/ip6tables"
IP6DEV="sixxs"
## ENABLING IPv6 Tunnel ##

$IPTABLES -A INPUT -p 41  -s $SIXXS4 -d $EXTIP -j ACCEPT
$IPTABLES -A OUTPUT -p 41 -d $SIXXS4 -s $EXTIP -j ACCEPT
$IPTABLES -A POSTROUTING -o $EXTERNALIF -t nat -d $SIXXS4 -p all -j SNAT --to-source $EXTIP

## ENABLING IPv6 Tunnel ##

/sbin/ip tunnel add $IP6DEV mode sit local ${EXTIP} remote ${SIXXS4}
/sbin/ip link set $IP6DEV up

/sbin/ip link set mtu ${MTU} dev $IP6DEV
/sbin/ip tunnel change $IP6DEV ttl 64
/sbin/ip -6 addr add ${MYTUNNELIP}/64 dev $IP6DEV
/sbin/ip -6 ro add default via ${SIXXSTUNNELIP} dev $IP6DEV

#eth1 internal IF #
/sbin/ip a a $INTPREFIX"1" dev $INTERNALIF
/sbin/ip r a $INTPREFIX"/64" dev $INTERNALIF

echo "Starting IPv6 firewall..."
$IPT6 -F
$IPT6 -X
$IPT6 -t mangle -F
$IPT6 -t mangle -X

## DROP all incomming traffic
$IPT6 -P INPUT DROP
$IPT6 -P OUTPUT DROP
$IPT6 -P FORWARD DROP

#unlimited access to loopback
$IPT6 -A INPUT -i lo -j ACCEPT
$IPT6 -A OUTPUT -o lo -j ACCEPT

# 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 without limits
$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

Das ganz noch einmal starten:
Code:
debian:~# /etc/network/if-up.d/startipv6tunnel

Und das wars. Sobald man auf einem Client (Linux oder Windows) die Netzwerkverbindung aktualisiert (also z.B. aus- und einschaltet) hat der Client eine IPv6-Adresse:

Man kann die Verbindung dann einmal mit folgenden Mitteln testen:
Auf einem Linux-Client (hier Ubuntu) sollte der Befehl ifconfig folgendes ausgeben:
Code:
user@ubuntu:/# ifconfig
eth0      Link encap:Ethernet  HWaddr xx:xx:xx:xx:xx:xx  
          inet addr:192.168.xxx.xxx Bcast:192.168.xxx.xxx  Mask:255.255.255.0
          inet6 addr: 2001:15c0:zzzz:xxxx:abcd:abcd:abcd:abcd/64 Scope:Global
          inet6 addr: fe80::abcd:abcd:abcd:abcd/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:49790 errors:0 dropped:0 overruns:0 frame:0
          TX packets:46229 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:45647711 (45.6 MB)  TX bytes:7472494 (7.4 MB)
          Interrupt:18

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:70 errors:0 dropped:0 overruns:0 frame:0
          TX packets:70 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:6956 (6.9 KB)  TX bytes:6956 (6.9 KB)

Code:
user@ubuntu:/# route -n -6
Kernel IPv6 routing table
Destination                    Next Hop                   Flag Met Ref Use If
2001:15c0:zzzz::/64            ::                         UAe  256 0    26 eth0
fe80::/64                      ::                         U    256 0     0 eth0
::/0                           fe80::abcd:abcd:abcd:abcd   UGDAe 1024 0     8 eth0
::/0                           ::                         !n   -1  1   144 lo
::1/128                        ::                         Un   0   3    18 lo
2001:15c0:zzzz:xxxx:abcd:abcd:abcd:abcd/128 ::                         Un   0   1   485 lo
fe80::abcd:abcd:abcd:abcd/128  ::                         Un   0   1     0 lo
ff00::/8                       ::                         U    256 0     0 eth0
::/0                           ::                         !n   -1  1   144 lo
hi, danke für deine anleitung, und hab auch gleich nochmal ne verständnisfrage ...

hab per DD-WRT ein sixxs tunnel am laufen, auf dem WRT läuft auch eine ip6tables ... ganz egal auf welchem gerät das jetzt läuft, geht nur um eine grundlegende verständnisfrage!

1) wenn der WRT per radvd die Adressen aus meinem Subnet an meine Clients verteilt hat ja, falls ich es richtig verstehe, jeder client eine eigene IPV6 Adresse mit der er direkt im IPV6-Internet stellt?

2) Auf dem WRT läuft ja eine ip6tables ... schützt diese meine clients?

... für meine begriffe brauch jeder client seine eigene firewall da IPV6 ja kein NAT mehr hat und somit nicht diesen "schutz" von NAT hat und direkt im Internet steht .... andererseits muss der ganze traffic ja so hardwaremäßig ja trotzdem über den WRT und damit durch die ip6tables ?!
Hallo!

Zitat:1) wenn der WRT per radvd die Adressen aus meinem Subnet an meine Clients verteilt hat ja, falls ich es richtig verstehe, jeder client eine eigene IPV6 Adresse mit der er direkt im IPV6-Internet stellt?

Ja genau! Wobei diese Adresse idR variiert.

Zitat:2) Auf dem WRT läuft ja eine ip6tables ... schützt diese meine clients?

Im Normalfall schon, da du mit IPTables jedes "Erstpaket" an deine Clients verbieten kannst.

Zitat:... für meine begriffe brauch jeder client seine eigene firewall da IPV6 ja kein NAT mehr hat und somit nicht diesen "schutz" von NAT hat und direkt im Internet steht .... andererseits muss der ganze traffic ja so hardwaremäßig ja trotzdem über den WRT und damit durch die ip6tables ?!
Ja, es muss jedes Paket ob rein oder raus über den WRT und somit über ip6tables; wie oben erwähnt kannst du damit den direkten Zugriff von Außen blockieren/filtern.

Code:
# IP6TABLES
# default policy...
...
ip6tables -P FORWARD DROP
...
# allow forwarding
ip6tables -A FORWARD -i laninterface -j ACCEPT # alle dürfen raus
ip6tables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT #nur die dürfen von außen rein
Referenz-URLs