1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mirrors-coredns

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

CoreDNS

Документация CodeQL Тесты Go CircleCI Кодовое покрытие Загрузки Docker Отчет Go Report Card Лучшие практики CII Оценка OpenSSF

CoreDNS — это DNS-сервер/форвардер, написанный на Go, который использует цепочки плагинов. Каждый плагин выполняет определённую (DNS) функцию.

CoreDNS — это проект, выпущенный Cloud Native Computing Foundation.

CoreDNS — это быстрый и гибкий DNS-сервер. Ключевое слово здесь — гибкость: с помощью CoreDNS вы можете делать с вашими DNS-данными всё, что захотите, используя плагины. Если какая-то функциональность не предоставляется из коробки, вы можете добавить её, написав собственный плагин.CoreDNS может прослушивать DNS-запросы, поступающие по:

  • UDP/TCP (классический DNS).

  • TLS - DoT (RFC 7858).

  • DNS over HTTP/2 - DoH (RFC 8484).

  • DNS over QUIC - DoQ (RFC 9250).

  • gRPC (нестандартный).В настоящее время CoreDNS способен:

  • Предоставление зонных данных из файла; поддерживаются как DNSSEC (только NSEC), так и DNS (file и auto).

  • Получение зонных данных из первичных серверов, то есть работа как вторичный сервер (только AXFR) (secondary).

  • Подпись зонных данных на лету (dnssec).

  • Балансировка нагрузки ответов (loadbalance).

  • Разрешение на передачу зонных данных, то есть работа как первичный сервер (file + transfer).

  • Автоматическое загрузка файлов зон с диска (auto).

  • Кэширование ответов DNS (cache).

  • Использование etcd в качестве бэкенда (заменяет SkyDNS) (etcd).

  • Использование k8s (kubernetes) в качестве бэкенда (kubernetes).

  • Предоставление прокси для перенаправления запросов к другому (рекурсивному) серверу имен (forward).

  • Предоставление метрик (с использованием Prometheus) (prometheus).

  • Предоставление журналирования запросов (log) и ошибок (errors).

  • Интеграция с поставщиками облачных услуг (route53).

  • Поддержка класса CH: version.bind и другие (chaos).

  • Поддержка опции DNS name server identifier (NSID) по RFC 5001 (nsid).

  • Поддержка профилирования (pprof).

  • Переписывание запросов (qtype, qclass и qname) (rewrite и template).

  • Блокировка запросов ANY (any).

  • Предоставление DNS64 IPv6 перевода (dns64).

И многое другое. Каждый из плагинов документирован. См. coredns.io/plugins для всех плагинов в дереве, и coredns.io/explugins для всех плагинов вне дерева.## Сборка из исходного кода

Чтобы собрать CoreDNS, предполагается, что у вас есть рабочая среда Go. См. различные туториалы, если у вас еще не настроена такая среда.

Сначала убедитесь, что ваша версия Go 1.23.0 или выше, так как требуется поддержка go mod и других API. См. здесь для деталей go mod. Затем, клонируйте проект и выполните make для сборки бинарника:

$ git clone https://github.com/coredns/coredns
$ cd coredns
$ make

ЗАМЕЧАНИЕ: дополнительные плагины могут быть включены при сборке путем установки переменной окружения COREDNS_PLUGINS с запятой-разделенным списком плагинов в том же формате, что и в файле plugin.cfg

Это должно привести к созданию бинарника coredns.

Сборка с помощью Docker

CoreDNS требует Go для сборки. Однако, если у вас уже установлена Docker и вы предпочитаете не настраивать среду Go, вы можете легко собрать CoreDNS:

docker run --rm -i -t \
    -v $PWD:/go/src/github.com/coredns/coredns -w /go/src/github.com/coredns/coredns \
        golang:1.22 sh -c 'GOFLAGS="-buildvcs=false" make gen && GOFLAGS="-buildvcs=false" make'

Вышеуказанный командный запрос должен сгенерировать бинарник coredns.

Примеры

При запуске CoreDNS без какого-либо конфигурационного файла, он загружает плагины whoami и log и начинает прослушивание порта 53 (переопределите с помощью -dns.port), он должен показывать следующее:~~~ txt .:53 CoreDNS-1.6.6 linux/amd64, go1.16.10, aa8c32


Следующий запрос можно использовать для запроса к серверу CoreDNS, который запущен сейчас:

~~~ txt
dig @127.0.0.1 -p 53 www.example.com

Любой запрос, отправленный на порт 53, должен вернуть какую-либо информацию; ваш адрес отправки, порт и используемый протокол. Запрос также должен быть записан в стандартный вывод.

Конфигурация CoreDNS осуществляется через файл под названием Corefile. При запуске CoreDNS он будет искать Corefile в текущей рабочей директории. Corefile для сервера CoreDNS, который прослушивает порт 53 и включает плагин whoami:

.:53 {
    whoami
}

Иногда порт 53 занят системными процессами. В этом случае вы можете запустить сервер CoreDNS, изменив файл Corefile следующим образом, чтобы сервер CoreDNS запускался на порту 1053.

.:1053 {
    whoami
}

Если у вас есть Corefile, в котором не указан номер порта, по умолчанию он будет использовать порт 53, но вы можете переопределить порт с помощью флага -dns.port: coredns -dns.port 1053, запускает сервер на порту 1053.

Вы можете импортировать другие текстовые файлы в Corefile с помощью директивы import. Вы можете использовать шаблоны для соответствия нескольким файлам одной директивой import.

.:53 {
    import example1.txt
}
import example2.txt
~~~Вы можете использовать переменные окружения в `Corefile` с помощью `{$VARIABLE}`. Обратите внимание, что каждая переменная окружения вставляется в `Corefile` как единственный токен. Например, переменная окружения с пробелом будет воспринята как единственный токен, а не как два отдельных токена.~~~ txt
.:53 {
    {$ENV_VAR}
}

Пример Corefile для сервера CoreDNS, который перенаправляет любые запросы к верхнему DNS-серверу (например, 8.8.8.8):

.:53 {
    forward . 8.8.8.8:53
    log
}

Запустите CoreDNS, а затем выполните запрос на этом порту (53). Запрос должен быть перенаправлен на 8.8.8.8, и ответ будет возвращен. Каждый запрос также должен появляться в журнале, который выводится на стандартный вывод.

Чтобы обслуживать (NSEC) DNSSEC-подписанный example.org на порту 1053, с ошибками и логированием, отправляемыми на стандартный вывод. Разрешите перенос зон всем, но укажите конкретно один IP-адрес, чтобы CoreDNS мог отправлять уведомления на него.

example.org:1053 {
    file /var/lib/coredns/example.org.signed
    transfer {
        to * 2001:500:8f::53
    }
    errors
    log
}

Обслуживание example.org на порту 1053, но перенаправление всего, что не соответствует example.org, на рекурсивный nameserver и переписывание запросов ANY в HINFO.

example.org:1053 {
    file /var/lib/coredns/example.org.signed
    transfer {
        to * 2001:500:8f::53
    }
    errors
    log
}

. {
    any
    forward . 8.8.8.8:53
    errors
    log
}

IP-адреса также допускаются. Они автоматически преобразуются в обратные зоны:

10.0.0.0/24 {
    whoami
}

Значит, вы являетесь авторитетным источником для 0.0.10.in-addr.arpa.. Это также работает для IPv6-адресов. Если по какой-то причине вы хотите обслуживать зону с именем 10.0.0.0/24, добавьте закрывающую точку: 10.0.0.0/24. для прекращения конвертации.Это работает и для CIDR (см. RFC 1518 и 1519), то есть для 10.0.0.0/25, CoreDNS затем будет проверять, попадает ли запрос in-addr в правильный диапазон.

Слушание на TLS (DoT) и для gRPC? Используйте:

tls://example.org grpc://example.org {
    whoami
}

Аналогично, для QUIC (DoQ):

quic://example.org {
    whoami
    tls mycert mykey
}

И для DNS over HTTP/2 (DoH) используйте:

https://example.org {
    whoami
    tls mycert mykey
}

В этом конфигурационном файле CoreDNS будет отвечать за завершение TLS.

Вы также можете запустить DNS-сервер, обслуживающий DoH без завершения TLS (простой HTTP), но будьте осторожны, так как в таком сценарии перед CoreDNS-экземпляром должен быть прокси-сервер для завершения TLS, который перенаправляет DNS-запросы, иначе клиенты не смогут общаться с сервером по протоколу DoH.

https://example.org {
    whoami
}

Указание портов работает аналогичным образом:

grpc://example.org:1443 https://example.org:1444 {
    # ...
}

Когда транспортный протокол не указан, предполагается по умолчанию dns://.

Сообщество

Мы наиболее активны на GitHub (и Slack):

Более ресурсов можно найти:

Правила вклада

Если вы хотите внести вклад в CoreDNS, убедитесь, что вы ознакомились с правилами вклада.## Развертывание

Примеры развертывания через systemd и другие сценарии можно найти в репозитории развертывания.

Политика устаревания

Когда в CoreDNS происходит обратно-несовместимое изменение, используется следующий процесс:

  • Версия x.y.z: Объявление о том, что в следующей версии будут сделаны обратно-несовместимые изменения.
  • Версия x.y+1.0: Увеличение мажорной версии и установка патч-версии в 0. Делаем изменения, но позволяя старое конфигурирование быть распарсенным. То есть CoreDNS будет запускаться из неизмененного Corefile.
  • Версия x.y+1.1: Увеличение патч-версии до 1. Убираем ленивое парсинг, так что CoreDNS не будет запускаться, если эти функции все еще используются. Пример 1.3.1 объявление о изменении. 1.4.0 новая версия с изменением, но совместимая в обратную сторону конфигурация. И наконец 1.4.1 которая убирает обходные пути конфигурации.

Безопасность

Аудит безопасности

Третьими лицами проведены аудиты безопасности:

Отчет о уязвимостях безопасностиЕсли вы обнаружили уязвимость безопасности или любые другие проблемы безопасности, пожалуйста, НЕ создавайте публичный запрос, а отправьте ваш отчет конфиденциально на security@coredns.io. Отчеты о уязвимостях безопасности очень ценны, и мы публично поблагодарим вас за это.Пожалуйста, обратитесь к документу по раскрытию уязвимостей безопасности и процессу выпуска исправлений и версий

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
Go и 2 других языков
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/mirrors-coredns.git
git@api.gitlife.ru:oschina-mirror/mirrors-coredns.git
oschina-mirror
mirrors-coredns
mirrors-coredns
master