MAC-адрес NAT с ebtables для IPv4 и IPv6?
У меня есть виртуальная машина, работающая в VMware. На нем установлена Ubuntu 14.04. Я хочу установить на него контейнеры LXC, чтобы они использовали то же адресное пространство, что и виртуальная машина.
Итак, я создал мостовой интерфейс и вставил в него порт Ethernet. Затем мои контейнеры LXC добавляют свой интерфейс к мосту.
Теоретически это должно сработать. И на физических машинах это имеет. Я могу пропинговать контейнеры LXC с хоста (виртуальной) машины LXC. Но я не могу пропинговать их откуда-либо еще, включая другие виртуальные машины VMware.
Я провел некоторое исследование, и кажется, что виртуальный "коммутатор" VMware для VLAN, входящий в хост-машину VMware, не работает как обычный коммутатор. Он уже знает MAC-адреса подключенных к нему машин и отбрасывает трафик, приходящий с любого другого MAC-адреса. По сути, он не изучает MAC-адреса, потому что он уже знает их. Существует опция VMware, позволяющая отключить эту функцию, но вместо того, чтобы виртуальный коммутатор изучал MAC-адреса, он просто превращает его в эквивалент концентратора, причем каждая машина на виртуальном коммутаторе получает весь трафик, проходящий через коммутатор. (Это то, что я не хочу делать - как из-за проблем с производительностью, так и из-за безопасности).
Итак, я остаюсь, думая, что мне нужно сделать эквивалент NAT, кроме как на уровне Ethernet для исходящих пакетов на мосту, чтобы сделать их такими, какими считает VMware. А затем переписать входящие пакеты, которые на самом деле для контейнеров, обратно на правильный MAC-адрес. С этой целью я нашел https://wiki.debian.org/BridgeNetworkConnections Кажется, что это должно работать. Но у меня есть одна проблема: мне нужно также сделать IPv6. Хотя я думаю, что, возможно, смогу выяснить, как переписать материал в адрес IPv6, мне также нужно переписать IPv6-эквивалент ARP, чтобы хосты знали, где его найти.
Итак, какие правила мне нужны в ebtables для работы на уровне Ethernet, MAC-адрес "NAT" (перезапись исходящих MAC-адресов) для IPv6?
1 ответ
Нет такого способа сделать mac-NAT.
Фактически, исходящий MAC всегда переписывается, потому что MAC используется между машинами, связанными ПРЯМО. MAC-адрес источника должен быть MAC-адресом прямого отправителя, а MAC-адрес получателя должен быть MAC-адресом следующего перехода. Вместо этого, IP используется как для машин с прямой связью, так и для машин с косвенной связью для маршрутизации. Исходный ip - это ip исходного отправителя, а ip назначения - для конечного.
Но, к счастью, NAT для ipv6 действительно доступен только через некоторые изменения в таблице NAT.