Bonjour,
J'ai eu à faire la manip avec une WRT54G v2.2, je me suis inspiré des 5 sources suivantes très instructives (la clé est l'utilisation du proxy-ndp-ipv6):
[1] http://wiki.openwrt.org/doc/howto/ipv6
[2] http://en.gentoo-wiki.com/wiki/IPV6_And_Freebox
[3] http://linux-attitude.fr/post/proxy-ndp-ipv6
[4] http://guidespratiques.traduc.org/vf/Linux+IPv6-HOWTO.html
[5] manuel ip (man route, indispensable)
J'ai utilisé backfire rc4 (de base pour brcm47xx) + le paquet firewall en version > 2 (snapshot trunk ou backfire-rc5-testing) qui gère nativement l'ipv6.
J'ai aussi installé en plus:
ip (programme route), ip6tables, kmod-ip6tables, kmod-ipv6 et radvd
Comme dans les tutos [2] et [3] ci-dessus, j'ai séparé mon réseau en deux:
- les 2 premières adresses pour le tronçon freebox <-> openwrt(wan), le reste pour mon réseau privé.
- pour les postes du réseau privé, j'ai laissé l'auto configuration agir (les adresses ipv6 globales dépendent donc des adresses MAC des interfaces réseaux),
- côté firewall, je ne laisse passer que ce qui est nécessaire aux connexions entre postes, et aux connections vers internet, et pour le icmpv6, je ne laisse passer que ce qui est nécessaire à la découverte du voisinage (à adapter en fonction de ses besoins, en particulier si on laisse tourner des services devant être accessibles de l'extérieur par exemple).
Ca donne pour openwrt (je ne montre que les lignes pertinentes pour ipv6 et je ne détaille pas car tout est dans les liens donnés en intro):
/etc/config/network:
config 'alias'
option 'interface' 'wan'
option 'proto' 'static'
option 'ip6addr' 'xxxx:xxxx:xxxx:xxxx::2/126'
option 'ip6gw' 'xxxx:xxxx:xxxx:xxxx::1'
config 'interface' 'lan'
option 'type' 'bridge'
option 'ifname' 'eth0.0'
option 'proto' 'static'
option 'ipaddr' '192.168.1.1'
option 'netmask' '255.255.255.0'
option 'ip6addr' 'xxxx:xxxx:xxxx:xxxx:1::1/64'
/etc/rc.local:
if [ -x /usr/sbin/ip ] ; then
ip link set eth0.1 promisc on
ip -6 neigh add proxy xxxx:xxxx:xxxx:xxxx:aaaa:aaaa:aaaa:aaaa dev eth0.1
ip -6 neigh add proxy xxxx:xxxx:xxxx:xxxx:bbbb:bbbb:bbbb:bbbb dev eth0.1
ip -6 neigh add proxy xxxx:xxxx:xxxx:xxxx::1 dev br-lan
fi
exit 0
avec xxxx:xxxx:xxxx:xxxx::/64 le préfixe ipv6 octroyé par Free,
aaaa:aaaa:aaaa:aaaa et bbbb:bbbb:bbbb:bbbb la partie d'adresse ipv6 générée à partir des MAC des interfaces réseau du LAN privé (pas besoin des les calculer, si l'ipv6 est activé sur les postes du LAN, l'adresse lien local fournit l'info). wan est associé à l'interface physique eth0.1 (pour radvd j'ai du utiliser l'interface physique).
La suppression de l'ipv6 sur eth0 (sysctl.conf) est importante: à cause de l'autoconfiguration cette interface recevrait une adresse ipv6 globale, mais c'est wan que l'on veut utiliser. Cela permet bien de n'avoir que wan comme route par défaut pour internet (il y a probablement d'autre façons de procéder, mais ca permet de garder le parallèle avec la configuration ipv4). Pour le firewall, les autres règles utilisant la notion de zone sont les mêmes pour ipv6 et ipv4 (si on utilise une version > 2 du paquet firewall)
Côté postes clients du réseau local, presque rien à faire (sinon bien laisser s'activer l'ipv6).
Sous Debian, dans mon /etc/network/interfaces, j'ai juste ajouté:
up /sbin/ip6tables-restore < /etc/network/ip6tables-start
avec /etc/network/ip6tables-start:
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
-A INPUT -i lo -m state --state NEW,RELATED,ESTABLISHED,UNTRACKED -j ACCEPT
-A INPUT -p icmpv6 --icmpv6-type neighbour-advertisement -j ACCEPT
-A INPUT -p icmpv6 --icmpv6-type neighbour-solicitation -j ACCEPT
-A INPUT -p icmpv6 --icmpv6-type router-advertisement -j ACCEPT
-A INPUT -p tcp -m tcp ! --tcp-option 2 --tcp-flags SYN SYN -j DROP
-A INPUT -s xxxx:xxxx:xxxx:xxxx::2/126 -i wlan0 -m state --state INVALID,NEW,UNTRACKED -j DROP
-A INPUT -s xxxx:xxxx:xxxx:xxxx:1::1/128 -i wlan0 -m state --state INVALID,NEW,UNTRACKED -j DROP
-A INPUT -s xxxx:xxxx:xxxx:xxxx::/64 -i wlan0 -m state --state NEW,RELATED,ESTABLISHED,UNTRACKED -j ACCEPT
-A INPUT -i wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -o lo -m state --state NEW,RELATED,ESTABLISHED,UNTRACKED -j ACCEPT
-A OUTPUT -d xxxx:xxxx:xxxx:xxxx::2/126 -o wlan0 -m state --state INVALID -j DROP
-A OUTPUT -d xxxx:xxxx:xxxx:xxxx:1::1/128 -o wlan0 -m state --state INVALID -j DROP
-A OUTPUT -d xxxx:xxxx:xxxx:xxxx::/64 -o wlan0 -m state --state NEW,RELATED,ESTABLISHED,UNTRACKED -j ACCEPT
-A OUTPUT -o wlan0 -m state --state NEW,RELATED,ESTABLISHED,UNTRACKED -j ACCEPT
COMMIT
(ici je n'accepte pas les connexions en provenance du routeur mais c'est un peu superflu)
C'est une façon de faire, "chez moi ca marche"TM, et j'espère que ca t'aidera.
# Illustration
Posté par pdm . En réponse au message OpenWRT / IPV6 / Free. Évalué à 2.
Bonjour,
J'ai eu à faire la manip avec une WRT54G v2.2, je me suis inspiré des 5 sources suivantes très instructives (la clé est l'utilisation du proxy-ndp-ipv6):
[1] http://wiki.openwrt.org/doc/howto/ipv6
[2] http://en.gentoo-wiki.com/wiki/IPV6_And_Freebox
[3] http://linux-attitude.fr/post/proxy-ndp-ipv6
[4] http://guidespratiques.traduc.org/vf/Linux+IPv6-HOWTO.html
[5] manuel ip (man route, indispensable)
J'ai utilisé backfire rc4 (de base pour brcm47xx) + le paquet firewall en version > 2 (snapshot trunk ou backfire-rc5-testing) qui gère nativement l'ipv6.
J'ai aussi installé en plus:
ip (programme route), ip6tables, kmod-ip6tables, kmod-ipv6 et radvd
Comme dans les tutos [2] et [3] ci-dessus, j'ai séparé mon réseau en deux:
- les 2 premières adresses pour le tronçon freebox <-> openwrt(wan), le reste pour mon réseau privé.
- pour les postes du réseau privé, j'ai laissé l'auto configuration agir (les adresses ipv6 globales dépendent donc des adresses MAC des interfaces réseaux),
- côté firewall, je ne laisse passer que ce qui est nécessaire aux connexions entre postes, et aux connections vers internet, et pour le icmpv6, je ne laisse passer que ce qui est nécessaire à la découverte du voisinage (à adapter en fonction de ses besoins, en particulier si on laisse tourner des services devant être accessibles de l'extérieur par exemple).
Ca donne pour openwrt (je ne montre que les lignes pertinentes pour ipv6 et je ne détaille pas car tout est dans les liens donnés en intro):
/etc/config/network:
config 'alias'
option 'interface' 'wan'
option 'proto' 'static'
option 'ip6addr' 'xxxx:xxxx:xxxx:xxxx::2/126'
option 'ip6gw' 'xxxx:xxxx:xxxx:xxxx::1'
config 'interface' 'lan'
option 'type' 'bridge'
option 'ifname' 'eth0.0'
option 'proto' 'static'
option 'ipaddr' '192.168.1.1'
option 'netmask' '255.255.255.0'
option 'ip6addr' 'xxxx:xxxx:xxxx:xxxx:1::1/64'
/etc/config/firewall:
config 'rule'
option 'src' 'wan'
option 'proto' 'icmp'
option 'icmp_type' 'router-advertisement'
option 'target' 'ACCEPT'
option 'family' 'ipv6'
config 'rule'
option 'src' 'wan'
option 'proto' 'icmp'
option 'icmp_type' 'neighbour-advertisement'
option 'target' 'ACCEPT'
option 'family' 'ipv6'
config 'rule'
option 'src' 'wan'
option 'proto' 'icmp'
option 'icmp_type' 'neighbour-solicitation'
option 'target' 'ACCEPT'
option 'family' 'ipv6'
config 'rule'
option 'src' 'lan'
option 'proto' 'icmp'
option 'icmp_type' 'router-solicitation'
option 'target' 'ACCEPT'
option 'family' 'ipv6'
config 'rule'
option 'src' 'lan'
option 'proto' 'icmp'
option 'icmp_type' 'neighbour-advertisement'
option 'target' 'ACCEPT'
option 'family' 'ipv6'
config 'rule'
option 'src' 'lan'
option 'proto' 'icmp'
option 'icmp_type' 'neighbour-solicitation'
option 'target' 'ACCEPT'
option 'family' 'ipv6'
/etc/config/sysctl.conf:
net.ipv6.conf.eth0.disable_ipv6=1
net.ipv6.conf.all.forwarding=1
net.ipv6.conf.default.forwarding=1
net.ipv6.conf.all.proxy_ndp=1
net.ipv6.conf.default.proxy_ndp=1
net.bridge.bridge-nf-call-arptables=0
net.bridge.bridge-nf-call-ip6tables=0
net.bridge.bridge-nf-call-iptables=0
/etc/config/radvd:
config 'interface'
option 'interface' 'lan'
option 'AdvSendAdvert' '1'
option 'AdvManagedFlag' '0'
option 'AdvOtherConfigFlag' '0'
option 'ignore' '0'
config 'prefix'
option 'interface' 'lan'
option 'ignore' '0'
option 'prefix' 'xxxx:xxxx:xxxx:xxxx::/64'
option 'AdvRouterAddr' '0'
option 'AdvOnLink' '1'
option 'AdvAutonomous' '1'
config 'rdnss'
option 'interface' 'lan'
option 'ignore' '1'
/etc/rc.local:
if [ -x /usr/sbin/ip ] ; then
ip link set eth0.1 promisc on
ip -6 neigh add proxy xxxx:xxxx:xxxx:xxxx:aaaa:aaaa:aaaa:aaaa dev eth0.1
ip -6 neigh add proxy xxxx:xxxx:xxxx:xxxx:bbbb:bbbb:bbbb:bbbb dev eth0.1
ip -6 neigh add proxy xxxx:xxxx:xxxx:xxxx::1 dev br-lan
fi
exit 0
avec xxxx:xxxx:xxxx:xxxx::/64 le préfixe ipv6 octroyé par Free,
aaaa:aaaa:aaaa:aaaa et bbbb:bbbb:bbbb:bbbb la partie d'adresse ipv6 générée à partir des MAC des interfaces réseau du LAN privé (pas besoin des les calculer, si l'ipv6 est activé sur les postes du LAN, l'adresse lien local fournit l'info). wan est associé à l'interface physique eth0.1 (pour radvd j'ai du utiliser l'interface physique).
La suppression de l'ipv6 sur eth0 (sysctl.conf) est importante: à cause de l'autoconfiguration cette interface recevrait une adresse ipv6 globale, mais c'est wan que l'on veut utiliser. Cela permet bien de n'avoir que wan comme route par défaut pour internet (il y a probablement d'autre façons de procéder, mais ca permet de garder le parallèle avec la configuration ipv4). Pour le firewall, les autres règles utilisant la notion de zone sont les mêmes pour ipv6 et ipv4 (si on utilise une version > 2 du paquet firewall)
Côté postes clients du réseau local, presque rien à faire (sinon bien laisser s'activer l'ipv6).
Sous Debian, dans mon /etc/network/interfaces, j'ai juste ajouté:
up /sbin/ip6tables-restore < /etc/network/ip6tables-start
avec /etc/network/ip6tables-start:
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
-A INPUT -i lo -m state --state NEW,RELATED,ESTABLISHED,UNTRACKED -j ACCEPT
-A INPUT -p icmpv6 --icmpv6-type neighbour-advertisement -j ACCEPT
-A INPUT -p icmpv6 --icmpv6-type neighbour-solicitation -j ACCEPT
-A INPUT -p icmpv6 --icmpv6-type router-advertisement -j ACCEPT
-A INPUT -p tcp -m tcp ! --tcp-option 2 --tcp-flags SYN SYN -j DROP
-A INPUT -s xxxx:xxxx:xxxx:xxxx::2/126 -i wlan0 -m state --state INVALID,NEW,UNTRACKED -j DROP
-A INPUT -s xxxx:xxxx:xxxx:xxxx:1::1/128 -i wlan0 -m state --state INVALID,NEW,UNTRACKED -j DROP
-A INPUT -s xxxx:xxxx:xxxx:xxxx::/64 -i wlan0 -m state --state NEW,RELATED,ESTABLISHED,UNTRACKED -j ACCEPT
-A INPUT -i wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -o lo -m state --state NEW,RELATED,ESTABLISHED,UNTRACKED -j ACCEPT
-A OUTPUT -d xxxx:xxxx:xxxx:xxxx::2/126 -o wlan0 -m state --state INVALID -j DROP
-A OUTPUT -d xxxx:xxxx:xxxx:xxxx:1::1/128 -o wlan0 -m state --state INVALID -j DROP
-A OUTPUT -d xxxx:xxxx:xxxx:xxxx::/64 -o wlan0 -m state --state NEW,RELATED,ESTABLISHED,UNTRACKED -j ACCEPT
-A OUTPUT -o wlan0 -m state --state NEW,RELATED,ESTABLISHED,UNTRACKED -j ACCEPT
COMMIT
(ici je n'accepte pas les connexions en provenance du routeur mais c'est un peu superflu)
C'est une façon de faire, "chez moi ca marche"TM, et j'espère que ca t'aidera.