Tags

arm arpaname bin_sh blocage blosxom bsd bsdfrance cblog certification chroot cluster dg834 dhcp diffusion dns dnsmasq domU dovecot fail-over fail2ban firefox fossil freebsd ftp git guruplug install ipv6 jail kernel kimsufi lex libre linutop liste makefile mikrotik ml150 mohawk nanojail netbook netbsd nginx ntp ntp.org openbsd openntpd openrd opensmtpd openwrt orke pkgng poudriere privee proxy pxe python rc.conf rescue reverse rmll routage route rrdcgi sendmail serial sieve sjail sl2009 ssd sshd symon unbound update usb var_empty vimperator world xen yacc zfs

Powered by

blOg
maRkdown
awK
shEll

17/10/2015

[ ipv6 routage ]

201510171800 ipv6 routage

Le réseau ipv6 de mon chez moi de moi que j'ai personnellement moi-même

Mon FAI qui a tout compris me fournit un /61 soit 8 /64 (il n'a pas encore compris les bonnes pratiques d'attribution d'adresses ipv6). J'en ai fait l'usage suivant:

pouetbox 2a01:e35:zzz:f660::1/64
 |
mikrotik eth1 2a01:e35:zzz:f660::2/64
 |
 vlan10 2a01:e35:zzz:f661::2/64
 |
cisco sg300
 |   |   |
 |   |   linutop vlan630 2a01:e35:zzz:f663:214:bff:fe80:337b/64 (re0)
 |   |
 |   dell n7010 vlan640 2a01:e35:zzz:f664:40:15::1/64 (alc0)
 |      |
 |      tap6 2a01:e35:zzz:f665:40:15::1/96
 |
mac mini
 |  |  |
 |  |  vlan630 2a01:e35:zzz:f663::1/64 (gem0)
 |  |
 |  vlan640 2a01:e35:zzz:f664::1/64 (gem0)
 |
 gem0 2a01:e35:zzz:f661::22/64

2a01:e35:zzz:f660::/64

Le réseau entre ma pouetbox et mon routeur mikrotik. Oui, un /64 pour connecter 2 machines. Pas moyen de faire autrement.

2a01:e35:zzz:f661::/64

Le réseau entre mon routeur mikrotik et mon mac mini openbsd. Oui, un /64 pour connecter 2 machines. Mais c'est un prétexte pour faire mumuse avec les vlans (parce que cette engeance de cisco sg300 a beau être "ipv6 compliant", ce n'est qu'un client ipv6 tout juste capable d'accepter *UNE SEULE* adresse) et utiliser pf afin de sécuriser les autres /64.

Mes 2 fonera (dns) sont aussi dans ce réseau.

2a01:e35:zzz:f663::/64

Les machines de ce réseau n'offrent aucun service (excepté du ssh, oeuf corse).

2a01:e35:zzz:f664::/64

Les machines de ce réseau font de la virtualisation. Je réserve à chacune un /96 tiré de 2a01:e35:zzz:f665::/64. Exemple de configuration de 2a01:e35:zzz:f664:X:Y::1/64:

ospf

Le mac mini fait office de passerelle pour les réseaux 2a01:e35:zzz:f663::/64 et 2a01:e35:zzz:f663::/64. Il annonce ces réseaux par ospf:

$ cat /etc/ospf6.conf
redistribute connected

area 0.0.0.0 {
        interface gem0 {
        }
}

Côté mikrotik:

Flags: X - disabled, A - active, D - dynamic, C - connect, S - static, r - rip, o - ospf, b - bgp, 
U - unreachable 
 #      DST-ADDRESS             GATEWAY                  DISTANCE
 0 A S  ::/0                    fe80::f6ca:e5ff:fe5b:...        1
 1 ADC  2a01:e35:zzz:f660::/64  ether1-gateway                  0
 2 ADC  2a01:e35:zzz:f661::/64  vlan10                          0
 3 ADo  2a01:e35:zzz:f663::/64  fe80::20d:93ff:fe62:b...      110
 4 ADo  2a01:e35:zzz:f664::/64  fe80::20d:93ff:fe62:b...      110
 6 ADC  2a01:e35:zzz:f666::/64  wlan2                           0

ripng

Les machines de virtualisation annoncent leur /96 par ripng. Exemple d'un netbsd:

$ grep route6d /etc/rc.conf
route6d=YES
route6d_flags="-n -N lo0,alc0 -O 2a01:e35:zzz:f665:40:15::/96,tap6"

Le mac mini écoute les annonces ripng en provenance de vlan640:

$ grep route6d /etc/rc.conf.local
route6d=YES
route6d_flags="-N gem0,vlan630"

Reste à annoncer en ospf le réseau 2a01:e35:zzz:f665::/64:

$ cat /etc/ospf6.conf
redistribute connected
redistribute 2a01:e35:zzz:f665::/64

area 0.0.0.0 {
        interface gem0 {
        }
}

Extrait du pf.conf pour laisser passer toutes ces annonces:

# ospf
pass in quick on egress proto ospf
# routed
pass in quick on vlan inet6 proto udp to port 521

Trop beau pour être vrai

Seul petit point noir: route6d d'OpenBSD n'est pas fonctionnel (version 5.8 comprise). Mais c'est sans compter avec jca@ qui a magistralement corrigé le problème:

http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/usr.sbin/route6d/route6d.c.diff?r1=1.67&r2=1.68

Un grand merci à lui.

Et en vrai ça marche ?

Côté mikrotik:

Flags: X - disabled, A - active, D - dynamic, C - connect, S - static, r - rip, o - ospf, b - bgp, 
U - unreachable 
 #      DST-ADDRESS              GATEWAY                  DISTANCE
 0 A S  ::/0                     fe80::f6ca:e5ff:fe5b:...        1
 1 ADC  2a01:e35:zzz:f660::/64  ether1-gateway                  0
 2 ADC  2a01:e35:zzz:f661::/64  vlan10                          0
 3 ADo  2a01:e35:zzz:f663::/64  fe80::20d:93ff:fe62:b...      110
 4 ADo  2a01:e35:zzz:f664::/64  fe80::20d:93ff:fe62:b...      110
 5 ADo  2a01:e35:zzz:f665:40... fe80::20d:93ff:fe62:b...      110
 6 ADC  2a01:e35:zzz:f666::/64  wlan2                           0

Depuis une machine extérieure:

dsx@blade>ping6 -c 3 2a01:e35:zzz:f664:40:15:0:1
PING6(56=40+8+8 bytes) 2a02:27d0:0:dead:beef::205 --> 2a01:e35:zzz:f664:40:15:0:1
16 bytes from 2a01:e35:zzz:f664:40:15:0:1, icmp_seq=0 hlim=53 time=24.744 ms
16 bytes from 2a01:e35:zzz:f664:40:15:0:1, icmp_seq=1 hlim=53 time=24.181 ms
16 bytes from 2a01:e35:zzz:f664:40:15:0:1, icmp_seq=2 hlim=53 time=24.472 ms

--- 2a01:e35:zzz:f664:40:15:0:1 ping6 statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/std-dev = 24.181/24.466/24.744/0.230 ms

Alors, c'est pas fun l'ipv6 ?


Lien vers ce billet

14/09/2013

[ mikrotik ipv6 ]

201309141045 mikrotik ipv6

Mikrotik RB951G-2HnD et l'ipv6 de chez Free

Mon nouveau routeur est un mikrotik routerboard RB951G-2HnD. Je dois dire que j'en suis pleinement satisfait:

Mon FAI (celui qui a tout compris) n'avait pas très bien compris les règles d'attribution d'adresses ipv6 et m'accordait généreusement un unique /64. De son côté Hurricane Electric propose un /48 par tunnel, ce qui contre-balance l'inconvénient d'une connectivité ipv6 au travers de paquets ipv4.

Mon FAI a revu (légèrement) sa copie et accorde désormais un /61, ce qui correspond à 8 sous réseaux:

A la lecture de ce post, j'en retiens qu'il faut absolument connaitre l'adresse lien local de la box. Pour se faire, une fois activé l'option 'IPv6' depuis mon interface de gestion, j'ai simplement branché mon vénérable netbook et son OpenBSD 5.4 et un sudo tcpdump -n -i re0 icmp6 plus tard, je pouvais commencer la configuration de mon routeur (bien qu'un /tool sniffer quick interface=ether1-gateway ip-protocol=icmpv6 aurait sans doute été plus simple, mais j'ai découvert cette fonctionnalité trop tard, tout comme /ipv6 neighbor print).

Le routeur est configuré comme suit:

/ipv6 address add interface=ether1-gateway address=2a01:xxxx:yyyy:zzz0::2/64
/ipv6 address add interface=wlan1 address=2a01:xxxx:yyyy:zzz2::1/64 advertise=yes
/ipv6 route add dst-address=::/0 gateway=adresse_lien_local_de_la_box%ether1-gateway

Attention à la syntaxe: adresse lien local suivi du caractère '%' suivi du nom de l'interface. Pour mémoire, l'adresse 2a01:xxxx:yyyy:zzz0::1/64 est utilisée par la box. Pour une raison que je ne m'explique pas je peux pinguer cette adresse uniquement depuis l'extérieur (pratique lors des tests).

Pour finir, les points forts et faibles de FAI versus Hurricane Electric:

FAI bien:

FAI pas bien:

Hurricane Electric bien :

Hurricane Electric pas bien:

Ma conclusion personnelle: Hurricane Electric oeuvre à la promotion de l'ipv6 et mérite tout mon respect. Mais une solution à base de tunnel n'est qu'un pis-aller en attendant de pouvoir bénéficer d'une connectivité native. Si mon FAI me donne l'impression de balbutier la fourniture d'un accès ipv6 grand public (6to4rd puis /61 natif, toujours pas de délégation de préfixe) je ne lui en veut pas: proposer de l'ipv6 est louable et quant bien même la réalisation laisse à désirer, elle mérite d'être encouragée.

Ps: M. Niel, serait-il possible pour ce noel 2014 d'avoir une délégation de préfixe et au moins un /56 (quitte à ce que vous vous réserviez plusieurs /64 pour le bon fonctionnement de vos box) ?


Lien vers ce billet

31/03/2013

[ arpaname reverse ipv6 ]

201303311315 arpaname reverse ipv6

arpaname et la résolution de nom inverse

C'est à la lecture d'un article de sieur iMil 'master prosel NetBSD' himself, paru dans le Gnu Linux Magazine France n° 159 que j'ai découvert la commande arpaname. Faisant partie du projet Bind, livrée de base avec FreeBSD et NetBSD (les utilisateurs d'OpenBSD peuvent installer net/isc-bind), cette commande traduit une adresse ip en version arpa:

$ dig ipv6.l.google.com AAAA +short
2a00:1450:4007:804::1011
$ arpaname 2a00:1450:4007:804::1011
1.1.0.1.0.0.0.0.0.0.0.0.0.0.0.0.4.0.8.0.7.0.0.4.0.5.4.1.0.0.A.2.IP6.ARPA

Mais dites donc, ça ne ressemblerait pas aux enregistrements PTR des fichiers de résolution de nom inverse ipv6 ? Vous savez, les trucs super chiants où au mieux on oublie un zéro et au pire on le place mal ? Je ne sais pas si des outils existent pour faciliter la création de ces fichiers et je n'ai pas beaucoup cherché, je l'avoue :). Aussi je me suis fendu d'un petit script sans prétention que je vous livre :

 1	#!/bin/sh
 2	
 3	DEFAULT_DOMAIN=example.com
 4	LOWER=0
 5	NETMASK="/48"
 6	VERBOSE=0
 7	
 8	DEFAULT_HOSTS="www mail imap"
 9	SCRITP_NAME=$(basename $0)
10	
11	usage() {
12		echo "Usage: ${SCRITP_NAME} [-d domain.tld] [-l] [-n (/48 | /64)] [-v] [host | host.domain.tld ...] 
13	-d domain.tld   add domain.tld if needed
14	-l              lower form
15	-n /netmask     netmask (default /48)
16	-v              verbose mode
17	"
18	}
19	
20	ARPANAME=$(/usr/bin/which arpaname)
21	if [ $? -ne 0 ]; then
22		echo "Can't find arpaname"
23		exit 1
24	fi
25	
26	args=$(getopt d:ln:hv $*)
27	if [ $? -ne 0 ]; then
28		usage
29		exit 2
30	fi
31	
32	set -- $args
33	while [ $# -ge 0 ]; do
34		case "$1" in
35		-d)
36			DEFAULT_DOMAIN="$2"; shift; shift;;
37		-l)
38			LOWER=1; shift;;
39		-n)
40			NETMASK="$2"; shift; shift;;
41		-h)
42			usage; exit;;
43		-v)
44			VERBOSE=1; shift;;
45		--)
46			shift; break;;
47		esac
48	done
49	
50	LEN=
51	case "${NETMASK}" in
52	*48)
53		LEN=39; break;;
54	*64)
55		LEN=29; break;;
56	*)
57		echo "'${NETMASK}': invalid value"; usage; exit 1;;
58	esac
59	
60	for host in ${DEFAULT_HOSTS} $@; do
61	
62		case ${host} in
63		*.*.*) ;;
64		*)
65			host="${host}.${DEFAULT_DOMAIN}";;
66		esac
67	
68		IPV6=$(dig ${host} AAAA +short)
69		if [ "X${IPV6}" = "X" ]; then
70			echo ";Can't resolv '${host}'"
71			continue
72		fi
73	
74		if [ $VERBOSE -eq 1 ]; then
75			echo ";${host} ${IPV6}"
76		fi
77		IPV6=$(${ARPANAME} ${IPV6} | cut -c 1-${LEN})
78		if [ $LOWER -eq 1 ]; then
79			IPV6=$(echo ${IPV6} | tr '[A-Z]' '[a-z]')
80		fi
81		printf "%s\tIN\tPTR\t%s.\n\n" ${IPV6} ${host}
82	
83	done

Pour utiliser ce script, il faut:

Un exemple pour la route:

$ ./reverse_ipv6.sh -d google.com -n /64 ipv6.l
1.1.0.1.0.0.0.0.0.0.0.0.0.0.0   IN      PTR     ipv6.l.google.com.

$ .reverse_ipv6.sh -d google.com -n /48 -v ipv6.l blog.bsdsx.fr
;ipv6.l.google.com 2a00:1450:4007:803::1011
1.1.0.1.0.0.0.0.0.0.0.0.0.0.0.0.3.0.8.0 IN      PTR     ipv6.l.google.com.

;blog.bsdsx.fr 2a02:27d0:100:f205:a642::80
0.8.0.0.0.0.0.0.0.0.0.0.2.4.6.A.5.0.2.F IN      PTR     blog.bsdsx.fr.

Si vous avez des enregistrements AAAA dans vos fichiers de zone, plus d'excuse pour ne pas faire le reverse :)


Lien vers ce billet

20/04/2010

[ openwrt xen route ipv6 ]

201004202206 openwrt xen route ipv6

OpenWRT, Xen et ipv6

Dans un précédent billet, je décrivais ma configuration xen. Il ne me manquait qu'une seule chose: l'ipv6. Je dois bien avouer que ça ne s'est pas fait en un jour.

J'ai commencé par configurer mon routeur:

root@fonera# route -A inet6 add 2001:470:ca75:100::/64 gw 2001:470:ca75:20:224:1ff:fe0f:f84c

2001:470:ca75:100::/64 est le réseau dédié aux hosts xen et 2001:470:ca75:20:224:1ff:fe0f:f84c l'ipv6 du dongle wifi du portable. Qui dit routage dit forwarding:

root@d531# grep forwarding= /etc/sysctl.conf
net.ipv6.conf.all.forwarding=1

Et pour éviter un message désagréable au boot:

root@d531# echo 'ipv6' >> /etc/modules

J'ai cru avoir une bonne idée en utilisant eth0 (qui me sert très peu) mais c'est vraiment une très mauvaise idée:

root@d531# tail -n 8 /etc/network/interfaces
auto eth0
iface eth0 inet static
    address 192.168.1.116
    netmask 255.255.255.0
iface eth0 inet6 static
    address 2001:470:ca75:100::1
    netmask 64

root@d531# ifconfig eth0 | grep inet6
      adr inet6: 2001:470:ca75:100::1/64 Scope:Global

root@d531# ping6 -c 1 -W 1 2001:470:ca75:100::1
PING 2001:470:ca75:100::1(2001:470:ca75:100::1) 56 data bytes

--- 2001:470:ca75:100::1 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms

L'absence d'adresse lien-local ne doit pas être innocente dans cette affaire. Une (lllooonnnggggguuuuueeee) série de ping, reboot, man, google, ifup/ifdown plus tard, une idée me traverse la tête: pourquoi ne pas utiliser une interface virtuelle ?

root@d531# tail -n 8 /etc/network/interfaces
auto dummy0
iface dummy0 inet static
  address 10.0.0.1
  netmask 255.255.255.0
iface dummy0 inet6 static
  address 2001:470:ca75:100::1
  netmask 64

root@d531# ifconfig dummy0 | grep inet6
      adr inet6: 2001:470:ca75:100::1/64 Scope:Global
      adr inet6: fe80::9082:a4ff:fe06:92bc/64 Scope:Lien

root@d531# ping6 -c 1 -W 1 2001:470:ca75:100::1
PING 2001:470:ca75:100::1(2001:470:ca75:100::1) 56 data bytes
64 bytes from 2001:470:ca75:100::1: icmp_seq=1 ttl=64 time=0.030 ms

--- 2001:470:ca75:100::1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.030/0.030/0.030/0.000 ms

root@linuto# ping6 -n -c 1 2001:470:ca75:100::1
PING6(56=40+8+8 bytes) 2001:470:ca75:10:214:bff:fe80:337b --> 2001:470:ca75:100::1
16 bytes from 2001:470:ca75:100::1, icmp_seq=0 hlim=63 time=7.855 ms

--- 2001:470:ca75:100::1 ping6 statistics ---
1 packets transmitted, 1 packets received, 0.0% packet loss
round-trip min/avg/max/std-dev = 7.855/7.855/7.855/nan ms

It works! Passons à la configuration de xen. Le script vif-route ne prend pas en compte l'ipv6. Heureusement, je ne suis pas seul: http://notes.benv.junerules.com/all/software/xen-and-routed-ipv6.

J'en profite pour proposer une version perless ici. On précise à xen qu'on utilise une autre interface qu'eth0:

root@d531# grep '\-route' /etc/xen/xend-config.sxp
(network-script 'network-route netdev=dummy0')
(vif-script     'vif-route netdev=dummy0')

Un dernier reboot pour vérifier que le tout survit à un redémarrage et c'est parti:

root@d531# grep vif /etc/xen/openwrt.bsdsx.fr.cfg 
vif         = [ 'ip=10.0.0.33 2001:470:ca75:100::33,mac=00:16:3E:6D:BB:94' ]

root@d531# xm create -c openwrt.bsdsx.fr.cfg
[ snip boot ]
root@OpenWrt:/# ifconfig br-lan|grep inet6
      inet6 addr: 2001:470:ca75:100::33/64 Scope:Global
      inet6 addr: fe80::ac65:afff:fed8:dcc4/64 Scope:Link

Et ça marche ?

root@linutop# traceroute6 -n  2001:470:ca75:100::33
traceroute6 to 2001:470:ca75:100::33 (2001:470:ca75:100::33) from 2001:470:ca75:10:214:bff:fe80:337b, 64 hops max, 12 byte packets
 1  2001:470:ca75:10::1  1.761 ms  1.73 ms  1.324 ms
 2  2001:470:ca75:20:224:1ff:fe0f:f84c  4.317 ms  9.467 ms  10.127 ms
 3  *^C

Hum, pas trop. Un coup de tcpdump plus tard et je me rends compte qu'il manque une route par défaut sur l'invité:

root@OpenWrt:/# ip -6 ro add default via 2001:470:ca75:100::1
root@OpenWrt:/# ping6 -c 1 www.kame.net
PING www.kame.net (2001:200:0:8002:203:47ff:fea5:3085): 56 data bytes
64 bytes from 2001:200:0:8002:203:47ff:fea5:3085: seq=0 ttl=52 time=314.763 ms

--- www.kame.net ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 314.763/314.763/314.763 ms

Un dernier tour sur http://wiki.openwrt.org/doc/uci/network pour enregistrer la route:

root@OpenWrt:/# tail -n 4 /etc/config/network 
config 'route6'
    option 'interface' 'lan'
    option 'target' 'default'
    option 'gateway' '2001:470:ca75:100::1'

Et voilà, c'est bon, servez chaud. Bon appétit.


Lien vers ce billet

27/06/2009

[ jail ipv6 ]

200906271840 jail ipv6

Jail et ipv6

Depuis FreeBSD 7.2, les jails peuvent avoir aucune, une ou des adresses ipv4 et/ou ipv6. Si l'utilisation d'une jail sans ip peut s'apparenter à un chroot, que faire de plusieurs ipv4/ipv6 ? Allons faire un tour au pays des jails.

/etc/rc.conf mono ip

jail_essai_rootdir=/zfs/jail/essai
jail_essai_hostname=essai.bsdsx.fr
jail_essai_ip=172.16.0.42
jail_essai_interface=lo1
jail_essai_devfs_enable="YES"
jail_essai_devfs_ruleset="devfsrules_jail"

Pour une jail à l'ancienne, il nous faut:

La configuration des services tournant dans cette jail est assez simple: tous les démons doivent écouter 172.16.0.42 (sshd -> ListenAddress, lighttpd -> server.bind, nginx -> listen ...)

/etc/rc.conf v4 + v6

jail_essai_rootdir=/zfs/jail/essai
jail_essai_hostname=essai.bsdsx.fr
jail_essai_devfs_enable="YES"
jail_essai_devfs_ruleset="devfsrules_jail"
jail_essai_ip="lo1|172.16.0.42,vr0|2001:41d0:1:34b6::42"

La syntaxe de l'option 'ip' a évolué. On peut désormais préciser l'interface d'une adresse ip. Ici, lo1 est notre interface privée et vr0 l'interface ipv6 publique.

# ifconfig
vr0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=2808<VLAN_MTU,WOL_UCAST,WOL_MAGIC>
        ether 00:15:f2:5d:cc:a0
        inet6 2001:41d0:1:34b6::17 prefixlen 128 
        media: Ethernet autoselect (100baseTX <full-duplex>)
        status: active
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
lo1: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
        inet 172.16.0.17 netmask 0xffffffff 
pflog0: flags=141<UP,RUNNING,PROMISC> metric 0 mtu 33160

On remarquera l'apparition d'un lo0 (son absence dans les anciennes jails pouvait géner certains services). Les démons peuvent écouter sur toutes les interfaces, sans configuration particulière:

# grep ListenAddress /etc/ssh/sshd_config 
#ListenAddress 0.0.0.0
#ListenAddress ::
# netstat -an -f inet
netstat: kvm not available: /dev/mem: No such file or directory
Active Internet connections (including servers)
Proto Recv-Q Send-Q  Local Address          Foreign Address        (state)
tcp4       0      0 172.16.0.42.22         *.*                    LISTEN
# netstat -an -f inet6
netstat: kvm not available: /dev/mem: No such file or directory
Active Internet connections (including servers)
Proto Recv-Q Send-Q  Local Address          Foreign Address        (state)
tcp6       0     48 2001:41d0:1:34b6.22    2a01:e35:2ee9:f6.35888 ESTABLISHED
tcp6       0      0 2001:41d0:1:34b6.22    *.*                    LISTEN

/etc/rc.conf v4 + multi v6

jail_essai_ip_multi0="vr0|2001:41d0:1:34b6::43"
jail_essai_ip_multi1="vr0|2001:41d0:1:34b6::44"

Simple non ? Attention à ne pas faire de trou dans la numérotation des multi car sinon le script /etc/rc.d/jail ne les prendra pas en compte.

# ifconfig
vr0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=2808<VLAN_MTU,WOL_UCAST,WOL_MAGIC>
        ether 00:15:f2:5d:cc:a0
        inet6 2001:41d0:1:34b6::42 prefixlen 128
        inet6 2001:41d0:1:34b6::43 prefixlen 128
        inet6 2001:41d0:1:34b6::44 prefixlen 128
        media: Ethernet autoselect (100baseTX <full-duplex>)
        status: active
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
lo1: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
        inet 172.16.0.17 netmask 0xffffffff
pflog0: flags=141<UP,RUNNING,PROMISC> metric 0 mtu 33160

Utilisation

L'accès aux services des anciennes jails se faisait en ipv4 uniquement. A nous les joies des redirections/translations (mais pf est notre ami :)

nat on $ext_if from !($ext_if) -> ($ext_if:0)
rdr pass on $ext_if proto tcp from <ssh_ok> to port 65080 -> 172.16.0.1 port ssh
rdr pass on $ext_if proto tcp from <ssh_ok> to port 65081 -> 172.16.0.41 port ssh

Mais maintenant que nos jails sont ipv6 ready:

pass quick on $ext_if inet6 proto tcp from <ssh6_ok> to any port ssh

hostname et jail

Petite précision: le nom d'une jail peut contenir un underscore mais pas de tiret. Un nom d'hôte ne peut pas contenir d'underscore.

Et maintenant

Il ne me reste plus qu'à:

En effet, avec toutes ces adresses disponibles, on peut vraiment affecter une ipv6 à un service et/ou un domaine virtuel (virtual host, ssl, wildcard, toussa... :)


Lien vers ce billet

14/11/2008

[ ntp ipv6 ntp.org ]

200811140800 ntp ipv6 ntp.org

NTP et IPV6

6tuation

Je faisais mumuse avec de l'ipv6 sur une Fonera 2200 / OpenWRT lorsque le besoin s'est fait sentir d'un serveur de temps ipv6 ready. Mon ami google m'a fait (justement) connaitre http://www.pouf.org/categories/3-IPv6 et plus précisément http://www.pouf.org/archives/95-Public-IPv6-NTP-Server.html.

J'ai donc décidé de monter mon(es) serveur(s) de temps.

6tèmes

Kimsufi / FreeBSD 7.0

Rien de particulier, le système de base comprenant un ntpd:

kimsufi# grep ntpd /etc/rc.conf 
ntpd_enable="YES"
ntpd_sync_on_start="YES"
ntpd_flags="-L -p /var/run/ntpd.pid -f /var/db/ntpd.drift"

kimsufi# cat /etc/ntp.conf 
server ntp.ovh.net
server ntp.via.ecp.fr
server 0.fr.pool.ntp.org
server 2.fr.pool.ntp.fr
driftfile /var/db/ntp.drift

ntp.ovh.net est un serveur de niveau 1 (GPS).

Extrait du pf.conf:

kimsufi# grep ntp /etc/pf.conf 
pass quick on $ext_if inet  proto { udp,tcp } from any to any port ntp
pass quick on $ext_if inet6 proto { udp,tcp } from any to any port ntp

Une fois le dns correctement renseigné on peut ajouter notre serveur à pool.ntp.org. La procédure se résume à la création d'un compte et un formulaire vous permet d'ajouter votre(vos) serveur(s) au pool (vérifiez votre pf.conf avant, vous gagnerez du temps :)

Fonera 2200 / OpenWRT (snapshot du 20081104)

Connectivité ipv6:

# opkg install kmod-ipv6
# opkg install ip6tables
# opkg install kmod-ip6tables
# opkg install ip

Dans le but d'avoir une machine ipv6 only, je remplace dropbear par openssh. Cette manipulation ne peut se faire qu'avec une console série:

# opkg install openssh-client
# opkg install openssh-server

Serveur ntp:

# opkg install openntpd
# cat /etc/ntp.conf
server ntp6.bsdsx.fr
server ntp6.space.net
server ntp.via.ecp.fr
server ntp2.cines.fr

C'est parti:

# /etc/init.d/ntp start

ip6tables

En simplifiant, ipv6 affecte au moins deux adresses ip à chaque interface: une limitée au réseau local (fe80.....) et une autre publique, routable et accessible depuis n'importe où.

Il faut donc filtrer les accès aux machines ipv6:

# cat /etc/init.d/firewall6
#!/bin/sh /etc/rc.common
# Copyright (C) 2008 OpenWrt.org

START=46

PRIVATE=fe80::aaaa:bbbb:cccc:dddd

start() {
# raz des regles
ip6tables -F
ip6tables -X

# on DROP tout le traffic entrant
ip6tables -P INPUT DROP

# pas de filtre sur l'interface lo
ip6tables -A INPUT -i lo -j ACCEPT

# pas de filtre sur l'adresse lien-local
ip6tables -A INPUT -d $PRIVATE -j ACCEPT

# on laisse entrer icmpv6
ip6tables -A INPUT -p icmpv6 -j ACCEPT

# les reponses NTP
ip6tables -A INPUT -p udp --sport ntp -j ACCEPT

}

stop() {
ip6tables -F
ip6tables -X
ip6tables -P INPUT ACCEPT
}

Les puristes d'ip[6]tables me pardonneront (je l'espère :) ce script un peu trop simpliste. La Fonera est désormais accessible uniquement sur son adresse privée. Si on tente, depuis une machine située sur le même lien:

# ping6 -c 1 fe80::aaaa:bbbb:cccc:dddd
PING6(56=40+8+8 bytes) fe80::1%lo0 --> fe80::aaaa:bbbb:cccc:dddd
ping6: sendmsg: Network is unreachable
ping6: wrote fe80::aaaa:bbbb:cccc:dddd 16 chars, ret=-1
^C
--- fe80::aaaa:bbbb:cccc:dddd ping6 statistics ---
1 packets transmitted, 0 packets received, 100.0% packet loss

Et là, c'est le drame. Notre ami google nous apprend rapidementt qu'avec ipv6, en cas d'utilisation d'adresse locale il faut préciser l'interface de sortie:

# ping6 -c 1 fe80::aaaa:bbbb:cccc:dddd%ne3
PING6(56=40+8+8 bytes) fe80::wwww:xxxx:yyyy:zzzz%ne3 --> fe80::aaaa:bbbb:cccc:dddd%ne3
16 bytes from fe80::aaaa:bbbb:cccc:dddd%ne3, icmp_seq=0 hlim=64 time=1.566 ms

--- fe80::aaaa:bbbb:cccc:dddd%ne3 ping6 statistics ---
1 packets transmitted, 1 packets received, 0.0% packet loss
round-trip min/avg/max/std-dev = 1.566/1.566/1.566/NaN ms

Reste à vérifier notre serveur ntp:

# /etc/init.d/ntp stop
# ntpd -d
reply from 2001:41d0:1:34b6::1: offset -0.011423 delay 0.082885, next query 9s
reply from 2001:660:6301:f13::2:1: offset -0.005595 delay 0.092083, next query 7s
reply from 2002:8ac3:802d:1243::71: offset -0.014533 delay 0.096260, next query 5s
reply from 2001:608::1000:1: offset 0.001858 delay 0.100866, next query 5s
reply from 2002:8ac3:802d:1243::71: offset -0.010519 delay 0.086758, next query 8s
reply from 2001:608::1000:1: offset -0.199183 delay 0.498697, next query 6s
reply from 2001:660:6301:f13::2:1: offset 0.003043 delay 0.070645, next query 6s

Mer6

Possédant plusieurs Fonera, j'ai décidé d'utiliser ces mini routeurs wifi pour découvrir ipv6. Cette démarche a été riche d'enseignements:

A venir:

Merci à toute l'équipe d'OpenWRT pour leur fantastique travail et à www.pouf.org qui m'a incité à rejoindre ntp.org.


Lien vers ce billet