Jail, VNET and IPv6

Jacques Foucry jacques+freebsd at foucry.net
Thu Dec 10 09:30:29 UTC 2020


Hello folks,

I manage on a hosted server many « clasical » jail with ip adresses as alias of
em0.

I would like to make a new jail, but using VNET and ipv6. All my tries failed
:-( IPv4 work great but IPv6 not.

em0:

ptions=810099<RXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,VLAN_HWFILTER>
	ether b4:2e:99:6a:80:9d
	inet6 2a01:4f9:4a:1fd8::2 prefixlen 64
	inet6 fe80::b62e:99ff:fe6a:809d%em0 prefixlen 64 scopeid 0x1
	inet6 2a01:4f9:4a:1fd8::16 prefixlen 64
	inet6 2a01:4f9:4a:1fd8::21 prefixlen 64
	inet6 2a01:4f9:4a:1fd8::12 prefixlen 64
	inet6 2a01:4f9:4a:1fd8::29 prefixlen 64
	inet6 2a01:4f9:4a:1fd8::15 prefixlen 64
	inet6 2a01:4f9:4a:1fd8::11 prefixlen 64
	inet6 2a01:4f9:4a:1fd8::22 prefixlen 64
	inet6 2a01:4f9:4a:1fd8::17 prefixlen 64
	inet6 2a01:4f9:4a:1fd8::28 prefixlen 64
	inet6 2a01:4f9:4a:1fd8::18 prefixlen 64
	inet6 2a01:4f9:4a:1fd8::19 prefixlen 64
	inet6 2a01:4f9:4a:1fd8::25 prefixlen 64
	inet6 2a01:4f9:4a:1fd8::5 prefixlen 64
	inet6 2a01:4f9:4a:1fd8::14 prefixlen 64
	inet 95.217.83.231 netmask 0xffffffc0 broadcast 95.217.83.255
	media: Ethernet autoselect (1000baseT <full-duplex>)
	status: active
	nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>


netstat -rn
Routing tables

Internet:
Destination        Gateway            Flags     Netif Expire
default            95.217.83.193      UGS         em0
10.0.0.0/24        link#5             U       bridge0
10.0.0.1           link#5             UHS         lo0
95.217.83.192/26   link#1             U           em0
95.217.83.231      link#1             UHS         lo0
127.0.0.1          link#2             UH          lo0
127.0.1.5          link#2             UH          lo0
127.0.1.11         link#2             UH          lo0
127.0.1.12         link#2             UH          lo0
127.0.1.14         link#2             UH          lo0
127.0.1.15         link#2             UH          lo0
127.0.1.16         link#2             UH          lo0
127.0.1.17         link#2             UH          lo0
127.0.1.18         link#2             UH          lo0
127.0.1.19         link#2             UH          lo0
127.0.1.21         link#2             UH          lo0
127.0.1.22         link#2             UH          lo0
127.0.1.25         link#2             UH          lo0
127.0.1.28         link#2             UH          lo0
127.0.1.29         link#2             UH          lo0
127.0.12.1         link#2             UH          lo0
192.168.12.1       link#4             UH          lo1
192.168.12.5       link#4             UH          lo1
192.168.12.11      link#4             UH          lo1
192.168.12.12      link#4             UH          lo1
192.168.12.14      link#4             UH          lo1
192.168.12.15      link#4             UH          lo1
192.168.12.16      link#4             UH          lo1
192.168.12.17      link#4             UH          lo1
192.168.12.18      link#4             UH          lo1
192.168.12.19      link#4             UH          lo1
192.168.12.21      link#4             UH          lo1
192.168.12.22      link#4             UH          lo1
192.168.12.25      link#4             UH          lo1
192.168.12.28      link#4             UH          lo1
192.168.12.29      link#4             UH          lo1

Internet6:
Destination                       Gateway                       Flags     Netif Expire
::/96                             ::1                           UGRS        lo0
default                           fe80::1%em0                   UGS         em0
::1                               link#2                        UH          lo0
::ffff:0.0.0.0/96                 ::1                           UGRS        lo0
2a01:4f9:4a:1fd8::/64             link#1                        U           em0
2a01:4f9:4a:1fd8::2               link#1                        UHS         lo0
2a01:4f9:4a:1fd8::5               link#1                        UHS         lo0
2a01:4f9:4a:1fd8::11              link#1                        UHS         lo0
2a01:4f9:4a:1fd8::12              link#1                        UHS         lo0
2a01:4f9:4a:1fd8::14              link#1                        UHS         lo0
2a01:4f9:4a:1fd8::15              link#1                        UHS         lo0
2a01:4f9:4a:1fd8::16              link#1                        UHS         lo0
2a01:4f9:4a:1fd8::17              link#1                        UHS         lo0
2a01:4f9:4a:1fd8::18              link#1                        UHS         lo0
2a01:4f9:4a:1fd8::19              link#1                        UHS         lo0
2a01:4f9:4a:1fd8::21              link#1                        UHS         lo0
2a01:4f9:4a:1fd8::22              link#1                        UHS         lo0
2a01:4f9:4a:1fd8::25              link#1                        UHS         lo0
2a01:4f9:4a:1fd8::28              link#1                        UHS         lo0
2a01:4f9:4a:1fd8::29              link#1                        UHS         lo0
fe80::/10                         ::1                           UGRS        lo0
fe80::%em0/64                     link#1                        U           em0
fe80::b62e:99ff:fe6a:809d%em0     link#1                        UHS         lo0
fe80::%lo0/64                     link#2                        U           lo0
fe80::1%lo0                       link#2                        UHS         lo0
ff02::/16                         ::1                           UGRS        lo0


ifconfig
em0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> metric 0 mtu 1500
	options=81009b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,VLAN_HWFILTER>
	ether b4:2e:99:6a:80:9d
	inet6 2a01:4f9:4a:1fd8::2 prefixlen 64
	inet6 fe80::b62e:99ff:fe6a:809d%em0 prefixlen 64 scopeid 0x1
	inet6 2a01:4f9:4a:1fd8::16 prefixlen 64
	inet6 2a01:4f9:4a:1fd8::21 prefixlen 64
	inet6 2a01:4f9:4a:1fd8::12 prefixlen 64
	inet6 2a01:4f9:4a:1fd8::29 prefixlen 64
	inet6 2a01:4f9:4a:1fd8::15 prefixlen 64
	inet6 2a01:4f9:4a:1fd8::11 prefixlen 64
	inet6 2a01:4f9:4a:1fd8::22 prefixlen 64
	inet6 2a01:4f9:4a:1fd8::17 prefixlen 64
	inet6 2a01:4f9:4a:1fd8::28 prefixlen 64
	inet6 2a01:4f9:4a:1fd8::18 prefixlen 64
	inet6 2a01:4f9:4a:1fd8::19 prefixlen 64
	inet6 2a01:4f9:4a:1fd8::25 prefixlen 64
	inet6 2a01:4f9:4a:1fd8::5 prefixlen 64
	inet6 2a01:4f9:4a:1fd8::14 prefixlen 64
	inet 95.217.83.231 netmask 0xffffffc0 broadcast 95.217.83.255
	media: Ethernet autoselect (1000baseT <full-duplex>)
	status: active
	nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
	options=680003<RXCSUM,TXCSUM,LINKSTATE,RXCSUM_IPV6,TXCSUM_IPV6>
	inet6 ::1 prefixlen 128
	inet6 fe80::1%lo0 prefixlen 64 scopeid 0x2
	inet 127.0.0.1 netmask 0xff000000
	inet 127.0.12.1 netmask 0xff000000
	inet 127.0.1.16 netmask 0xffffffff
	inet 127.0.1.21 netmask 0xffffffff
	inet 127.0.1.12 netmask 0xffffffff
	inet 127.0.1.29 netmask 0xffffffff
	inet 127.0.1.15 netmask 0xffffffff
	inet 127.0.1.11 netmask 0xffffffff
	inet 127.0.1.22 netmask 0xffffffff
	inet 127.0.1.17 netmask 0xffffffff
	inet 127.0.1.28 netmask 0xffffffff
	inet 127.0.1.18 netmask 0xffffffff
	inet 127.0.1.19 netmask 0xffffffff
	inet 127.0.1.25 netmask 0xffffffff
	inet 127.0.1.5 netmask 0xffffffff
	inet 127.0.1.14 netmask 0xffffffff
	groups: lo
	nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
pflog0: flags=0<> metric 0 mtu 33160
	groups: pflog
lo1: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
	options=680003<RXCSUM,TXCSUM,LINKSTATE,RXCSUM_IPV6,TXCSUM_IPV6>
	inet 192.168.12.1 netmask 0xffffff00
	inet 192.168.12.16 netmask 0xffffff00
	inet 192.168.12.21 netmask 0xffffff00
	inet 192.168.12.12 netmask 0xffffff00
	inet 192.168.12.29 netmask 0xffffff00
	inet 192.168.12.15 netmask 0xffffff00
	inet 192.168.12.11 netmask 0xffffff00
	inet 192.168.12.22 netmask 0xffffff00
	inet 192.168.12.17 netmask 0xffffff00
	inet 192.168.12.28 netmask 0xffffff00
	inet 192.168.12.18 netmask 0xffffff00
	inet 192.168.12.19 netmask 0xffffff00
	inet 192.168.12.25 netmask 0xffffff00
	inet 192.168.12.5 netmask 0xffffffff
	inet 192.168.12.14 netmask 0xffffff00
	groups: lo
	nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
bridge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
	description: vnet-jail-bridge
	ether 02:36:b3:c1:8a:00
	inet 10.0.0.1 netmask 0xffffff00 broadcast 10.0.0.255
	id 00:00:00:00:00:00 priority 32768 hellotime 2 fwddelay 15
	maxage 20 holdcnt 6 proto rstp maxaddr 2000 timeout 1200
	root id 00:00:00:00:00:00 priority 32768 ifcost 0 port 0
	member: em0 flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
	        ifmaxaddr 0 port 1 priority 128 path cost 20000
	groups: bridge
	nd6 options=1<PERFORMNUD>


As you can see thereis a bridge (bridg0) with an IPv4 10.0.0.1/24. PF assume
the nat fonction for this range to 10.0.010/24 the new jail IPv4.


/etc/jail.conf

jitsi{
   $id="10";
   $ipaddr="10.0.0.${id}";
   $mask="255.255.255.0";
   $gw="10.0.0.1";

   host.hostname="${name}.exemple.net";
   path="/jails/${name}";
   exec.clean;
   exec.consolelog  = "/var/log/consolelog$(name}.log";

   vnet             = "new";
   vnet.interface   = "epair${id}b";

   exec.prestart     = "ifconfig epair${id} create up";
   exec.prestart    += "ifconfig epair${id}a up descr vnet-${name}";
   exec.prestart    += "ifconfig bridge0 addm epair${id}a";

   exec.start       = "/bin/sh /etc/rc";
   exec.start       += "/sbin/ifconfig epair${id}b ${ipaddr} netmask ${mask} up";
   exec.start       += "/sbin/route add default ${gw}";
   exec.start       += "/sbin/ifconfig epair${id}b inet6 2a01:4f9:4a:1fd8::27";
   exec.start       += "route add -inet6 default 2a01:4f9:4a:1fd8::2";

   exec.stop         = "/bin/sh /etc/rc.shutdown";

   exec.poststop     = "ifconfig epair${id}b -vnet ${name}";
   exec.poststop    += "ifconfig bridge0 deletem epair${id}a";
   exec.poststop    += "sleep 2";
   exec.poststop    += "ifconfig epair${id}a destroy";

   allow.mount.fusefs=1;
   mount.fstab="/etc/fstab.${name}";
   devfs_ruleset="5";
   allow.raw_sockets;
   persist;
}

The jail statup seems to be ok:
# jail -cv jitsi
jitsi: run command as root: /sbin/mount -t nullfs -o rw,late /usr/local/etc/letsencrypt /jails/jitsi/usr/local/etc/letsencrypt
jitsi: run command as root: /sbin/mount -t nullfs -o rw,late /usr/local/www/certbot /jails/jitsi/usr/local/www/certbot
jitsi: run command as root: /sbin/mount -t devfs -oruleset=5 . /jails/jitsi/dev
jitsi: run command as root: ifconfig epair10 create up
epair10a
jitsi: run command as root: ifconfig epair10a up descr vnet-jitsi
jitsi: run command as root: ifconfig bridge0 addm epair10a
jitsi: jail_set(JAIL_CREATE) name=jitsi allow.mount=true allow.mount.devfs allow.mount.zfs=true devfs_ruleset=5 enforce_statfs=1 sysvshm=new host.hostname=jitsi.foucry.net path=/jails/jitsi vnet=new allow.mount.fusefs=true allow.raw_sockets persist
jitsi: created
jitsi: run command as root: /sbin/ifconfig epair10b vnet jitsi
jitsi: run command in jail as root: /bin/sh /etc/rc
jitsi: run command in jail as root: /sbin/ifconfig epair10b 10.0.0.10 netmask 255.255.255.0 up
jitsi: run command in jail as root: /sbin/route add default 10.0.0.1
jitsi: run command in jail as root: /sbin/ifconfig epair10b inet6 2a01:4f9:4a:1fd8::27
jitsi: run command in jail as root: route add -inet6 default 2a01:4f9:4a:1fd8::2

epair10a on the host:

epair10a: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> metric 0 mtu 1500
	description: vnet-jitsi
	options=8<VLAN_MTU>
	ether 02:dc:c8:b1:ac:0a
	inet6 fe80::dc:c8ff:feb1:ac0a%epair10a prefixlen 64 scopeid 0x6
	groups: epair
	media: Ethernet 10Gbase-T (10Gbase-T <full-duplex>)
	status: active
	nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>

Once connected to the jail (through ssh/IPv4), ifconfig looks ok:

ifconfig
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
	options=680003<RXCSUM,TXCSUM,LINKSTATE,RXCSUM_IPV6,TXCSUM_IPV6>
	inet6 ::1 prefixlen 128
	inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1
	inet 127.0.0.1 netmask 0xff000000
	groups: lo
	nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
pflog0: flags=0<> metric 0 mtu 33160
	groups: pflog
epair10b: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
	options=8<VLAN_MTU>
	ether 02:dc:c8:b1:ac:0b
	inet6 fe80::dc:c8ff:feb1:ac0b%epair10b prefixlen 64 scopeid 0x3
	inet6 2a01:4f9:4a:1fd8::27 prefixlen 64
	inet 10.0.0.10 netmask 0xffffff00 broadcast 10.0.0.255
	groups: epair
	media: Ethernet 10Gbase-T (10Gbase-T <full-duplex>)
	status: active
	nd6 options=8021<PERFORMNUD,AUTO_LINKLOCAL,DEFAULTIF>


But form my work machine to the jail the ping666666 does not work:

ping6 2a01:4f9:4a:1fd8::27   
PING6(56=40+8+8 bytes) 2a01:cb10:8e64:fe00:4aa4:72ff:fe9e:65a1 --> 2a01:4f9:4a:1fd8::27
^C
--- 2a01:4f9:4a:1fd8::27 ping6 statistics ---
3 packets transmitted, 0 packets received, 100.0% packet loss


Notice that a ping6 to another (old school jail) work perfectly:

ping6 2a01:4f9:4a:1fd8::25    
PING6(56=40+8+8 bytes) 2a01:cb10:8e64:fe00:4aa4:72ff:fe9e:65a1 --> 2a01:4f9:4a:1fd8::25
16 bytes from 2a01:4f9:4a:1fd8::25, icmp_seq=0 hlim=52 time=43.882 ms
16 bytes from 2a01:4f9:4a:1fd8::25, icmp_seq=1 hlim=52 time=43.731 ms
16 bytes from 2a01:4f9:4a:1fd8::25, icmp_seq=2 hlim=52 time=42.906 ms


I must miss something, or misunderstood something…

Any advices are welcome. 


Regards,
-- 
Jacques Foucry


More information about the freebsd-questions mailing list