Назад | Перейти на главную страницу

статический маршрут ipv6 в контейнер lxc

Я хочу направить ipv6 ip в lxc-контейнер, но пакеты не пересылаются. Я не хочу соединять lxc-контейнеры с eth0, и я не хочу использовать autoconfig. Далее у меня есть только /64 для хоста, поэтому мне нужно использовать меньшую сеть для виртуальных машин. Я выбрал /112 А пока, может, при необходимости я мог бы использовать сетку побольше.

Думаю, проблема в маршрутизации, а не в контейнере. Вот моя установка:

Хост:

# the host already has working ipv6, empty ip6tables FORWARD table with policy ACCEPT
ip -6 addr add prefix::1/112 dev lxcbr
ip -6 route show|grep prefix
# prefix::/112 dev lxcbr  proto kernel  metric 256
sysctl net.ipv6.conf.eth0.forwarding
# net.ipv6.conf.eth0.forwarding = 1
sysctl net.ipv6.conf.lxcbr.forwarding
# net.ipv6.conf.lxcbr.forwarding = 1

ВМ:

ip -6 addr add prefix::2/112 dev eth0
ip -6 route add default via fe80:: dev eth0 # routing via prefix::1 does not work either
ip -6 route show
# prefix::/112 dev eth0  proto kernel  metric 256 
# fe80::/64 dev eth0  proto kernel  metric 256 
# default via fe80:: dev eth0  metric 1024

Рабочие (ВМ):

ping6 prefix::1 # host

Рабочие (хост):

ping6 prefix::2 # vm

Не работает (ВМ):

ping6 google.com
# PING google.com (2a00:1450:4001:805::1007): 48 data bytes
# --- google.com ping statistics ---
# 7 packets transmitted, 0 packets received, 100% packet los

tcpdump на хосте:

tcpdump -i lxcbr icmp6
# 13:20:44.088814 IP6 prefix::1 > fra07s32-in-x07.1e100.net: ICMP6, echo request, seq 0, length 56
# 13:20:45.089268 IP6 prefix::1 > fra07s32-in-x07.1e100.net: ICMP6, echo request, seq 1, length 56
# [...]
tcpdump -i eth0 icmp6
# [no output]

ip6tables с -A FORWARD -j LOG также не регистрирует никаких пакетов.

РЕДАКТИРОВАТЬ: Потому что все жалуются на сети меньше, чем /64: Проблема не устранена /64 на интерфейсе. Проблема в том, что пакеты не попадают в FORWARD очередь iptables при использовании статического маршрута от одного (виртуального) интерфейса к другому (физическому) интерфейсу.

Установка с меньшей сетью - это то, что хотелось бы иметь, когда она работает, поскольку мой провайдер хочет довольно большую плату за большее количество сетей (около 50% от аренды сервера). Но для тестирования я могу использовать весь /64 или большие сети из fd/8 если это поможет для тестирования.

Я бы не стал использовать вашу настройку в производственной среде. Как уже упоминалось, разделение / 64 будет иметь непредвиденные последствия. Если вы не можете получить больше адресов от своего провайдера, я рекомендую использовать прокси-сервер NDP, чтобы позволить вашим контейнерам в / 112 подключаться к Интернету IPv6. Вы можете использовать прокси-демон NDP или создавать статические записи в командной строке.

Написал подробное описание как это сделать с докером Вот. Та же логика применима к lxc.

У меня все заработало ... но все еще странно.

установка переадресации для "всех", но затем отключение ее для каждого отдельного интерфейса работает:

cd /proc/sys/net/ipv6/conf/
echo 1 >all/forwarding;for i in */forwarding;do test $i = all/forwarding || echo 0 > $i;done

наоборот (установить all / forwarding на 0 и forwarding для каждого интерфейса на 1) не работает.

Еще одна интересная проблема: иногда вам нужно добавить маршруты ПОСЛЕ того, как интерфейс добавлен к мосту, чтобы он работал, та же проблема, что и здесь: https://www.rivy.org/2013/02/ipv6-ping-sendmsg-network-is-down/

Благодаря jeff-loughridge за ссылку на докер, первый раздел этого руководства помог мне найти это решение.

Я все еще изучаю, что именно здесь происходит (и продолжает ли оно работать), прежде чем закрыть вопрос.