Я только начинаю разбираться в IP v6 и столкнулся с проблемой на моем виртуальном хосте.
Сетевой интерфейс хостов (eth0) в настоящее время настраивается со статическим IPv4-адресом. В / etc / network / interfaces нет ничего, указывающего, как настроен IP V6, поэтому я предполагаю, что по умолчанию используется автоматическая конфигурация без сохранения состояния, как если бы я указал
iface eth0 inet6 auto
Если я получил 2/64 IPV6-адресов, теперь я вижу 2 IPv6-адреса и один IPV4-адрес, настроенный на eth0.
Я хотел бы использовать второй адрес для своих контейнеров докеров, поэтому я считаю, что мне нужно настроить этот адрес в /etc/docker/daemon.json, но мне также нужно, чтобы моя система не назначала его eth0.
Итак, вопрос:
Могу ли я настроить свою систему так, чтобы назначать eth0 только один IPv6-адрес, чтобы другой оставался доступным для докера?
Или мне нужно вернуться к статической конфигурации IPV6?
Также в режиме без сохранения состояния IPV6-адрес представляет собой комбинацию префикса и моего MAC-адреса. Должен ли я указывать полный IP-адрес в статическом режиме или можно автоматически настроить MAC-адрес?
Заранее спасибо Томас
1 ответ
Я хотел бы использовать второй адрес для своих контейнеров докеров, поэтому я думаю, что мне нужно настроить этот адрес в /etc/docker/daemon.json
Конфигурация Docker не принимает адрес — она принимает сетевой префикс (другими словами, целую подсеть). Ему нужен уникальный адрес для каждый контейнер, не только для Docker в целом.
И пока Docker управляет собственной изолированной сетью, он должен имеют выделенный префикс — как в IPv4, так и в IPv6 он нет просто заставить два интерфейса использовать один и тот же префикс подсети (т. е. адреса маршрутов, которые должны напрямую принадлежать вашей подсети).
Независимо от того, хотите ли вы «совместно использовать» IPv4 / 24 или IPv6 / 64, проблема в том, что ваш маршрутизатор и все остальные в подсети будут ожидать запросов ARP (NDP) и получения ответов — но этого не произойдет, если адрес сбрасывается с eth0 и маршрутизируется куда-то дальше.
Чтобы действительно заставить такой «общий» префикс работать, вам необходимо:
- напрямую прикрепить контейнеры к eth0 (например, используя режим моста macvlan в Docker) или
- запустите Proxy-NDP на хосте (например,
ndppd
), чтобы ваш хост выдавал ответы NDP от имени адресов, которые он маршрутизирует, или - отбросьте эту идею и настройте отдельный / 64 для docker0.
Могу ли я настроить свою систему так, чтобы назначать eth0 только один IPv6-адрес, чтобы другой оставался доступным для докера?
С самого начала в этом нет никакого смысла. Не думайте об этом как о «необходимости держать другой адрес доступным». Доступен весь / 64, и если вам нужен адрес, вы можете буквально взять третий адрес из того же / 64.
(Вам все равно придется это сделать, потому что каждый ваших контейнеров Docker нужен уникальный адрес.)
В автоконфигурации IPv6 без сохранения состояния хост получает только сетевой префикс — нет квоты для адресов на хост, действительно, один из двух адресов, которые вы сейчас видите, скорее всего, помечен как « временный » и заменяется новым каждые несколько часы. Также не существует специального протокола для запроса / аренды адреса, поэтому он назван автоконфигурацией без сохранения состояния.
Также в режиме без сохранения состояния IPV6-адрес представляет собой комбинацию префикса и моего MAC-адреса. Должен ли я указывать полный IP-адрес в статическом режиме или можно автоматически настроить MAC-адрес?
Вы указываете полный IP-адрес; однако вы можете выбрать любой суффикс. Он не обязательно должен основываться на вашем MAC-адресе, он просто должен быть уникальным и находиться в пределах префикса подсети.
Другие хосты всегда будут использовать NDP (ARP для IPv6) для обнаружения вашего адреса уровня 2, в этом отношении для IPv6-адресов на основе MAC нет специальной обработки.
(Ну, если оператор сети действительно не настаивает на этом — но тогда ваш eth0 не будет работать с этими два В любом случае адреса IPv6, так как только один из них основан на MAC — другой генерируется случайным образом.)
Различные операционные системы полностью прекратили использование MAC-адресов даже для автоконфигурации без сохранения состояния, заменив их бессмысленными адресами на основе хешей (например, согласно RFC 7217).