Установка и использование serverless-dns
Установка Node.js через NVM:
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
nvm install --lts
npm i
(Необязательно) Обновите зависимости:
npm update
./run n
Для запуска профилировщика clinicjs.org используйте команду:
./run n [cpu|fn|mem]
Deno:
curl -fsSL https://deno.land/install.sh | sh
Запустите serverless-dns на Deno:
./run d
Fastly:
./run f
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
.
Поток запросов
src/server-[node|workers|deno]
<-> doh.js
<-> plugin.js
.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
.
msg-key
в конец блока штампа, например:
1:1:4AIggAABEGAgAA:<msg-key>
(здесь 1
— версия, 1:4AIggAABEGAgAA
— блок штампа, <msg-key>
— секретный ключ, а :
— разделитель).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.
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×tamps=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 )