У меня есть сервер asterisk, который подключается к вышестоящему провайдеру через глобальную сеть. Поставщик восходящего потока поддерживает подключение как IPv4, так и IPv6, а сервер asterisk находится за NAT.
Когда звездочка подключается к восходящему узлу sip через IPv6, все работает отлично.
У меня проблема в том, что когда я настраиваю IPv6-адрес сервера asterisk через DHCPv6, состояние гонки означает, что иногда asterisk пытается связаться с вышестоящим одноранговым узлом через IPv4 (DNS-имя SIP имеет записи A и AAAA). Это связано с тем, что звездочка запускается до того, как система получит действительный адрес IPv6. Соединение не работает по IPv4 из-за NAT.
Есть ли способ настроить одноранговый узел, чтобы указать, что он должен быть доступен только по IPv6? Я предполагаю, что можно было бы взломать правило брандмауэра, чтобы запретить весь трафик IPv4 на этот IP-адрес, но было бы проще настроить это в самой asterisk.
Вот что происходит. Это объяснение ориентировано на системы, производные от Red Hat:
Сценарии запуска сервера выполняются в определенной последовательности, при этом некоторые сценарии зависят от успешного завершения других.
В случае звездочки он требует (или должен требовать), чтобы сеть была включена перед запуском. Вы увидите это в сценарии инициализации в виде такой строки:
# Required-Start: $local_fs $remote_fs $network
где $network
настоящее.
Проблема в том, что по умолчанию сеть считается «работающей», если настройка IPv4 завершена, даже если настройка IPv6 не завершена.
Чтобы изменить это поведение, отредактируйте /etc/sysconfig/network-scripts/ifcfg-eth0
(или ваш конкретный интерфейс), чтобы указать, что IPv6 также должен появиться:
IPV6_FAILURE_FATAL=yes
Обратите внимание, что только NetworkManager обращает внимание на этот параметр, поэтому, если вы отключили NetworkManager и используете старый сетевой сценарий, он будет проигнорирован. Вы также можете выполнить эквивалентную настройку в графическом интерфейсе NetworkManager.