Am un bloc de adrese IPv6 cu dimensiunea de prefix 64. Pe computerul meu gazdă care rulează FreeBSD 13-RELEASE am trei închisori:
jls
JID Adresa IP Calea numelui de gazdă
1 svcfw /usr/jail/svcfw
2 www /usr/jail/www
3 ifee /usr/jail/ifee
Adaptor de rețea gazdă conectat la Internet global:
ifconfig vtnet0
vtnet0: flags=8863<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metrica 0 mtu 1500
options=4804bb<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU,VLAN_HWCSUM,LRO,LINKSTATE,TXCSUM_IPV6>
eter 56:00:03:7a:2c:a1
inet 192.248.184.48 netmask 0xfffffe00 difuzare 192.248.185.255
inet6 fe80::5400:3ff:fe7a:2ca1%vtnet0 prefixlen 64 scopeid 0x1
inet6 2001:19f0:6c01:2033::2 prefixlen 65
media: selecție automată Ethernet (10Gbase-T <full-duplex>)
stare: activ
nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
Conținutul meu /etc/rc.conf
:
hostname="login"
clear_tmp_enable="DA"
syslogd_flags="-ss"
sendmail_enable="NIMIC"
static_routes="linklocal"
route_linklocal="-net 169.254.0.0/16 -interfață vtnet0"
ifconfig_vtnet0="inet 192.248.184.48 netmask 255.255.254.0"
defaultrouter="192.248.184.1"
ifconfig_vtnet0_ipv6="inet6 2001:19f0:6c01:2033::2 prefixlen 65"
ipv6_default_interface="vtnet0"
# XXX:
# - https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=233283#c4
# - https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=233283#c16
ipv6_defaultrouter="fe80::fc00:3ff:fe7a:2ca1%vtnet0"
cloned_interfaces="bridge0 epair0"
ifconfig_epair0a_ipv6="inet6 2001:19f0:6c01:2033:8000::1 prefixlen 65"
ifconfig_epair0a="inet 10.22.0.1 netmask 255.255.0.0"
# Rețea privată: net5ab50b04a6b66
ifconfig_vtnet1="inet 10.9.96.5 netmask 255.255.240.0 mtu 1450"
#pf_enable="DA"
#pf_rules="/etc/pf.conf"
#pflog_enable="DA"
#pflog_logfile="/var/log/pflog"
sshd_enable="DA"
dumpdev="NU"
zfs_enable="DA"
devmatch_blacklist="virtio_random.ko"
gateway_enable="DA"
ipv6_gateway_enable="DA"
wireguard_enable="DA"
wireguard_interfaces="wg0"
jail_enable="DA"
Rețeaua de la gazdă funcționează așa cum ar trebui:
aduceți -6 -o /dev/null http://example.com
/dev/null 1256 B 10 MBps 00s
ping6 -c 4 google.com
PING6(56=40+8+8 octeți) 2001:19f0:6c01:2033::2 --> 2a00:1450:4001:802::200e
16 octeți din 2a00:1450:4001:802::200e, icmp_seq=0 hlim=119 time=0,832 ms
16 octeți din 2a00:1450:4001:802::200e, icmp_seq=1 hlim=119 timp=0,793 ms
16 octeți din 2a00:1450:4001:802::200e, icmp_seq=2 hlim=119 time=0,867 ms
16 octeți din 2a00:1450:4001:802::200e, icmp_seq=3 hlim=119 time=0,827 ms
--- statistici ping6 google.com ---
4 pachete transmise, 4 pachete primite, 0,0% pierdere de pachete
dus-întors min/avg/max/std-dev = 0,793/0,830/0,867/0,026 ms
Adaptorul de rețea principal al primei închisori:
doas jexec svcfw ifconfig bridge0
bridge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metrica 0 mtu 1500
eter 58:9c:fc:10:e2:24
inet6 2001:19f0:6c01:2033:8000::2 prefixlen 65
inet 10.22.0.2 netmask 0xffff0000 difuzare 10.22.255.255
id 00:00:00:00:00:00 prioritate 32768 hellotime 2 fwddelay 15
maxage 20 holdcnt 6 proto rstp maxaddr 2000 timeout 1200
ID rădăcină 00:00:00:00:00:00 prioritate 32768 ifcost 0 portul 0
membru: epair2a flags=143<LEARNING, DISCOVER,AUTOEDGE,AUTOPTP>
ifmaxaddr 0 port 5 prioritate 128 calea cost 2000
membru: epair1a flags=143<LEARNING, DISCOVER,AUTOEDGE,AUTOPTP>
ifmaxaddr 0 port 4 prioritate 128 calea cost 2000
membru: epair0b flags=143<LEARNING, DISCOVER,AUTOEDGE,AUTOPTP>
ifmaxaddr 0 port 3 prioritate 128 calea cost 2000
grupe: pod
nd6 options=8001<PERFORMNUD,DEFAULTIF>
Ping închisoarea de la gazdă funcționează așa cum ar trebui:
ping6 -c 4 2001:19f0:6c01:2033:8000::2
PING6(56=40+8+8 octeți) 2001:19f0:6c01:2033:8000::1 --> 2001:19f0:6c01:2033:8000::2
16 octeți din 2001:19f0:6c01:2033:8000::2, icmp_seq=0 hlim=64 time=0,077 ms
16 octeți din 2001:19f0:6c01:2033:8000::2, icmp_seq=1 hlim=64 time=0,062 ms
16 octeți din 2001:19f0:6c01:2033:8000::2, icmp_seq=2 hlim=64 time=0,080 ms
16 octeți din 2001:19f0:6c01:2033:8000::2, icmp_seq=3 hlim=64 time=0,062 ms
--- 2001:19f0:6c01:2033:8000::2 ping6 statistici ---
4 pachete transmise, 4 pachete primite, 0,0% pierdere de pachete
dus-întors min/avg/max/std-dev = 0,062/0,070/0,080/0,008 ms
Ping gazda din închisoare funcționează și așa cum ar trebui:
doas jexec svcfw ping6 -c 4 2001:19f0:6c01:2033:8000::1
PING6(56=40+8+8 octeți) 2001:19f0:6c01:2033:8000::2 --> 2001:19f0:6c01:2033:8000::1
16 octeți din 2001:19f0:6c01:2033:8000::1, icmp_seq=0 hlim=64 time=0,068 ms
16 octeți din 2001:19f0:6c01:2033:8000::1, icmp_seq=1 hlim=64 time=0,064 ms
16 octeți din 2001:19f0:6c01:2033:8000::1, icmp_seq=2 hlim=64 time=0,059 ms
16 octeți din 2001:19f0:6c01:2033:8000::1, icmp_seq=3 hlim=64 time=0,060 ms
--- 2001:19f0:6c01:2033:8000::1 statistici ping6 ---
4 pachete transmise, 4 pachete primite, 0,0% pierdere de pachete
dus-întors min/avg/max/std-dev = 0,059/0,063/0,068/0,004 ms
Configurația perechii pe partea gazdă conectată la pod:
ifconfig epair0a
epair0a: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metrica 0 mtu 1500
opțiuni=8<VLAN_MTU>
eter 02:a8:b4:85:57:0a
inet 10.22.0.1 netmask 0xffff0000 difuzare 10.22.255.255
inet6 fe80::a8:b4ff:fe85:570a%epair0a prefixlen 64 scopeid 0x5
inet6 2001:19f0:6c01:2033:8000::1 prefixlen 65
grupuri: epair
media: Ethernet 10Gbase-T (10Gbase-T <full-duplex>)
stare: activ
nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
De obicei, pf face NAT pentru IPv4. În prezent, am dezactivat pf, astfel încât pf să nu ruleze în timp ce încerc să fac IPv6 global să funcționeze pentru închisori.
Gazda este configurată să direcționeze traficul IPv6, cf /etc/rc.conf
pe care le-am inclus mai devreme în acest mesaj.
Iată ce spune închisoarea despre ruta către o adresă IPv6 de pe internet:
doas jexec svcfw route -6 get 2a00:1450:400f:802::200e
ruta către: 2a00:1450:400f:802::200e
destinație: implicit
masca: implicit
gateway: 2001:19f0:6c01:2033:8000::1
fib: 0
interfață: bridge0
steaguri: <SUS,GATEWAY,DONE,STATIC>
recvpipe sendpipe ssthresh rtt,msec mtu weight expire
0 0 0 0 1500 1 0
Ar trebui trimis la pod0
, arata bine.
Iată ce îmi spune gazda despre rutele pentru google.com și, respectiv, pentru închisoare:
ruta -6 obțineți google.com
ruta către: fra24s01-in-x0e.1e100.net
destinație: implicit
masca: implicit
gateway: fe80::fc00:3ff:fe7a:2ca1%vtnet0
fib: 0
interfață: vtnet0
steaguri: <SUS,GATEWAY,DONE,STATIC>
recvpipe sendpipe ssthresh rtt,msec mtu weight expire
0 0 0 0 1500 1 0
ruta -6 obține 2001:19f0:6c01:2033::2
ruta către: 2001:19f0:6c01:2033::2
destinație: 2001:19f0:6c01:2033::2
fib: 0
interfata: lo0
steaguri: <UP,HOST,DONE,STATIC,PINNED>
recvpipe sendpipe ssthresh rtt,msec mtu weight expire
0 0 0 0 16384 1 0
Arata bine in mare parte. Nu știu de ce din urmă rută spune interfața loopback lo0
în loc de interfața epair epair0a
. Este aceasta o problemă? Sau altceva provoacă problema?
Problema este că nu pot ajunge la Internetul public prin IPv6 din închisoarea mea, chiar dacă rutarea IPv6 pe gazdă este activată și firewall-ul gazdei (pf) este dezactivat, iar gazda poate vorbi cu Internetul prin IPv6 foarte bine și sunt folosind adrese din /64 alocat. (Atribuirea mai multor adrese de la /64 la gazdă funcționează bine.)
Când încerc chiar să ping ceva pe Internet prin IPv6 care a funcționat bine de la gazdă, nu funcționează din închisoare:
doas jexec svcfw ping6 -c 4 2a00:1450:400f:802::200e
PING6(56=40+8+8 octeți) 2001:19f0:6c01:2033:8000::2 --> 2a00:1450:400f:802::200e
--- 2a00:1450:400f:802::200e ping6 statistics ---
4 pachete transmise, 0 pachete primite, 100,0% pierdere de pachete
Nu merge.
Ce îmi lipsește? ce fac greșit? Se întâmplă la asta de ore întregi.