Рейтинг:0

Маршрутизация IPv6 для тюрем VNET на FreeBSD 13-RELEASE

флаг in

У меня есть блок адресов IPv6 с размером префикса 64. На моем хост-компьютере с FreeBSD 13-RELEASE есть три тюрьмы:

JLS

   JID IP-адрес Имя хоста Путь
     1 svcfw /usr/тюрьма/svcfw
     2 www /usr/тюрьма/www
     3 ифи /usr/тюрьма/ифи

Хост-сетевой адаптер, подключенный к глобальной сети Интернет:

ifconfig vtnet0

vtnet0: flags=8863<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> метрика 0 mtu 1500
    options=4804bb<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU,VLAN_HWCSUM,LRO,LINKSTATE,TXCSUM_IPV6>
    эфир 56:00:03:7a:2c:a1
    инет 192.248.184.48 сетевая маска 0xfffffe00 широковещательная рассылка 192.248.185.255
    inet6 fe80::5400:3ff:fe7a:2ca1%vtnet0 prefixlen 64 scopeid 0x1
    inet6 2001:19f0:6c01:2033::2 префикслен 65
    среда: автоматический выбор Ethernet (10Gbase-T <полный дуплекс>)
    статус: активен
    nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>

Содержание моего /etc/rc.conf:

имя_хоста="логин"

clear_tmp_enable="ДА"
syslogd_flags="-сс"
sendmail_enable = "НЕТ"
static_routes="местная ссылка"

route_linklocal="-net 169.254.0.0/16 -интерфейс vtnet0"
ifconfig_vtnet0="inet 192.248.184.48 сетевая маска 255.255.254.0"
по умолчанию маршрутизатор = "192.248.184.1"
ifconfig_vtnet0_ipv6="inet6 2001:19f0:6c01:2033::2 prefixlen 65"
ipv6_default_interface="vtnet0"
# ХХХ:
# - 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 сетевая маска 255.255.0.0"

# Частная сеть: net5ab50b04a6b66
ifconfig_vtnet1="inet 10.9.96.5 сетевая маска 255.255.240.0 mtu 1450"

#pf_enable="ДА"
#pf_rules="/etc/pf.conf"
#pflog_enable="ДА"
#pflog_logfile="/var/log/pflog"

sshd_enable="ДА"

дампдев = "НЕТ"
zfs_enable="ДА"
devmatch_blacklist="virtio_random.ko"
шлюз_включить = "ДА"
ipv6_gateway_enable="ДА"
wireguard_enable="ДА"
wireguard_interfaces="wg0"
тюрьма_включить = "ДА"

Сеть с хоста работает как надо:

fetch -6 -o /dev/null http://example.com

/dev/null 1256 B 10 Мбит/с 00 с

ping6 -c 4 google.com

PING6(56=40+8+8 байт) 2001:19f0:6c01:2033::2 --> 2a00:1450:4001:802::200e
16 байт из 2a00:1450:4001:802::200e, icmp_seq=0 hlim=119 время=0,832 мс
16 байт из 2a00:1450:4001:802::200e, icmp_seq=1 hlim=119 время=0,793 мс
16 байт из 2a00:1450:4001:802::200e, icmp_seq=2 hlim=119 время=0,867 мс
16 байт из 2a00:1450:4001:802::200e, icmp_seq=3 hlim=119 время=0,827 мс
--- Статистика ping6 google.com ---
4 пакета передано, 4 пакета получено, 0,0% потери пакетов
туда-обратно мин/средн/макс/стандартное отклонение = 0,793/0,830/0,867/0,026 мс

Основной сетевой адаптер первой тюрьмы:

doas jexec svcfw ifconfig bridge0

bridge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> метрика 0 mtu 1500
    эфир 58:9c:fc:10:e2:24
    inet6 2001:19f0:6c01:2033:8000::2 префикслен 65
    инет 10.22.0.2 сетевая маска 0xffff0000 широковещательный 10.22.255.255
    id 00:00:00:00:00:00 приоритет 32768 hellotime 2 fwddelay 15
    maxage 20 holdcnt 6 proto rstp maxaddr 2000 тайм-аут 1200
    корневой идентификатор 00:00:00:00:00:00 приоритет 32768 ifcost 0 порт 0
    участник: epair2a flags=143<ОБУЧЕНИЕ, ОБНАРУЖЕНИЕ, AUTOEDGE, AUTOPTP>
            ifmaxaddr 0 порт 5 приоритет 128 стоимость пути 2000
    участник: epair1a flags=143<ОБУЧЕНИЕ, ОБНАРУЖЕНИЕ, AUTOEDGE, AUTOPTP>
            ifmaxaddr 0 порт 4 приоритет 128 стоимость пути 2000
    участник: epair0b flags=143<ОБУЧЕНИЕ, ОБНАРУЖЕНИЕ, AUTOEDGE, AUTOPTP>
            ifmaxaddr 0 порт 3 приоритет 128 стоимость пути 2000
    группы: бридж
    nd6 options=8001<PERFORMNUD,DEFAULTIF>

Пинг джейла с хоста работает как надо:

ping6 -c 4 2001:19f0:6c01:2033:8000::2

PING6(56=40+8+8 байт) 2001:19f0:6c01:2033:8000::1 --> 2001:19f0:6c01:2033:8000::2
16 байт из 2001:19f0:6c01:2033:8000::2, icmp_seq=0 hlim=64 время=0,077 мс
16 байт из 2001:19f0:6c01:2033:8000::2, icmp_seq=1 hlim=64 время=0,062 мс
16 байт из 2001:19f0:6c01:2033:8000::2, icmp_seq=2 hlim=64 время=0,080 мс
16 байт из 2001:19f0:6c01:2033:8000::2, icmp_seq=3 hlim=64 время=0,062 мс
--- 2001:19f0:6c01:2033:8000::2 статистика ping6 ---
4 пакета передано, 4 пакета получено, 0,0% потери пакетов
туда-обратно мин/средн/макс/стандартное отклонение = 0,062/0,070/0,080/0,008 мс

Пинг хоста из джейла тоже работает как надо:

doas jexec svcfw ping6 -c 4 2001:19f0:6c01:2033:8000::1

PING6(56=40+8+8 байт) 2001:19f0:6c01:2033:8000::2 --> 2001:19f0:6c01:2033:8000::1
16 байт из 2001:19f0:6c01:2033:8000::1, icmp_seq=0 hlim=64 время=0,068 мс
16 байт из 2001:19f0:6c01:2033:8000::1, icmp_seq=1 hlim=64 время=0,064 мс
16 байт из 2001:19f0:6c01:2033:8000::1, icmp_seq=2 hlim=64 время=0,059 мс
16 байт из 2001:19f0:6c01:2033:8000::1, icmp_seq=3 hlim=64 время=0,060 мс
--- 2001:19f0:6c01:2033:8000::1 статистика ping6 ---
4 пакета передано, 4 пакета получено, 0,0% потери пакетов
туда-обратно мин/средн/макс/стандартное отклонение = 0,059/0,063/0,068/0,004 мс

Конфигурация пары на стороне хоста, подключенной к мосту:

ifconfig epair0a

epair0a: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> метрика 0 mtu 1500
    options=8<VLAN_MTU>
    эфир 02:a8:b4:85:57:0a
    инет 10.22.0.1 сетевая маска 0xffff0000 широковещательный 10.22.255.255
    inet6 fe80::a8:b4ff:fe85:570a%epair0a prefixlen 64 scopeid 0x5
    inet6 2001:19f0:6c01:2033:8000::1 префикслен 65
    группы: пара
    среда: Ethernet 10Gbase-T (10Gbase-T <полный дуплекс>)
    статус: активен
    nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>

Обычно pf выполняет NAT для IPv4. В настоящее время я отключил pf, так что pf не работает, пока я пытаюсь заставить глобальный IPv6 работать для тюрем.

Хост настроен на маршрутизацию трафика IPv6, см. /etc/rc.conf которые я включил ранее в этом сообщении.

Вот что говорит тюрьма о маршруте к IPv6-адресу в Интернете:

doas jexec svcfw route -6 получить 2a00:1450:400f:802::200e

   маршрут до: 2a00:1450:400f:802::200e
пункт назначения: по умолчанию
       маска: по умолчанию
    шлюз: 2001:19f0:6c01:2033:8000::1
        выдумка: 0
  интерфейс: мост0
      флаги: <UP,GATEWAY,DONE,STATIC>
 recvpipe sendpipe ssthresh rtt, мс mtu вес истекает
       0 0 0 0 1500 1 0

Должен быть отправлен в мост0, выглядит хорошо для меня.

Вот что хост рассказывает мне о маршрутах для google.com и для джейла соответственно:

маршрут -6 получить google.com

   маршрут к: fra24s01-in-x0e.1e100.net
пункт назначения: по умолчанию
       маска: по умолчанию
    шлюз: fe80::fc00:3ff:fe7a:2ca1%vtnet0
        выдумка: 0
  интерфейс: vtnet0
      флаги: <UP,GATEWAY,DONE,STATIC>
 recvpipe sendpipe ssthresh rtt, мс mtu вес истекает
       0 0 0 0 1500 1 0

маршрут -6 получить 2001:19f0:6c01:2033::2

   маршрут до: 2001:19f0:6c01:2033::2
пункт назначения: 2001:19f0:6c01:2033::2
        выдумка: 0
  интерфейс: lo0
      флаги: <UP,HOST,DONE,STATIC,PINNED>
 recvpipe sendpipe ssthresh rtt, мс mtu вес истекает
       0 0 0 0 16384 1 0

Выглядит в основном хорошо. Не знаю, почему последний маршрут говорит, что петлевой интерфейс lo0 вместо epair интерфейса epair0a. Это проблема? Или что-то другое вызывает проблему?

Проблема в том, что я не могу получить доступ к общедоступному Интернету по IPv6 из своей тюрьмы, хотя маршрутизация IPv6 на хосте включена, а брандмауэр хоста (pf) выключен, и хост может нормально общаться с Интернетом через IPv6, и я используя адреса из моего назначенного /64. (Назначение хосту большего количества адресов из /64 отлично работает.)

Когда я пытаюсь даже пропинговать что-то в Интернете по IPv6, что отлично работало с хоста, не работает из тюрьмы:

doas jexec svcfw ping6 -c 4 2a00:1450:400f:802::200e

PING6(56=40+8+8 байт) 2001:19f0:6c01:2033:8000::2 --> 2a00:1450:400f:802::200e
--- 2a00:1450:400f:802::200e статистика ping6 ---
4 пакета передано, 0 пакетов получено, 100,0% потери пакетов

Не работает.

Что мне не хватает? Что я делаю не так? Продолжались в этом в течение нескольких часов.

dinoex avatar
флаг in
Вашему маршрутизатору по умолчанию на vtnet0 нужен маршрут к вашему хосту для неподключенного /65, иначе пакеты отправляются, но ответы не возвращаются. используйте tracerour6 из джейла, так что посмотрите, как далеко работает установка.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.