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

OSCHINA-MIRROR/mirrors-serverless-dns

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

Установка и использование serverless-dns

  • Установка Node.js через NVM:

    • Если необходимо, установите Node.js версии 19 или выше с помощью NVM.
    • Для установки и обновления следуйте инструкциям на странице GitHub проекта NVM: https://github.com/nvm-sh/nvm#installing-and-updating.
    wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
    nvm install --lts
    • Скачайте зависимости:
    npm i

    (Необязательно) Обновите зависимости:

    npm update
    • Запустите serverless-dns на Node:
    ./run n

    Для запуска профилировщика clinicjs.org используйте команду:

    ./run n [cpu|fn|mem]
    • Deno:

      curl -fsSL https://deno.land/install.sh | sh

      Запустите serverless-dns на Deno:

      ./run d
    • Fastly:

      • (Если необходимо) Установите Node.js версии 18 или выше через NVM.
      • Установите CLI Fastly.
      • Запустите serverless-dns на Fastly Compute@Edge:
    ./run f
    • Wrangler:
      • Установите Cloudflare Workers (cli), также известный как Wrangler.
      • Для этого выполните команду:
    npm i wrangler --save-dev

    Установите аутентификацию для Wrangler: https://developers.cloudflare.com/workers/cli-wrangler/authentication.

    Запустите serverless-dns на Cloudflare Workers (cli):

    ./run w

    Профилируйте Wrangler с помощью Chrome DevTools: blog.cloudflare.com/profiling-your-workers-with-wrangler.

Стиль кода

В этом репозитории используется стиль кодирования, соответствующий руководству Google JavaScript Style Guide (см. .eslintrc.cjs).

Перед фиксацией изменений в репозиторий выполняется проверка с использованием linter (eslint) и formatter (prettier). Чтобы пропустить эту проверку, используйте команду git commit --no-verify.

Pull requests также проверяются на соответствие стилю кода и автоматически исправляются, если это возможно.

Переменные окружения

Настройте переменные окружения в файле env.js, если вам нужно изменить значения по умолчанию.

Для Cloudflare Workers настройте переменные окружения в файле wrangler.toml.

Для Fastly Compute@Edge настройте переменные окружения в файле fastly.toml.

Поток запросов

  1. Поток запроса/ответа: клиент <-> src/server-[node|workers|deno] <-> doh.js <-> plugin.js.
  2. Поток plugin.js: user-op.js -> cache-resolver.js -> cc.js -> resolver.js.

Аутентификация

serverless-dns поддерживает аутентификацию с помощью альфа-числового токена-носителя для DoH и DoT. Для получения токена добавьте вывод hex(hmac-sha256(msg-key|domain.tld), msg) к переменной среды ACCESS_KEYS в формате CSV. Обратите внимание, что msg в настоящее время фиксирован на sdns-public-auth-info.

  1. DoH: поместите ключ msg-key в конец блока штампа, например: 1:1:4AIggAABEGAgAA:<msg-key> (здесь 1 — версия, 1:4AIggAABEGAgAA — блок штампа, <msg-key> — секретный ключ, а : — разделитель).
  2. DoT: поместите msg-key в конце SNI (доменное имя), содержащего блокштамп: 1-4abcbaaaaeigaiaa-<msg-key> (здесь 1 — версия, 4abcbaaaaeigaiaa — блокштамп, <msg-key> — секретный ключ, - — разделитель).

Если вы планируете использовать аутентификацию и с DoT, то ключ msg-key должен быть короче (от 8 до 24 символов), так как длина поддоменов не должна превышать 63 символа.

Вы можете создать ключи доступа для своего форка на сайте max.rethinkdns.com, выполнив следующие действия:

msgkey="ShortAlphanumericSecret"
domain="my-serverless-dns-domain.tld"
curl 'https://max.rethinkdns.com/genaccesskey?key='"$msgkey"'&dom='"$domain"
# output
# {"accesskey":["my-serverless-dns-domain.tld|deadbeefd3adb33fa2bb33fd3eadf084beef3b152beefdead49bbb2b33fdead83d3adbeefdeadb33f"],"context":"sdns-public-auth-info"}

Логирование и аналитика

serverless-dns можно настроить для отправки логов через Cloudflare Logpush.

  1. Настройте задание Logpush:
    CF_ACCOUNT_ID=<hex-cloudflare-account-id>
    CF_API_KEY=<api-key-with-logs-edit-permission-at-account-level>
    R2_BUCKET=<r2-bucket-name>
    R2_ACCESS_KEY=<r2-access-key-for-the-bucket>
    R2_SECRET_KEY=<r2-secret-key-with-read-write-permissions>
    # optional, setup a filter such that only logs form this worker ends up being pushed; but if you
    # do not need a filter on Worker name (script-name), edit the "filter" field below accordingly.
    SCRIPT_NAME=<name-of-the-worker-as-in-wrangler-toml>
    # for more options, ref:

*Logpush API с cURL:*

developers.cloudflare.com/logs/tutorials/examples/example-logpush-curl

*Доступные поля Logpull:*

developers.cloudflare.com/logs/reference/log-fields/account/workers_trace_events

Выполните команду curl:

curl -s -X POST "https://api.cloudflare.com/client/v4/accounts/${CF_ACCOUNT_ID}/logpush/jobs" \
    -H "Authorization: Bearer ${CF_API_KEY}" \
    -H 'Content-Type: application/json' \
    -d '{
        "name": "dns-logpush",
        "logpull_options": "fields=EventTimestampMs,Outcome,Logs,ScriptName&timestamps=rfc3339",
        "destination_conf": "r2://'"$R2_BUCKET"'/{DATE}?access-key-id='"${R2_ACCESS_KEY}"'&secret-access-key='"${R2_SECRET_KEY}"'&account-id='"{$CF_ACCOUNT_ID}"',
        "dataset": "workers_trace_events",
        "filter": "{\"where\":{\"and\":[{\"key\":\"ScriptName\",\"operator\":\"contains\",\"value\":\"'"${SCRIPT_NAME}"'\"},{\"key\":\"Outcome\",\"operator\":\"eq\",\"value\":\"ok\"}]}}",
        "enabled": true,
        "frequency": "low"
    }'

1. Установите свойство wrangler.toml logpush = true, которое включает Logpush.
2. (Необязательно) env var LOG_LEVEL = "logpush", который повышает уровень журнала, так что будут выдаваться только журналы запросов и ошибок.
3. (Необязательно) Установите env var LOGPUSH_SRC = "csv,of,subdomains", который заставляет [log-pusher.js](./src/plugins/observability/log-pusher.js) выдавать журналы запросов только в том случае, если имя хоста Workers содержит один из поддоменов.

Логи, опубликованные в R2, можно получить с помощью [Рабочих R2](https://developers.cloudflare.com/r2/data-access/workers-api/workers-api-usage), [API R2](https://developers.cloudflare.com/r2/data-access/s3-api/api) или [Logpush API](https://developers.cloudflare.com/logs/r2-log-retrieval).

Аналитика Workers, если она включена, применяется к ключу журнала lid, который, если не указан, устанавливается равным имени хоста бессерверного развёртывания с заменой точек на символы подчёркивания. При запросе аналитики через API необходимо настроить аутентификацию, которая возвращает json; например: https://max.rethinkdns.com/1:<optional-stamp>:<msg-key>/analytics?t=<time-interval-in-mins>&f=<field-name>. Возможные поля: ip (клиентский IP), qname (имя DNS-запроса), region (регион распознавателя), qtype (тип DNS-запроса), dom (домены верхнего уровня), ansip (IP-адреса ответов DNS) и cc (коды стран по IP-адресам ответов DNS).

Сбор логов и аналитика ещё не реализованы для Fly и Deno Deploy.

**Примечание о средах выполнения**

Deno Deploy (облако) и Deno (среда выполнения) не предоставляют одинаковый интерфейс API (например, Deno Deploy поддерживает только серверные прослушиватели HTTP/S; тогда как Deno поддерживает необработанные TCP/UDP/TLS в дополнение к простым HTTP и HTTP/S).

За исключением Node, serverless-dns использует восходящие потоки DoH, определённые переменными среды CF_DNS_RESOLVER_URL и CF_DNS_RESOLVER_URL_2. На Node по умолчанию используется восходящий поток DNS 1.1.1.2 (см. ссылку) или рекурсивный DNS-распознаватель по адресу fdaa::3 при работе на Fly.io.

Точки входа для Node и Deno — это src/server-node.js и src/server-deno.ts соответственно, и оба они прослушивают соединения TCP-over-TLS и HTTP/S. Точкой входа для Cloudflare Workers, которая слушает только через HTTP (cli) или через HTTP/S (prod), является src/server-workers.js, а для Fastly — src/server-fastly.js.

Локальные (непроизводственные) настройки на Node считывают файлы key (закрытый ключ) и cert (открытая цепочка) по путям, определённым в переменных среды TLS_KEY_PATH и TLS_CRT_PATH.

Для производственной настройки на Node (на Fly.io) либо TLS_OFFLOAD должен быть установлен в значение true, либо key и cert должны быть представлены в кодировке base64 в переменной среды TLS_CERTKEY (см. ссылку), например:
```bash
# EITHER: offload tls to fly.io and set tls_offload to true
TLS_OFFLOAD="true"
# OR: base64 representation of both key (private) and cert (public
``` **Текст запроса:**

TLS_CERTKEY="KEY=b64_key_content\nCRT=b64_cert_content"


**Перевод:**

«TLS_CERTKEY = "KEY = b64_key_content \n CRT = b64_cert_content"».

*Примечание: в запросе отсутствует текст для перевода, поэтому ответ представляет собой дословный перевод исходного текста.* Во время начальной настройки radix-trie во время запуска или при необходимости файлы загружаются лениво (lazily) по ссылке https://github.com/serverless-dns/serverless-dns/blob/02f9e5bf/src/plugins/dns-op/resolver.js#L167 при обработке DNS-запроса.

В проекте serverless-dns скомпилировано около 13 миллионов записей (по состоянию на январь 2023 года) из более чем 190 blocklists. Они определены в репозитории serverless-dns / blocklists по ссылке  https://github.com/serverless-dns/blocklists.

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

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

Введение

Резолвер RethinkDNS, который развёртывается на Cloudflare Workers, Deno Deploy и Fly.io. Развернуть Свернуть
JavaScript и 4 других языков
MPL-2.0
Отмена

Обновления

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

Участники

все

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

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