Tags

arm bin_sh blocage blosxom bsd bsdfrance cblog certification chroot cluster dg834 dhcp dns dnsmasq dovecot fail-over fail2ban firefox freebsd ftp git guruplug install ipv6 jail kernel kimsufi lex libre linutop makefile ml150 mohawk netbook netbsd nginx ntp ntp.org openbsd openntpd openrd openwrt pkgng poudriere proxy python reverse rmll route rrdcgi sendmail sieve sl2009 ssd symon update usb var_empty vimperator world xen yacc zfs

Powered by

blOg
maRdown
awK
shEll

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 metric 0 mtu 1500
        options=2808
        ether 00:15:f2:5d:cc:a0
        inet6 2001:41d0:1:34b6::17 prefixlen 128 
        media: Ethernet autoselect (100baseTX )
        status: active
lo0: flags=8049 metric 0 mtu 16384
lo1: flags=8049 metric 0 mtu 16384
        inet 172.16.0.17 netmask 0xffffffff 
pflog0: flags=141 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 metric 0 mtu 1500
        options=2808
        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 )
        status: active
lo0: flags=8049 metric 0 mtu 16384
lo1: flags=8049 metric 0 mtu 16384
        inet 172.16.0.17 netmask 0xffffffff
pflog0: flags=141 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