Когда у меня есть служба, прослушивающая определенный адрес IPv6, она не работает при загрузке, утверждая, что адрес все еще недоступен. Это происходит с каждой службой, которая прослушивает определенные адреса.
Чтобы избежать этого, я создал дроп-ин для службы, изменив After=... network.target
по After=... network-online.target
это решает проблему привязки адреса IPv4, но не IPv6. Я безуспешно пытаюсь использовать некоторые специфические для интерфейса цели. Они ждут, пока бит IPv4 не истечет.
В качестве обходного пути я также добавил в раздел обслуживания:
[Service]
Restart=on-failure
RestartSec=10s
StartLimitInterval=1min
Кажется, что все пытаются решить эту проблему, но я не очень доволен этим, и, похоже, это какой-то метод, позволяющий systemd ждать адреса IPv6.
Моя система CentOS 7.2, отключил NetworkManager и firewalld, включил сеть и iptables, со статическим IP-адресом, вся сеть работает IN / OUT после того, как интерфейс заполнен IPv4 / IPv6.
Мой ifcfg-eth0:
DEVICE=eth0
BOOTPROTO=none
NM_CONTROLLED="no"
ONBOOT=yes
IPADDR=X.X.X.X
PREFIX=24
GATEWAY=X.X.X.X
DNS1=X.X.X.X
DNS2=8.8.8.8
SEARCH=xxx.xxx
IPV6INIT=yes
IPV6_AUTOCONF=no
IPV6ADDR="X:X:X:X::X"
Я также заметил, что в некоторых развернутых системах с двойным стеком IPv4 / IPv6, IPv6 требует больше времени для инициализации также для статического адреса, что вызвано настройкой маршрута и некоторыми другими новыми вещами IPv6.
Итак, мой вопрос: как убедиться, что сервисный блок запускается только после того, как глобальная ссылка IPv6 будет назначена интерфейсам?
РЕДАКТИРОВАТЬ: после некоторых комментариев, указывающих мне на DAD, я полагаю, что systemd-networkd объединил ожидание DAD, но только в основной ветке, отсутствующей в системе 220 (Centos 7.2 имеет systemd 219). В NetworkManager есть несколько патчей, но я их не использую.
Я нашел приемлемое временное решение после прочтения и провел несколько тестов, для моего случая, когда IP-адрес на серверах фиксирован и не может быть назначен другой, этот пост показал мне решение:
https://www.agwa.name/blog/post/beware_the_ipv6_dad_race_condition
Я также протестировал решение DAD с комментариями на основе оптимистичного DAD RFC4429, это не решает моих проблем с привязкой. Наконец, отключил DAD на интерфейсе, и службы нормально работают при загрузке. : D.
net.ipv6.conf.eth0.accept_dad = 0
Я буду обращать внимание на эту проблему с загрузочным DAD по мере развития IPv6. Я вижу это только при привязке служб к определенным адресам IPv6.