Tag FreeBSD

4/3/2010 IPV6 step one two

La semaine dernière, j'expliquais comment j'avais intégré l'IPV6 dans mon réseau. Depuis la donne à fortement changé puisque j'ai mis ma freebox en mode non routeur, et donc mon propre routeur sous FreeBSD (ma nouvelle carte wifi marche pas sous OpenBSD).

Du coup on en arrive au problème de la freebox qui se comporte en routeur IPV6 même en mode non routeur, voyez plutôt cette discussion FRNOG ou on nous explique que ça va peut être changer bientôt. En attendant, pas moyen de router proprement l'IPV6 de Free sans passer par un proxy ndp ou un bridge logiciel, sans compter qu'il n'est pas possible d'avoir un reverse DNS avec l'IPV6 de Free.

Grâce à sieur bsdsx j'ai découvert tunnelbrocker.net qui est un service type tunnel broker en gros les paquet IPV6 sont encapsulés dans de l'IPV4 entre chez vous et le bout du tunnel (plusieurs sont disponibles suivant votre localisation), ils fournissent un /64 ou un /48 et surtout la possibilité d'avoir un reverse DNS.

Sachez qu'il y a encore une troisième façon d'avoir une connectivité IPV6, basé sur la RFC 3068 ou encore 6to4, qui permet à n'importe qui d'obtenir un /48 sans demander rien à personne (c'est la passerelle 6to4 la plus proche de vous qui prend en charge le routage de votre traffic), le prefixe est calculé à partir de votre IPV4 publique.

J'ai grosso modo donné les 3 manière communes d'accéder au réseau IPV6 quand on est abonné chez Free. Chaque méthode à son avantage (ou pas), vous pouvez lire ce mail.

Perso j'ai choisi le tunnel broker Huricane Electrics qui marche bien, il suffit de créer un compte et un tunnel, ils donnent même la config pour FreeBSD mais pour fixer ça en dur dans rc.conf :

ipv6_enable="YES"
ipv6_gateway_enable="YES"
gif_interfaces="gif0"
gifconfig_gif0="82.229.137.130 216.66.84.46" # Mon IP publique suivie de l'IP du tunnel
ipv6_ifconfig_gif0="2001:470:1f14:7bf::2 2001:470:1f14:7bf::1 prefixlen 128"
ipv6_defaultrouter="2001:470:1f14:7bf::1"
# On relie le réseau local (sur l'interface vr1 chez moi)
ipv6_ifconfig_vr1="2001:470:1f15:7bf:dead:c0de::1 prefixlen 96"

La conf pf qui va avec :

ext_if = "vr0"
int_if  = "vr1"
gif_if  = "gif0"
tun_end = "216.66.84.46" # Le bout du tunnel

localnet = $int_if:network

block log all
pass inet proto icmp all icmp-type { echoreq unreach }
pass inet6 proto icmp6 all icmp6-type { echoreq unreach timex toobig neighbrsol neighbradv }
pass out proto { tcp udp } all
pass out on $ext_if from $ext_if to $tun_end
# On peut filtre ici (là tout passe sans filtrage)
pass in on $gif_if inet6 proto { tcp udp icmp6 } to $localnet

En cas de doutes, vous pouvez faire des nmap depuis l'interface web de tunnelbroker.net.

Pour la config du reverse DNS c'est pas plus compliqué qu'en IPV4 (juste plus long) :

; master/local6.rev
$TTL 3600 ; 1 heure
f.b.7.0.5.1.f.1.0.7.4.0.1.0.0.2.ip6.arpa.   IN  SOA ns.philpep.org. root.philpep.org. (
            2010022601  ; serial
            8H          ; refresh
            4H          ; retry
            4W          ; expire
            1D )        ; Min TTL

@       IN       NS ns.philpep.org.
1.0.0.0.0.0.0.0.e.d.0.c.d.a.e.d     IN      PTR solo.philpep.org.
; et named.conf
zone "f.b.7.0.5.1.f.1.0.7.4.0.1.0.0.2.ip6.arpa" {
    type master;
    file "master/local6.rev";
};

Autre chose à savoir, l'IPV6 c'est pas encore ça puisqu'on est encore obligé à un moment ou un autre d'encapsuler l'IPV6 dans l'IPV4 et de passer par des tunnels plus ou moins loin, la connectivité sortante en souffre énormément (allez faire un tour sur youtube.com en IPV6 en passant par un tunnel broker...), du coup ça peut être une bonne idée de préférer l'IPV4 sur la machine où il y a le browser :

/etc/rc.d/ip6addrctl prefer_ipv4
# ou alors QUE pour firefox about:config
network.dns.disableIPv6

Si quelqu'un à déjà mis en place son réseau IPV6 en 6to4 avec stf(4), j'ai lu que la connectivité entrante était moins fiable qu'avec un tunnel broker, je voudrais que quelqu'un m'explique ??

Quelques liens :

23/2/2010 Astuce pf du jour

J'ai la chance d'avoir une bibliothèque avec un rayon informatique bien rempli dans mon Université, dernièrement j'y ai emprunté ce bouquin. Là dedans j'y ai vu une syntaxe pour décrire le réseau local que j'avais raté quand j'ai lu la doc :

ext_if = "rl0"
# Au lieu de
localnet = "{ 192.168.0.0/24, 2a01:e35:2e58:9820::/64 }"
# On peut mettre
localnet = $ext_if:network
# Ou encore
localnet = rl0:network

Pf va lui même calculer le réseau local à l'aide de l'IP du netmask et du prefixe.

Attention tout de même si vous avez plusieurs IP (v4 et v6) sur l'interface, ça peut produire des règles redondantes, en cas de doute :

pfctl -sr

EDIT (27/02/10) : En fait quand il y a des alias sur l'IP il va les évaluer mais pour ne spécifier que l'adresses (sans les alias) on peut mettre $ext_if:network:0

21/2/2010 IPV6 step 1

Je viens de passer tout (ou presque) mes services en IPV6 (en gardant IPV4 of course) :

% host blog.philpep.org
blog.philpep.org is an alias for lenine.philpep.org.
lenine.philpep.org has address 82.229.137.130
lenine.philpep.org has IPv6 address 2a01:e35:2e58:9820::5

Donc l'idée c'est de faire un récit de mon passage étant donné le nombre de modifications que j'ai du faire sur la configurations des machines, des softs et des pare feu. Je vais faire tout ça en 2 ou 3 billets.

Mon FAI (free) me fournis un préfixe IPV6 2a01:e35:2e58:9820::/64, et ma topologie réseau permet sans se casser la tête de faire fonctionner tout ça. Le réseau est composé de 3 machines (+ quelques intrus en wifi), un routeur OpenBSD, un serveur FreeBSD avec 4 jails et mon laptop FreeBSD. Le mode routeur est activé sur la freebox (sans DHCP) et elle installe un 192.168.0.0/24 sur lequel sont toutes les machines (jails y compris) sont configurés, ainsi toutes les machines sont reliés physiquement sur la freebox ce qui permet d'éviter les problèmes de neighbor solicitation si seul mon routeur serait physiquement relié à la freebox (on peut passer outre avec ndp(8))

En ipv4 :

+-------------+      +----------------+       +---------+
| SRV + jails |<-----|     Routeur    |<------| Freebox |
+-------------+      +----------------+       +---------+
                      Filtrage/Routage

    En IPV4 tout le trafic passe par le routeur qui dispatche sur les jails.

Et en ipv6 :

+-------------+
| SRV + jails |<------+
+-------------+       |
                      |    +---------+
                      +----| Freebox |
                      |    +---------+
+------------+        |
|  Routeur   |<-------+
+------------+

En IPV6 le traffic est distribué par la freebox,
le routeur ne sert plus (à part les services qui
sont dessus).

La configuration ipv6 des machines sous FreeBSD :

# /etc/rc.conf
ipv6_enable="YES"
ipv6_ifconfig_rl0="2a01:e35:2E58:9820::2 prefixlen 64"
ipv6_defaultrouter="2a01:e35:2E58:9820::1"

# ... La config jail
jail_lenine_ip="192.168.0.5,2a01:e35:2E58:9820::5"
# ...

Un petit reboot (où un /etc/rc.d/pleins_de_trucs restart)

Sur OpenBSD :

# /etc/hostname.vr0
inet 192.168.0.1 255.255.255/0
inet6 2a01:e35:2E58:9820::3 64
# /etc/mygate (freebox)
192.168.0.254
2a01:e35:2E58:9820::1

Après il faut modifier votre pf.conf en supprimant inet de vos règles de filtrage comme ça on sous entend inet et inet6, concernant icmp c'est plus délicat parce qu'il y a deux protocoles.

# /etc/pf.conf
pass in inet proto icmp
pass in inet6 proto icmp6

Ensuite ça devrait tourner :

% ping6 -c 2 www.google.com
PING6(56=40+8+8 bytes) 2a01:e35:2e58:9820::2 --> 2a00:1450:8002::67
16 bytes from 2a00:1450:8002::67, icmp_seq=0 hlim=54 time=49.177 ms
16 bytes from 2a00:1450:8002::67, icmp_seq=1 hlim=54 time=53.867 ms

--- www.l.google.com ping6 statistics ---
2 packets transmitted, 2 packets received, 0.0% packet loss
round-trip min/avg/max/std-dev = 49.177/51.522/53.867/2.345 ms

% traceroute6 www.google.com
traceroute6: Warning: www.l.google.com has multiple addresses; using 2a00:1450:8002::6a
traceroute6 to www.l.google.com (2a00:1450:8002::6a) from 2a01:e35:2e58:9820::2, 64 hops max, 12 byte packets
 1  2a01:e35:2e58:9820::1  0.589 ms  0.530 ms  0.480 ms
 2  6to4-b8-e3.intf.routers.proxad.net  35.128 ms  33.359 ms  38.152 ms
....
# HO LE VILAIN TUNEL ! :>

Vous voilà en IPV6, la première chose à faire c'est reconfigurer votre parre feu, normalement vous n'aurez pas à doubler chaque lignes, enlevez juste inet là où il faut et ça passe. Les seules lignes à doubler sont les redirections (rdr), parce qu'il faut envoyer sur une adresse IPV4 ou sur une adresse IPV6.

Dans le prochain billet j'expliquerais comment passer petit à petit ses softs sur IPV6.