Пусть ifconfig ждет, пока IPv6-адрес не будет предварительным.

в ответ на

«похоже, что put игнорирует файл журнала для меня (ожидайте, что версия 5.45 Debian 8):»

Команда из оболочки linux выполняет свою работу, но когда вы попадаете внутрь, ожидайте оболочку и открывайте файл журнала, затем введите put, это будет печатать то, что вы хотите напечатать, и на экране, и в файле журнала ...

Я также использую ожидаемую версию 5.45

5
10.02.2017, 17:16
2 ответа

Адрес может находиться в нескольких состояниях, одно из которых - предварительное. Если ifconfig ждать, пока адрес выйдет из состояния «предварительное», это просто не соответствует дизайну.

Вы можете настроить использование оптимистичного DAD, как определено в RFC 4429 . Цель состоит в том, чтобы сделать адрес доступным для приложений, даже если DAD еще не завершен. Вам может потребоваться перенастроить ядро, чтобы использовать эту функцию.

После того, как ядро ​​построено для обеспечения оптимистичного DAD, вы можете включить его в определенных параметрах sysctl. Из ip-sysctl.txt :

/proc/sys/net/ipv6/* Variables:
...

conf/interface/*:
        Change special settings per interface.

        The functional behaviour for certain settings is different
        depending on whether local forwarding is enabled or not.

...

optimistic_dad - BOOLEAN
        Whether to perform Optimistic Duplicate Address Detection (RFC 4429).
                0: disabled (default)
                1: enabled

use_optimistic - BOOLEAN
        If enabled, do not classify optimistic addresses as deprecated during
        source address selection.  Preferred addresses will still be chosen
        before optimistic addresses, subject to other ranking in the source
        address selection algorithm.
                0: disabled (default)
                1: enabled

То есть сделать что-то вроде

sysctl -w net.ipv6.conf.enp2s6.optimistic_dad=1
sysctl -w net.ipv6.conf.enp2s6.use_optimistic=1

во время загрузки.

2
27.01.2020, 20:41

Спросив разработчика NetBSD и убедившись, что то же самое применимо к FreeBSD, я нашел решение (которое применимо к обеим этим ОС):

Обнаружение повторяющегося адреса (DAD) будет использовать некоторое время для определения того, используется ли уже адрес. Время, которое он будет использовать для этого, определяется в секундах в значении sysctl (3) net.inet6.ip6.dad_count . В NetBSD /etc/rc.d/network , функция network_start_ipv6_autoconf , сценарий ожидает это количество плюс одну секунду.

Когда DAD обнаруживает, что адрес уже используется в сети, ifconfig (8) покажет адрес как дублированный . В этом состоянии невозможно выполнить привязку к адресу, аналогично тому, когда адрес предварительный .

Таким образом, более полным и корректирующим решением было бы следующее:

ifconfig igb0 inet6 2001:db8::10/64 add
dadcount=$(/sbin/sysctl -n net.inet6.ip6.dad_count 2>/dev/null)
sleep $dadcount
sleep 1
ifconfig igb0 | grep 2001:db8::10/64 | egrep '(duplicated|tentative)$' >&2 && exit 1
service my_service start

Я заметил, что FreeBSD и NetBSD ведут себя по-разному при добавлении адреса, который в настоящее время находится в состоянии дублированный :

  • FreeBSD 11 немедленно удалит дублированное состояние , позволяющее использовать адрес, что может вызвать конфликты.
  • NetBSD 7 пометит адрес как предварительный и не изменит состояние оттуда, по крайней мере, в течение пары минут. Адрес необходимо удалить и добавить снова, чтобы его можно было использовать.
2
27.01.2020, 20:41

Теги

Похожие вопросы