С помощью POSIX-lysed
вы можете сделать следующее:
sed -e '
/PRIMARY/!{x;1!p;d;}
x;s/,/)/;$G
' input-file.txt
Выход:
ID_SOUR_CALENDAR BIGINT NOT NULL DEFAULT 0 COMPRESS 0 )
UNIQUE PRIMARY INDEX ( CALENDAR_DATE );
ID,
ID_SOUR )
PRIMARY INDEX ( CALENDAR_DATE );
Рабочий:
Всякий раз, когда ваш BIND запрашивает адреса либо корневых DNS-серверов, либо DNS-серверов любых доменов верхнего уровня, он получит список адресов IPv6 и IPv4 -, который не известен корневому серверу или серверу имен TLD. и не беспокойтесь о том, что у вас может не быть подключения к Интернету IPv6.
А поскольку у вас есть хотя бы локальное соединение IPv6, BIND попытается использовать IPv6. Таким образом, если в записях NS для определенного внешнего домена указано имя DNS-сервера, с которым связан IPv6-адрес, и эта запись оказывается первой в текущем циклическом порядке -, BIND попытается использовать IPv6 для выполнить рекурсивное разрешение имен для одного из своих клиентов.
Да, даже если клиент отправил запрос через IPv4.
И да, даже если клиент запросил только запись A, а не AAAA.
Но поскольку у вас, по-видимому, нет подключения к Интернету по протоколу IPv6 , любая попытка связаться с внешним DNS-сервером по IPv6 завершится ошибкой network unreachable
. В этот момент BIND попробует другие IP-адреса, указанные для этого DNS-сервера... и когда он попробует IPv4-адрес, все будет работать нормально.
Помните, :При использовании протокола DNS ничто не мешает вам запрашивать информацию IPv4 через IPv6 или наоборот. И когда ваш BIND выполняет рекурсивное разрешение от имени одного из своих клиентов, он будет использовать любой протокол, который сочтет нужным :тот факт, что клиент мог подключиться к вашему BIND с использованием IPv4, не означает автоматически, что BIND должен ограничивать себя только IPv4.
Чтобы указать BIND, что любые IPv6-адреса для внешних DNS-серверов не должны использоваться, можно объявить все адресное пространство IPv6 (, кроме вашего локального домена (s ),для которых ваш BIND предположительно уже авторитетен для )как фиктивный:
server ::/0 {
bogus yes;
};
(Я не проверял, придется ли вам затем явно отменить это для любых других локальных IPv6 -доступных DNS-серверов, которые у вас могут быть.)
Другим вариантом полного прекращения попыток BIND связаться с другими DNS-серверами по IPv6 может быть запуск BIND с параметром -4
, который не подходит для вашей ситуации, поскольку вы сказали, что ваша локальная сеть — IPv6 -способен, но, по-видимому, не имеет подключения к Интернету по протоколу IPv6.
Источник:этого вопроса о сбое сервера .
Если вы хотите, чтобы IPv4-клиенты вашего BIND никогда не видели какие-либо IPv6-адреса, вы можете добавить эту строку в раздел options
:
filter-aaaa-on-ipv4 break-dnssec;
Однако это никак не влияет на использование BIND протокола IPv6 для исходящих подключений к другим DNS-серверам. И это будет работать только в том случае, если ваш BIND был скомпилирован с параметром ./configure --enable-filter-aaaa
build -.
Источник:https://kb.isc.org/docs/aa-00576