Teredo - сетевой протокол, предназначенный для передачи IPv6-пакетов через сети IPv4. Он позволяет получить доступ к IPv6-хостам даже машинам, находящимся за NAT, так как работает поверх UDP. Для Teredo зарезервирован отдельный префикс: 2001::/32.
Некоторые ограничения на использование Teredo накладывает тот факт что адреса клиентам выделяются динамически и не являются постоянными. Т.е. Teredo удобен для получения доступа в IPv6, но размещать IPv6-сервисы на машине с Teredo проблематично. Далее будет показано как можно настроить Teredo-клиент на FreeBSD.
Во FreeBSD, как и в Linux, в качестве Teredo-клиента используется Miredo. Установим пакет:
pkg install miredo
Далее приводим файл "/usr/local/etc/miredo/miredo.conf" к виду:
# Демон запускается в режиме клиента RelayType client # Имя виртуального сетевого интерфейса, который будет использоваться InterfaceName teredo # Адрес Teredo-сервера ServerAddress teredo.trex.fi # Адрес запасного Teredo-сервера ServerAddress2 teredo.remlab.net
Добавляем в "/etc/rc.conf" строку:
miredo_enable="YES"
И запускаем сервис:
/usr/local/etc/rc.d/miredo start
Проверить что всё хорошо и получить информацию об используемом IPv6-адресе и таблице маршрутизации можно командой:
ifconfig teredo && netstat -nr6

Теперь остаётся настроить файрволл. Мы будем использовать pf. Создадим файл "/etc/pf.rules" следующего содержания:
# Базовые настройки
# Внешний интерфейс нашего сервера
if_ext = "bge0"
# Teredo-интерфейс
if_ext_v6 = "teredo"
# Список IP-адресов админов
table <admins> { \
        1.2.3.4 \
        1.3.7.5 \
}
set block-policy drop
set state-policy if-bound
scrub all reassemble tcp fragment reassemble
# Запрещаем весь лишний трафик
block drop all
# Разрешаем всё на loopback-интерфейсе
pass quick on lo0 all
# Разрешаем исходящий трафик
# IPv4
pass out quick on $if_ext inet proto tcp from ($if_ext) to any flags S/SA keep state
pass out quick on $if_ext inet proto { udp, icmp } from ($if_ext) to any keep state
# IPv6
pass out quick on $if_ext_v6 inet6 proto tcp from ($if_ext_v6) to any flags S/SA keep state
pass out quick on $if_ext_v6 inet6 proto { udp, icmp6 } from ($if_ext_v6) to any keep state
# Разрешаем админам обращаться к серверу по SSH
pass in quick on $if_ext inet proto tcp from <admins> to ($if_ext) port 22 flags S/SA keep state
Добавляем в файл "/etc/rc.conf" строки:
pf_enable="YES" pf_rules="/etc/pf.rules"
Запускаем файрволл:
/etc/rc.d/pf start
Осталось убедиться что доступ в IPv6 работает. Сделать это можно командой:
ping6 -q -c 5 ya.ru

Если что-то не так то возможно стоит сменить используемый teredo-сервер. В остальном проблем быть не должно.
На этом всё. Приятной работы!
