Я уже задавал этот вопрос на IRC-каналах #networking и #freebsd IRC каналах на Freenode, но никто не смог ответить на мой вопрос и перенаправил меня сюда, так как, похоже, этот вопрос сложно решить.
У меня есть гипервизор Proxmox, на котором размещены LXC контейнеры и KVM. машины из Debian 9, Arch Linux и Windows. Все они мостом к гипервизору и стек IPv6 работает безупречно с публичными IP-адресами, предоставленными моим провайдером и направленными непосредственно на виртуальные машины.
Одна из моих ВМ представляет собой устройство брандмауэра OPNsense (основанное на FreeBSD 11.0-RELEASE-p8).
В отличие от других LXC/KVM, последняя не может пинговать никакие IPv6 машины за пределами тех, которые доступны непосредственно с моста. Как только я пытаюсь пинговать либо шлюз моего гипервизора (все еще в IPv6), либо любой другой дальний IPv6 хосты (например, google.com), я получаю следующее сообщение об ошибке:
[...]
ping6: sendmsg: No buffer space available
[...]
Пинг ВМ либо с моста, либо с машины, полностью вне инфраструктуры, не отвечает и не подключается (т.е. я запустил запустил sshd на 2222, но не смог подключиться).
Хост FreeBSD настроен следующим образом:
ifconfig vtnet0 /32
route add -iface vtnet0
route add default
ifconfig vtnet0 inet6 prefixlen 64
route add -inet6 -iface vtnet0
route add -inet6 default
Обратите внимание, что все мои GW находятся вне моих IP-подсетей.
После применения этих строк маршруты, о которых сообщает netstat -rn, являются разумными для меня. Все в порядке.
Я точно знаю, что брандмауэр pf полностью отключен (pfctl -d). Я хочу убедиться, что он работает безупречно, прежде чем включать еще один уровень отказов. :)
Есть ли ошибка где-то в BSD IPv6 стеке, поскольку Linux не жалуется вообще? Это звучит странно, поскольку я думаю, что я не единственный в этой ситуации и не только у меня GW вне их IP диапазона.
Заранее спасибо за ваше время / помощь.
С уважением.
После некоторых обсуждений с ребятами из компании, стоящей за OPNsense, я удалось решить мою проблему.
Мой дальний шлюз находился в /56. Даже если мой IPv6 не является /56, установка моего IPv6 с префиксом /56 вместо /64 исправила мою проблему.
Это связано с тем, что реализация IPv6 NDP во FreeBSD не может найти IPv6-адрес шлюза, который не считается прямым соседом.