Привет, Хабр!

Я полгода в одиночку пилю VantageDNS, privacy-focused recursive DNS с фильтрацией. Аналог NextDNS, юрисдикция EU. Ниже честный построчный разбор того, во что мне на самом деле обходится сеть из 8 нод по миру и контрол-плейн. Не маркетинговое «около ста евро», а реальная цифра, которая каждый месяц списывается с карты: €46.27.

В конце таблица расходов и прикидка, сколько платных юзеров надо, чтобы это перестало быть хобби.

Зачем вообще делать DNS

Сначала пара слов про рынок, чтобы понятно было, зачем вписываться в нишу, где уже сидят Cloudflare, Quad9 и пара крупных нишевых игроков.

NextDNS, по слухам и косвенным признакам, делает что-то порядка $90M ARR. AdGuard публично рассказывает про десятки миллионов устройств. Control D растёт. Ниша рабочая, и она не про «изобрести DoH», а про продукт: дашборд, фильтрлисты, родительский контроль, отчёты. DNS как протокол скучный, скучный продукт вокруг внезапно нет.

Я не пытаюсь стать NextDNS. У них 50+ PoPs, команда, маркетинговый бюджет и пять лет форы. Я делаю узкую штуку: EU-only юрисдикция (Финляндия), прозрачный прайс, XMR-биллинг для параноиков, и человеческую поддержку, потому что я её сам и закрываю по ночам. Это нишевый продукт для людей, которым важен пункт «данные не уезжают в США», а не пункт «P50 в Сан-Паулу 8 мс».

И вот тут начинается экономика.

Архитектура из 8 нод — почему 8, а не 50

Первая реакция на «делаю DNS-сервис» обычно: «тебе нужен anycast и сорок локаций, иначе latency пострадает». Это правда для Cloudflare и для NextDNS. Для маленького EU-нишевого провайдера нет.

Я посчитал. P50 для DoH-резолвера в EU при двух-трёх нодах в Европе укладывается в 25-30 мс для 95% юзеров. Дальше каждая дополнительная нода даёт убывающую отдачу: добавить Варшаву к Хельсинки и Милану это улучшение на 5-8 мс для польских юзеров и ноль для всех остальных. Для рекурсивного резолвера, где сам резолв и так стоит 20-100 мс из-за upstream-цепочки, эти 5 мс на edge вообще не видны.

Поэтому 8 нод выглядят так:

                EU + neighbours
    ┌──────────────────────────────────────────┐
    │  Helsinki (FI)   ──   Reykjavík (IS)     │
    │       │                    │             │
    │       └──── Milan (IT) ────┘             │
    │                  │                       │
    │            Bratislava (SK)               │
    │                  │                       │
    │            Almaty (KZ)                   │
    └──────────────────────────────────────────┘

                Far edge
    ┌──────────────────────────────────────────┐
    │  Tokyo (JP)   São Paulo (BR)             │
    │                Auckland (NZ)              │
    └──────────────────────────────────────────┘

Пять нод покрывают EU и ближние страны, три закрывают Asia/Pacific и Южную Америку с приличным latency. Север (Reykjavík) и юг (São Paulo) — для тех редких юзеров, кому реально 5000 км до ближайшей точки.

Anycast я сознательно не делаю. Это политическое решение: anycast требует своей AS, BGP-провайдера и партнёрств, которые в итоге размывают позиционирование «EU jurisdiction». Когда твой anycast-префикс анонсится из Майами и Сингапура, говорить «мы не отдаём данные в США» становится сложнее. Geo-DNS на dns.vantagedns.com с приоритетом по latency для моего масштаба работает прилично, и я полностью контролирую, куда юзер попадёт.

Как выбирал провайдеров

Я смотрел на четыре параметра: цена за месяц, наличие нужной локации, качество сети (потери, jitter, IPv6), и сколько времени уходит на первый деплой. Имена провайдеров не называю — это рекомендация и реклама, а я предпочитаю писать про принципы. Тех, кто реально хочет, я отправляю на reddit-thread r/webhosting за месяц, и они находят сами.

Принципы такие.

Один европейский low-cost VPS-провайдер с филиалами в нужных мне странах закрыл шесть из восьми моих локаций. Базовый план на 1 vCPU и 1 GB RAM достаточен для edge-ноды: vdns-edge Go-бинарь в нагруженный час съедает 100-200 MB RAM и долю одного ядра. DNS workload это много мелких пакетов, CPU тратится на крипто (TLS handshake) и распарсивание DNS-сообщений, оба этих этапа неприлично дешёвы на современных AMD-ядрах. €1.20 в месяц с включёнными несколькими терабайтами трафика — нормально.

Две оставшиеся локации (Бразилия и Новая Зеландия) пришлось взять у того же провайдера в их региональных филиалах, потому что мой основной хостер туда не дотягивается. Тарифы те же — €1.20.

Что я не стал делать.

Не стал брать «энтерпрайз»-сегмент (AWS, GCP, Azure). И не из-за «дорого вообще», а из-за конкретной строки в их прайсинге, о которой расскажу ниже.

Не стал делать anycast у апстрим-провайдеров. Получить свою AS и анонсировать /24 в BGP — это €500-2000 единовременно и €100-300 в месяц за «BGP-friendly» хостинг. И самое важное — это размывает юрисдикцию: твой anycast-префикс физически анонсится из Майами, и аргумент «EU-only» становится наполовину сказкой.

Не стал брать dedicated-серверы в EU за €40 для edge-нод. На edge dedicated не нужен: workload помещается в 1 GB RAM, диск не нужен, всё in-memory. Dedicated имеет смысл только для control plane, где живёт Postgres и ClickHouse. Туда я взял один VPS пожирнее, об этом ниже.

И вот тут начинается главный разговор — про egress.

Egress costs — самая частая ловушка

Это пункт, на котором ломаются все, кто впервые считает «дешёвую инфру за $5» и потом получает счёт на $300.

DNS-резолвер на каждый запрос делает upstream-обращения, отвечает клиенту, шипит query log в control plane. На ноде с приличной нагрузкой это легко 1-3 TB исходящего трафика в месяц. И вот тарифы:

Класс провайдера

Inclusive egress

После лимита

Low-cost EU VPS (Hetzner, OVH, Aeza-class, …)

5-20 TB

€1-3/TB

DigitalOcean / Vultr / Linode

2-5 TB

$10/TB

AWS EC2 (US-east)

100 GB на аккаунт

0.09/GB (90/TB)

GCP Compute

200 GB

$0.085-0.12/GB

Azure

100 GB

$0.087/GB

Возьмите ноду на AWS за «$3.50 в месяц» с 1 TB inclusive (это Lightsail, у EC2 ещё хуже). Налейте на неё 2 TB реального DNS-трафика. Получите счёт $3.50 + $90 = $93.50. У low-cost EU-VPS за тот же трафик будет €1.20 + €0 = €1.20.

Это главный гэп между «дешёвой инфрой за пять долларов» и «реальностью за двести». Все облачные гиганты зарабатывают на egress, и DNS один из худших workload’ов для них из-за высокого отношения трафика к CPU. Если кто-то предлагает вам делать DNS на AWS plain-instance или на GCP, посмотрите на его счёт через три месяца, он будет интересный.

Все нормальные low-cost VPS-провайдеры (европейские и не очень) дают inclusive egress, которого хватает с запасом. Это не случайность, это бизнес-модель: они продают железо, а не трафик.

Реальная разбивка: €46.27 в месяц

Ниже построчный счёт, который мне приходит каждый месяц. Без приукрашиваний и без «ну плюс-минус полтинник».

Item

€/мес

Note

8× edge-нода (FI, IS, IT, SK, KZ, JP, BR, NZ)

9.60

8 × €1.20, 1 vCPU / 1 GB RAM / inclusive-egress

Control plane VPS (4 vCPU / 8 GB / NVMe)

14.95

Postgres + ClickHouse + API + Redis + BTCPay

Brevo (transactional email)

14.50

до 20k писем/мес

Geo-DNS / health-check провайдер

3.50

latency-routing на dns.vantagedns.com

Backup storage (S3-compatible, 100 GB)

1.72

дамп Postgres + ClickHouse parts

Domains (vantagedns.com + .net + .org amortized)

2.00

~$24/год / 12

Итого

46.27

Округлять не буду: €46.27 в месяц. Цифра, которая реально списывается с карты.

ClickHouse retention сейчас держит ~30 GB на 30-дневном окне (free план 24 часа, paid до 30 дней). Postgres ~3 GB. Redis 100 MB. Control plane VPS с 8 GB RAM и NVMe это всё спокойно тянет с запасом года на полтора при текущей траектории роста. Когда упрусь — мигрирую на dedicated за ~€40, при текущем росте это вопрос 12-18 месяцев.

TLS Let’s Encrypt, бесплатно. MoneroPay для XMR-биллинга и BTCPay self-hosted прямо на control plane, доплачивать никому не надо. Prometheus + Grafana для мониторинга там же. Это всё не отдельные строчки в счёте, а cgroups внутри одного VPS.

Edge-ноды друг с другом и с core общаются через gRPC over TLS на отдельном control-channel домене. Никакого VPN-mesh: лишний слой инкапсуляции, лишний latency, лишняя точка отказа. У восьми нод mesh решительно не нужен.

Что НЕ входит в эти €46

Дальше то, что добавляется к инфре, но обычно не считается «инфраструктурой»:

Item

€/мес

Note

Sentry (Hobby tier)

0

пока бесплатный, апгрейд когда упрёмся

GitHub (Pro)

4

private repos и Actions minutes

Plausible Analytics

9

self-hosted был, оказалось проще платить

Бухгалтерия (Holvi business account)

13

Finnish OSS, обязательно

Юридическое (амортизация регистрации Toiminimi и юриста на старте)

15

разовые ~€500, размазал на 3 года

Резерв на VAT MOSS отчёты

0

сам делаю в OSS Portal

Итого дополнительно

41

Реальная стоимость продукта в месяц получается €87.27. Половину это инфра, половину — софт и операционная обвязка вокруг бизнеса. Когда я сам считал в первый раз, я ожидал, что инфра будет доминантной строкой. По факту инфра меньше, чем GitHub + Plausible + бухгалтерия.

И ещё одна строка, которую считать или нет, личный выбор: мой собственный труд. Если бы я кодил это за рыночную ставку, продукт стоил бы тысяч пятнадцать евро в месяц только за разработку. Без флагов тестирую на себе, что довольно унизительно, но для оценки break-even это не считаем, иначе индихакерство не имеет смысла никогда.

Сколько надо платных юзеров чтобы выйти в плюс

Pro-план VantageDNS стоит €25/мес. После комиссий процессинга (Stripe ~5% effective с учётом международных карт и FX, XMR через MoneroPay ~0.5%) до меня доходит примерно €23 с подписки в среднем по плате.

Вот как выглядит экономика по ступенькам:

Платных

Gross/мес

После комиссий

После налогов (24% Finnish corp + VAT учтён)

Статус

3

€75

€69

€52

инфра окупилась

5

€125

€115

€87

инфра + софт

12

€300

€276

€210

плюс бухгалтерия и легал

30

€750

€690

€524

можно купить кофе

60

€1500

€1380

€1048

пол-зарплаты сисадмина

150

€3750

€3450

€2622

можно жить

300

€7500

€6900

€5244

пора нанимать поддержку

Три платника и сервера платят сами за себя. Двенадцать и я закрываю всю операционную обвязку. Тридцать и я хотя бы оправдываю время. Чтобы добраться до тридцати платников, по статистике NextDNS-клонов нужно где-то 1500-3000 free signups: конверсия free→paid обычно 1-3% на DNS-продуктах. Это много меньше, чем у обычного SaaS, потому что бесплатный план у DNS-провайдеров уже закрывает 90% потребностей частного юзера.

Поэтому маркетинговый прицел не «получить тысячу платных за месяц», а «получить пять тысяч free за год и конвертить медленно, через product-led рост».

Чему научился за полгода

Несколько вещей, которые я хотел бы сказать самому себе пол-года назад.

Не оптимизируй на старте. Разница между €46 и €30 на инфре это 16 евро. За эти 16 евро я бы не нанял даже один час разработчика. Час на торг с провайдером, час на выбор более дешёвого тарифа, час на миграцию, и я уже потратил больше, чем сэкономил за год. На €46 я думаю о продукте. На €30 я думал бы о провайдерах.

Один провайдер с филиалами лучше зоопарка. Я мог бы натащить ноды у пяти разных хостеров «чтобы не было single point of failure». Я не стал. Один провайдер это один биллинг, один аккаунт, один тикет-трекер для саппорта, и одни SSH-ключи, которые ротировать. Single point of failure я закрываю не «вторым хостером», а тем, что edge stateless: если нода умерла, geo-DNS уводит юзеров на соседнюю, на восстановление новой ноды у меня уходит ~12 минут с Ansible-плейбуком.

Egress это главный killer. Если кто-то говорит «у меня DNS на AWS», спросите, сколько он платит за трафик. Если он не знает, подождите пару месяцев и спросите ещё раз. Реальность, как водится, побьёт его палкой по голове.

На control plane дисковый I/O важнее CPU. ClickHouse при retention 30 дней даже на скромной нагрузке хочет приличный NVMe, а на shared SSD будет страдать. Когда выбираете VPS под control plane, не оптимизируйте на RAM, оптимизируйте на NVMe и io-priority.

Геораспределение не самоцель. Три ноды в EU + четыре по миру лучше пятидесяти размазанных, когда у тебя ноль юзеров в Бразилии. Каждая лишняя нода это деплои, мониторинг, certs, патчинг. И когда у тебя 200 платников, ты не можешь себе позволить тратить день на ноду, которая обслуживает четырёх юзеров.

По софт-стеку правило простое: экономь на софте, не на железе. Self-hosted Plausible я держал три месяца, потом понял, что €9 в месяц за SaaS-версию я отбиваю одной ночью без Grafana-алертов от Plausible-контейнера. Sentry, бесплатный tier пока хватает. ClickHouse, open source, ставлю сам, не плачу ClickHouse Cloud €200/мес. Где можно поставить open source и забыть, ставь. Где open source требует постоянного внимания (Plausible, Grafana Cloud), плати.

Что дальше

План на следующие полгода:

  • При 200 paying users мигрировать control plane с VPS на dedicated. Postgres + ClickHouse начнут уставать на 8 GB RAM при таком количестве записей в audit log. Цель — dedicated за ~€40/мес.

  • Добавить Mumbai или Bangalore. Asia-Pacific сейчас прикрыт Токио и Окленд, для индийских юзеров это всё ещё далеко.

  • Вторая control plane нода в режиме hot standby, репликация Postgres + ClickHouse. Это +€15/мес, но единая точка отказа на одном VPS начинает беспокоить уже сейчас.

  • Может быть anycast и BGP это отдельная боль. Но если проект вырастет, рано или поздно anycast станет дешевле, чем поддерживать ручной geo-routing.

Без пафоса

Никакого «exciting times» и «the future looks bright». Просто €46 на инфру, €87 с операционной обвязкой, 8 нод, три платника чтобы окупиться, тридцать чтобы оправдать время.

Если делаете что-то похожее, pro tip всего один: считайте egress до того, как выбираете хостинг. Всё остальное мелочи на фоне счёта от AWS за исходящий трафик.

И ещё. Любой нормальный европейский low-cost VPS-провайдер с филиалами и inclusive-трафиком закроет вам 90% случаев за десятку в месяц. Имена не подсказываю принципиально: я не амбассадор. Найти не сложно — берёте субреддит r/webhosting, листаете месяц назад, в каждом втором треде спорят про конкретно ваш кейс.

Ссылки