Безкоштовні піддомени nip.io та sslip.io - 2026 - UA
Published: 2026-09-18
Про що ця стаття
У кожного розробника рано чи пізно виникає одна й та сама проблема: є машина з IP-адресою, але без доменного імені. Це може бути ноутбук із вебзастосунком, який треба налагодити локально, тестовий сервер за звичайним IPv4, чи віртуальна машина в хмарі, що так і не отримала «людського» імені. Без доменного імені не можна отримати дійсний TLS-сертифікат, не можна звертатися до сервісу по памʼятному адресу, і до всього додаються проблеми з cookie, змішаним контентом та налаштуваннями середовища.
Сервіси nip.io та її спадкоємець sslip.io вирішують це завдання напрочуд просто: IP-адреса вбудовується прямо в імʼя хоста. Запишіть у браузері 64.176.22.9.nip.io — і DNS-відповідь міститиме саме 64.176.22.9. Жодної реєстрації, жодної панелі керування, жодних обмежень на кількість хостів. Сервіс працює за принципом wildcard DNS і відповідає на будь-яке імʼя, у якому є коректна IP-адреса.
За понад десять років цей прийом став фактичним стандартом індустрії для розробки та тестування. На nip.io посилаються офіційні документації Google Cloud Platform (Knative Serving), Amazon Web Services (EKS і Teleport), Microsoft Azure (автомасштабування AKS), IBM Redbooks та AMD Enterprise AI. У 2026 році три публічні nameserver'и обслуговують приблизно 29 000 DNS-запитів на секунду, а загальна кількість відповідей вимірюється десятками мільярдів.
Ця стаття — покроковий розбір: як усе працює всередині, які формати hostname підтримуються, як користуватися сервісом у реальних проєктах, як отримувати безкоштовні сертифікати, як перенести таку саму логіку на власний домен (white-label), як підняти власний DNS-сервер і чим сервіс відрізняється від аналогів на кшталт traefik.me, backname.io та xip.io.
Як це працює
Трішки про DNS
Domain Name System перекладає зрозумілі людині імена на кшталт google.com у машинні IP-адреси. Коли ви відкриваєте сайт, ваш браузер звертається до рекурсивного резолвера (зазвичай це DNS інтернет-провайдера або публічний сервер на зразок 8.8.8.8), а той, своєю чергою, йде до авторитативних nameserver'ів, які обслуговують потрібну зону. Авторитативні сервери — це «джерело істини» для свого домену: саме вони відповідають на запити A (IPv4), AAAA (IPv6), NS, SOA, MX, TXT, CNAME та інші.
nip.io виступає саме таким авторитативним nameserver'ом — але лише для зон nip.io та sslip.io. Він не є рекурсивним резолвером: не відповідає на запити про сторонні домени і не зможе розвʼязати для вас google.com. Його єдине завдання — прийняти запит про імʼя з вбудованою IP-адресою, витягти цю адресу з імені та повернути її у відповіді.
Головний трюк: IP усередині hostname
DNS-імена можуть містити літери, цифри, дефіси та крапки. Крапка — це розділювач міток, і саме тому «класична» форма 127.0.0.1 незручна: крапкові імена породжують зайві суфіксні запити. Натомість дефісна форма 192-168-0-1.nip.io читається як звичайне імʼя, проте сервер розуміє, що 192-168-0-1 — це закодована адреса 192.168.0.1.
З IPv6 той самий підхід: двокрапки в DNS-мітках заборонені, тож їх замінюють дефісами, а групу нулів :: записують подвійним дефісом --. Loopback ::1 перетворюється на --1, а публічний DNS Google 2001:4860:4860::8888 — на 2001-4860-4860--8888.
Що всередині Go-сервера
Сучасний сервер sslip.io написано на Go (модуль xip, Go 1.25), і він напрочуд компактний. Уся логіка розміщена у двох файлах:
main.go— мережевий рівень: прийом UDP- та TCP-пакетів на порту 53, читання запитів, запис відповідей, інтеграція з dnstap.xip/xip.go— власне DNS-логіка: розбір імені, витяг IP, блоклист, побудова відповіді, кастомізації та метрики.
У сервера рівно одна зовнішня бібліотека часу виконання — golang.org/x/net, з якої використовується пакет dns/dnsmessage для розбору та збірки DNS-пакетів у wire-форматі. Усе інше — стандартна бібліотека Go. Навіть підтримку dnstap (протокол потокової DNS-телеметрії на основі protobuf) реалізовано вручну, з власним varint-кодуванням і без зовнішніх protobuf-бібліотек.
Шлях обробки запиту виглядає так:
UDP/TCP пакет → парсер dnsmessage → processQuestion() ├── A → String2IPv4() + перевірка блоклиста + запис A ├── AAAA → NameToAAAA() + перевірка блоклиста + запис AAAA ├── NS → ротація списку nameserver'ів + glue-записи ├── SOA → MNAME = імʼя з запиту ├── TXT → лише з кастомізацій (SPF, DMARC, version, metrics) ├── PTR → розбір in-addr.arpa / ip6.arpa ├── MX → ProtonMail (для nip.io/sslip.io) або саме імʼя ├── CNAME → лише статичні кастомізації (DKIM) └── ANY → відповідь NOTIMP (RFC 8482) → збірка відповіді через dnsmessage.Builder → відправка клієнту
Як сервер розпізнає IP-адресу
Витяг IPv4
Функція String2IPv4 послідовно пробує три регулярні вирази в строгому порядку пріоритету:
- Дефісна форма: чотири десяткові октети, розділені дефісами, наприклад
192-168-1-1. Дефіси замінюються крапками, і виходить коректна IPv4-адреса. - Крапкова форма: класичний запис
127.0.0.1. Повністю підтримується, але вважається менш бажаним кодуванням. - Hex-форма: рівно вісім шістнадцяткових цифр, як-от
7f000001, які декодуються в чотири байти. Так,7f000001.nip.ioвідповідає 127.0.0.1, а40B01609.nip.io— адресі 64.176.22.9. Hex-запис не чутливий до регістру:ffffFFFF.nip.ioдасть 255.255.255.255.
Пріоритет жорсткий: «дефіси виграють у крапок, крапки — у hex». Якщо в імені кілька IP-подібних фрагментів, перемагає той, що обирається за цим правилом — юніт-тести окремо перевіряють усі три пари.
Є й тонкі правила форматування. Октети понад 255 відхиляються. Октети з провідним нулем (як-от 09) теж відхиляються. А службові імена на зразок ns-01.nip.io, де дефіс є, але чотирьох октетів немає, коректно відрізняються від вбудованих IP-адрес.
Витяг IPv6
Для IPv6 підтримуються дві нотації:
- Дефісна нотація: один великий регулярний вираз, що покриває всі девʼять варіантів стиснення
::, IPv4-mapped адреси (::ffff:1.2.3.4) та link-local адреси з zone ID (наприклад, fe80--...%en0). Дефіси стають двокрапками, після чого адреса нормалізується через net.ParseIP. - Hex-крапкова нотація: рівно 32 шістнадцяткові цифри, розділені крапками, наприклад
2001.0db8.0000.0000.0000.0000.0000.0001. Для hex-форми дозволені лише крапкові розділювачі.
Сервер також уміє зворотний DNS. Запит 1.0.0.127.in-addr.arpa повертає 127-0-0-1.nip.io (або домен, заданий флагом -ptr-domain), а зворотні запити IPv6 у зоні ip6.arpa підтримуються так само.
Поведінка в граничних випадках
Розробники подумали і про крайові ситуації:
- На пакет із кількома питаннями сервер відповідає лише на перше — це де-факто стандарт, повністю сумісний із поведінкою більшості DNS-клієнтів.
- Відповіді завжди містять флаг RecursionAvailable = false. Сервер принципово не працює як відкритий резолвер.
- Авторитативні відповіді позначені флагом Authoritative. Виняток — делегування (DNS-01 challenge), де відповідь будується в секції AUTHORITY.
- NS-записи ротуються щосекунди: порядок nameserver'ів у відповіді змінюється, щоб розподіляти навантаження між трьома вузлами без балансувальника.
- Для кожного nameserver'а сервер додає glue-записи A та AAAA в секцію ADDITIONAL, щоб клієнт міг негайно встановити зʼєднання.
Типи DNS-записів
Поведінка сервера для кожного типу запитів строго визначена та покрита тестами.
| Тип запису | Підтримка | Поведінка |
|---|---|---|
| A | Так | Витяг IPv4 з імені: дефіси, крапки чи hex; перевірка блоклиста; TTL 3600 для динамічних імен |
| AAAA | Так | Витяг IPv6 у дефісній чи hex-крапковій формі; перевірка блоклиста; TTL 3600 |
| NS | Так | Повертає три nameserver'и зі щосекундною ротацією; A/AAAA glue додається в ADDITIONAL |
| SOA | Так | MNAME дорівнює імені із запиту, serial 20260704; використовується і як пряма, і як негативна відповідь у AUTHORITY |
| TXT | Частково | Лише з кастомізацій: SPF, DMARC, версія сервера, метрики, визначення IP клієнта; TTL 180 |
| PTR | Так | Зворотний DNS для IPv4 (in-addr.arpa) та IPv6 (ip6.arpa) — повертає дефісне імʼя під PTR-доменом |
| MX | Так | Для nip.io та sslip.io — записи ProtonMail (10 mail.protonmail.ch, 20 mailsec.protonmail.ch); для решти — саме імʼя з пріоритетом 0 |
| CNAME | Частково | Лише статичні кастомізації (протокол-записи DKIM protonmail._domainkey) |
| ANY | Ні | Відповідь NOTIMP за RFC 8482 — так само, як у Cloudflare |
| SRV | Ні | Відсутній; для невідомих типів — порожня відповідь із SOA в AUTHORITY |
Стратегія TTL продумана:
- Динамічні записи A/AAAA для імен зі вбудованим IP — короткий TTL 3600 секунд (одна година). Якщо адресу треба внести в блоклист, старі кешовані записи швидко вичерпаються.
- Статичні та кастомізовані записи (NS, SOA, MX, CNAME) — довгий TTL 604800 секунд (один тиждень).
- TXT-записи — короткий TTL 180 секунд, щоб зміни SPF, DKIM і DMARC швидко поширювались.
- Відповіді-пастки (sinkhole) для заблокованих імен — довгий TTL 604800 секунд: заблокована адреса має надовго лишатися недосяжною.
Вбудовані кастомізації
Частину відповідей задано явно — це важливо для поштової доставки та службових функцій:
- Власні зони nip.io та sslip.io мають MX-записи ProtonMail, тож пошту на ці домени неможливо перенаправити повз.
- SPF — запис
v=spf1 include:_spf.protonmail.ch mx -all. - DMARC — політика
v=DMARC1; p=reject, тобто вся пошта, що не пройшла SPF, відхиляється. - DKIM-записи protonmail._domainkey реалізовані через CNAME на ProtonMail.
- Службові TXT-записи version.status і metrics.status віддають телеметрію сервера.
- Запис ip.nip.io (або ip.sslip.io) повертає IP-адресу того, хто поставив запитання.
- Імені blocked.nip.io відповідають спеціальні A- та AAAA-записи — це «пастка» (sinkhole) для заблокованих імен.
Таблиця форматів hostname
Офіційний сайт наводить такі приклади. Домени nip.io та sslip.io повністю взаємозамінні.
| Hostname | Розвʼязується в | Примітка |
|---|---|---|
| https://64.176.22.9.nip.io | 64.176.22.9 | Крапкова форма, IPv4 |
| https://64-176-22-9.nip.io | 64.176.22.9 | Дефісна форма, IPv4 |
| www.192.168.0.1.nip.io | 192.168.0.1 | Піддомен перед IP |
| www.192-168-0-1.nip.io | 192.168.0.1 | Піддомен + дефіси |
| https://www-78-46-204-247.nip.io | 78.46.204.247 | Дефісний префікс перед адресою |
| --1.nip.io | ::1 | IPv6 — лише дефіси, ніколи крапки |
| https://2a01-4f8-c17-b8f--2.nip.io | 2a01:4f8:c17:b8f::2 | IPv6 із групою нулів |
| https://40B01609.nip.io | 64.176.22.9 | Hex-форма, IPv4 |
| 7f000001.nip.io | 127.0.0.1 | Hex-запис loopback |
| 2001-0db8-0000-0000-0000-0000-0000-0001.nip.io | 2001:db8::1 | Повний дефісний запис IPv6 |
| fe80--...%zone.nip.io | link-local з zone ID | Спеціальний випадок IPv6 |
Найпростіше перевірити сервіс утилітою dig (входить у пакети dnsutils / bind-utils):
# Прямий запит до публічного nameserver'а dig @ns.nip.io 192-168-0-1.nip.io +short # → 192.168.0.1 # Крапкова форма теж працює dig @ns.nip.io 192.168.0.1.nip.io +short # → 192.168.0.1 # IPv6 (подвійний дефіс = ::) dig @ns.nip.io --1.nip.io aaaa +short # → ::1 # Зворотний DNS dig @ns.nip.io -x 127.0.0.1 # → 127-0-0-1.nip.io # Обидві зони одразу for ip in 10 192-168-0-1; do echo "$ip.nip.io = $(dig +short $ip.nip.io @ns.nip.io)" echo "$ip.sslip.io = $(dig +short $ip.sslip.io @ns.nip.io)" done
Корисно знати одну хитрість: провідні дефіси плутають dig, який сприймає --1.nip.io як прапорець. Розвʼязання — ключ -q:
dig +noidnout +noidnin -q --1.nip.io aaaa
Ще одна практична порада: для IPv4 краще обирати дефісну форму (10-9-9-30.nip.io), а не крапкову (10.9.9.30.nip.io). Крапкове імʼя змушує резолвер іти ланцюжком суфіксів (30.nip.io, 9.30.nip.io, 9.9.30.nip.io тощо), перш ніж він знайде найкращу мітку. У результаті крапкова форма генерує приблизно вдвічі більше запитів до сервера. За 29 000 запитів на секунду це реальний трафік, тому автори прямо радять дефіси.
Де це застосовують
Локальна розробка
Найчастіший сценарій — локальна розробка вебзастосунків. Класичний біль: фронтенд на порту 8080 звертається до API на іншому порту, а політика змішаного контенту змушує браузер відмовляти незахищеним ресурсам. Рішення на базі localhost мають обмеження: заголовок Host завжди дорівнює localhost, а деякі фреймворки не люблять «нестандартних» імен.
nip.io прибирає цей біль: 127.0.0.1.nip.io миттєво розвʼязується в 127.0.0.1, а вебсервер отримує справжній сертифікат Let's Encrypt. На одній машині можна підняти десятки віртуальних хостів — app1.127.0.0.1.nip.io, app2.127.0.0.1.nip.io тощо, і кожен отримає власний сертифікат.
Варто памʼятати про DNS-rebinding protection: деякі браузери та резолвери блокують імена, що розвʼязуються в приватні діапазони. У більшості середовищ nip.io із приватними адресами (127.x, 10.x, 192.168.x) працює коректно, але якщо провайдер чи корпоративний DNS блокує такі відповіді, вихід — власний екземпляр сервера. Це обмеження екосистеми, а не баг сервісу; про нього згадано навіть у репозиторії оригінального nip.io.
Kubernetes, Knative та хмари
Завдяки інтеграції з ingress-контролерами та сервісами типу Knative Serving nip.io став де-факто стандартом динамічних доменів у Kubernetes. Офіційна документація Google Cloud для Knative Serving використовує піддомени виду 10-10-10-10.nip.io як приклад default domain. Сервіс згадується і в матеріалах AWS (аутентифікація EKS через Teleport), Microsoft Azure (автомасштабування AKS-мікросервісів), IBM Redbooks та AMD Enterprise AI. Патерн завжди один: кластерові, що створює сервіси динамічно, потрібен універсальний шаблон доменних імен, і вбудувати в нього IP-адресу вузла — найдешевший і найуніверсальніший спосіб.
У Kubernetes це зручно, бо і для сервісного трафіку, і для ingress потрібні стабільні імена. Коли середовища створюються динамічно (review apps, feature branches, preview environments), імена на кшталт [branch].127-0-0-1.nip.io генеруються автоматично: унікальні, а IP береться з фактичного вузла.
Для продакшн-динаміки краще делегувати окрему зону на власному домені (white-label), а nip.io лишити для розробки, стейджингу та тестів.
Зворотні проксі
Traefik або Caddy як локальний зворотний проксі — це фактично друге рідне середовище сервісу. Ось канонічний приклад з Traefik і Docker Compose: два тестові застосунки доступні як app1.traefik.me і app2.traefik.me з вашої машини та як app1.10.0.0.1.traefik.me з будь-якого пристрою в локальній мережі:
version: '3'
services:
traefik:
restart: unless-stopped
image: traefik:v2.0.2
command: --providers.docker=true
ports:
- "80:80"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
app1:
image: containous/whoami
labels:
- "traefik.http.routers.app1.rule=Host(`app1.traefik.me`)"
app2:
image: containous/whoami
labels:
- "traefik.http.routers.app2.rule=Host(`app2.traefik.me`)"
Запустіть docker-compose up — і браузер відкриє app1.traefik.me без жодних правок /etc/hosts. Щоб дістатися до контейнера з телефона чи планшета в тій самій мережі, додайте правило HostRegexp із маскою IP:
- "traefik.http.routers.app1.rule=HostRegexp(`app1.{ip:.*}.traefik.me`)"
Після цього http://app1.10.0.0.1.traefik.me з будь-якого пристрою LAN потрапляє в контейнер app1. Те саме працює і з доменом nip.io.
Автоматичні TLS-сертифікати
Головна цінність сервісу для сучасного вебу — автоматичний TLS. Центри сертифікації Let's Encrypt і ZeroSSL підтримують HTTP-01 challenge: вебсервер публікує тимчасовий файл за адресою http://імʼя-хоста/.well-known/acme-challenge/..., CA перевіряє, що hostname справді веде на ваш сервер, і видає сертифікат. Оскільки 64.176.22.9.nip.io розвʼязується саме у ваш IP, усе відбувається без ручних дій.
Найпопулярніший інструмент — вебсервер Caddy, який отримує та продовжує сертифікати автоматично:
# Приклад Caddyfile для хоста з IP 64.176.22.9
64.176.22.9.nip.io {
reverse_proxy 127.0.0.1:8080
}
Caddy сам згенерує валідний сертифікат Let's Encrypt для 64.176.22.9.nip.io і автоматично продовжуватиме його. Те саме стосується www.64.176.22.9.nip.io, prod.www-64-176-22-9.nip.io та будь-яких інших комбінацій. Caddy підтримує навіть On-Demand TLS — отримання сертифіката «на льоту» під час TLS-рукопотискання, що чудово поєднується з wildcard-структурою nip.io.
Зворотний DNS для налагодження
PTR-записи стають у пригоді під час діагностики мережі. Запит до 1.0.168.192.in-addr.arpa через nameserver'и nip.io повертає 192-168-0-1.nip.io. Це дозволяє тестувати конфігурації, де важлива передбачувана пара forward/reverse записів, наприклад поштові сервери чи тестові лабораторії. Зворотні запити IPv6 у зоні ip6.arpa працюють так само.
«Безкоштовний динамічний DNS»
Оскільки імʼя містить адресу буквально, nip.io не потребує механізму динамічних DNS-оновлень. Змінилась адреса? Перепишіть hostname. Це чудовий спосіб тестувати конфігурації зі змінними адресами без керування DNS-зонами. Якщо ж потрібен стабільний піддомен, що тримається за адресою, яка змінюється, без перейменування, — зверніться до afraid.org чи ipq.co (див. розділ «Альтернативи»).
SSH-тунелі та VPN
Менш очевидний сценарій — доступ до внутрішніх сервісів через тунель. Припустімо, є публічний сервер і тунель до внутрішньої мережі компанії. Колегам потрібен запамʼятовуваний HTTPS-адрес внутрішнього вебінтерфейсу, але внутрішньою DNS-зоною ви не керуєте. Тоді на шлюзі піднімається Caddy чи nginx, що розвʼязує wiki.10-0-0-44.nip.io у внутрішню адресу 10.0.0.44 і проксіює трафік. Внутрішні клієнти дістаються ресурсу захищеним каналом, а сертифікат отримується тим самим автоматичним способом.
CI та тестові стенди
У конвеєрах безперервної інтеграції домени nip.io часто використовують для перевірки TLS-конфігурації. Пайплайн піднімає тимчасове середовище, генерує імʼя з IP машини і проганяє навантажувальні чи інтеграційні тести, очікуючи валідний HTTPS. Завдяки автоматичним сертифікатам і відсутності реєстрації такий стенд піднімається за хвилини і так само швидко зникає, не лишаючи сміття в DNS вашої організації.
TLS та Let's Encrypt
Сертифікат для hostname nip.io/sslip.io отримується штатно через HTTP-01 challenge. Єдине практичне застереження — ліміти Let's Encrypt. Історія показова: центр сертифікації піднімав ліміт для сервісу з 50 до 250 000 сертифікатів, а запит на 500 000 відхилив зі словами «Це занадто багато, щоб ми могли це підтримати». Для звичайних користувачів публічні щотижневі ліміти на домен рідко досягаються під час розробки.
Якщо запит сертифіката на nip.io уперся в rate limit:
- спробуйте сертифікат на IP-адресу (від 15 січня 2026 року Let's Encrypt надає публічні IP-сертифікати та спростив видачу короткоживучих шестиденних сертифікатів);
- спробуйте інший домен — якщо використовувався nip.io, запитайте сертифікат для sslip.io;
- скористайтеся дотичними сервісами (traefik.me, backname.io).
Актуальні IP-сертифікати короткоживучі (160 годин — трохи більше шести днів), що пасує транзитній природі IP-адрес: валідація відбувається частіше, тож ризик використання відкликаних ключів нижчий.
Важливо: nip.io та sslip.io не підтримують wildcard-сертифікати — отримати *.nip.io неможливо. Кожен окремий hostname обслуговується власним сертифікатом. Це свідоме архітектурне рішення, що зміцнює безпеку екосистеми.
White-label: логіка nip.io на власному домені
Ключова особливість sslip.io — white-label: ви можете «позичити» технологію для власного домену. Зони nip.io чи sslip.io зовсім не обовʼязкові — будь-який піддомен, наприклад xip.mydomain.com, може поводитися так само.
Процедура така:
- Оберіть піддомен, наприклад
nip.mydomain.com. - У DNS-панелі реєстратора делегуйте цей піддомен трьом публічним nameserver'ам сервісу, вказавши їх у NS-записах.
- Відтоді запити до
127-0-0-1.nip.mydomain.comавтоматично потрапляють на сервери sslip.io, які відповідають 127.0.0.1.
Необхідні nameserver'и (актуально з червня 2026 року; адреси двох nameserver'ів змінилися, і застарілі NS-записи спричиняють SERVFAIL):
| Hostname | IPv4 | IPv6 | Розташування |
|---|---|---|---|
| ns-00.nip.io | 167.172.4.236 | 2400:6180:0:d2:0:2:e3e7:0 | Сінгапур |
| ns-01.nip.io | 5.78.28.211 | 2a01:4ff:1f2:10d:: | США |
| ns-ovh.sslip.io | 51.75.53.19 | 2001:41d0:602:2313::1 | Польща |
Перевірити делегування можна через dig, явно вказавши nameserver:
dig @ns-ovh.nip.io. 169-254-169-254.nip.example.com +short # → 169.254.169.254
Оператори голосно попереджають (червень 2026): white-label користувачам обовʼязково треба оновити nameserver'и. Імена та адреси двох nameserver'ів змінилися, і ті, хто не оновив NS-записи, отримують SERVFAIL.
Також зауважте: ці nameserver'и не є рекурсивними резолверами. Ніколи не вказуйте їх як DNS операційної системи — вони обслуговують лише зони зі вбудованими IP-адресами.
Організаціям, що прагнуть повного контролю, рекомендовано запускати власний екземпляр із флагом -public=false — це виключає ризик фішингу через публічні IP-адреси на їхньому домені.
Власний DNS-сервер
Відкрита архітектура дозволяє підняти власний екземпляр — для air-gapped мереж, тестування та організацій, що не хочуть залежати від зовнішнього сервісу. Рішення повністю автономне: йому не потрібен інтернет, а власні адреси, NS-записи та PTR-домен задаються флагами.
Швидкий старт із вихідних кодів
git clone https://github.com/cunnie/sslip.io.git cd sslip.io go mod tidy sudo go run . # sudo потрібен для порту 53
В іншому терміналі:
dig @localhost 192.168.0.1.sslip.io +short # → 192.168.0.1
Docker
Офіційний образ називається cunnie/sslip.io-dns-server, він мультиплатформовий (linux/amd64 та linux/arm64 — AWS Graviton, Apple M1/M2) і важить близько 141 МБ. Щоб запустити без прав root, зручно переназначити порт:
docker run -d --rm -p 3353:53/udp cunnie/sslip.io-dns-server # перевірка: dig @localhost 127-0-0-1.sslip.io -p 3353 +short
Готові бінарники
Проєкт публікує прекомпільовані бінарники для darwin, linux і freebsd (amd64 та arm64), а також windows (amd64) на сторінці релізів. Ними користується навіть продакшн-інфраструктура: хмарні сервери при розгортанні завантажують бінарник версії 5.1.5 з GitHub Releases.
Флаги одним поглядом
Повний довідник флагів — у README. Найкорисніші:
| Флаг | За замовчуванням | Опис |
|---|---|---|
| -port | 53 | Порт UDP/TCP. Низькі порти потребують root |
| -nameservers | ns-00.nip.io, ns-01.nip.io, ns-ovh.sslip.io | Список FQDN для NS-записів |
| -addresses | порожньо | Пари «host=IP» для власних A/AAAA записів (кілька адрес на хост) |
| -blocklistURL | https://raw.githubusercontent.com/cunnie/sslip.io-blocklist/main/blocklist.txt | URL блоклиста; підтримується протокол file:// |
| -delegates | порожньо | Делегування піддоменів зовнішнім nameserver'ам (наприклад, для DNS-01 challenge) |
| -ptr-domain | nip.io. | Домен для PTR-відповідей |
| -public | true | Розвʼязування публічних адрес. З -public=false розвʼязуються лише приватні адреси |
| -quiet | false | Вимкнути лог на кожен запит (економить кошти на Cloud Logging у GKE) |
| -dnstap | порожньо | Адреса Unix- або TCP-сокета для стрімінгу телеметрії dnstap |
Приклад розгортання власних nameserver'ів для піддомену xip.pivotal.io із власними NS- та адресними записами:
go run main.go \ -nameservers=ns-ip-0.pivotal.io,ns-ip-1.pivotal.io \ -addresses ns-ip-0.pivotal.io=10.8.8.8,ns-ip-1.pivotal.io=fc88:: \ -ptr-domain=xip.pivotal.io
Запит для зони xip.pivotal.io (dig ns 127.0.0.1.com @localhost -p 5553) тоді поверне NS-записи ns-ip-0.pivotal.io і ns-ip-1.pivotal.io разом із glue-записами.
Деплой через systemd
У репозиторії є готовий unit-файл etc/sslip.io-dns.service. У продакшні кожна машина отримує сервіс з унікальними флагами -nameservers і -addresses, записаними в cloud-init:
[Unit] Description=sslip.io DNS Server After=network.target [Service] ExecStart=/usr/bin/sslip.io-dns-server \ -nameservers=ns-00.nip.io.,ns-01.nip.io.,ns-ovh.sslip.io. \ -addresses=nip.io=78.46.204.247,sslip.io=78.46.204.247,... Restart=on-failure RestartSec=5 [Install] WantedBy=multi-user.target
Інфраструктура продакшну
Пʼять провайдерів, три континенти
Архітектура публічного сервісу унікальна: три авторитативні nameserver'и обслуговуються різними хмарними провайдерами на різних континентах. Якщо один із хмар зникне, двоє інших продовжать обслуговувати зону. Окремий сервер «blocked» віддає сторінку-заглушку для заблокованих доменів, а спеціальна віртуальна машина збирає телеметрію dnstap.
| Сервер | Провайдер | Розташування | Особливості |
|---|---|---|---|
| ns-00.nip.io | DigitalOcean | Сінгапур | Droplet s-2vcpu-4gb, Fedora |
| ns-01.nip.io | Hetzner Cloud | Орегон, США | cpx31 |
| ns-ovh.sslip.io | OVH | Варшава, Польща | Виділений сервер |
| blocked.nip.io | Vultr | Сан-Паулу, Бразилія | Віддає сторінку-заглушку заблокованих доменів |
| dnstap.nono.io | Proxmox (homelab) | США | Збирач dnstap, ClickHouse-аналітика |
Вибір провайдерів прагматичний: DigitalOcean закриває Азію, Hetzner пропонує розумну ціну в США, OVH — дешеву і потужну Європу, а Vultr — найдешевший варіант для «чорнової» інфраструктури. Кожна точка присутності має IPv4 та IPv6.
Історія сервера blocked показова: він жив в AWS за 139,16 долара на місяць, а після перенесення на Vultr у липні 2026 року витрати впали до 10 доларів на місяць, причому канал зріс з 2 до 3 ТБ, а диск — з 55 до 150 ГБ.
Інфраструктура як код
Усе описано кодом через OpenTofu (відкритий форк Terraform) та cloud-init. Для кожного провайдера існує окрема директорія — terraform/ns-00, terraform/ns-01, terraform/ns-ovh, terraform/blocked, terraform/dnstap — з власним станом. Cloud-init встановлює пакети (~30: toolchain Go, dig, редактори), створює користувача, записує systemd-юніт і завантажує бінарник.
У README кожного провайдера розробники чесно документують «граблі»: Terraform DigitalOcean — «то ще безладу» (немає образу Fedora 44, резервні IP доводиться призначати вручну), флоатінг-IP Hetzner не зникають після tofu destroy, а consumer-ключі OVH живуть лише 30 днів. Така відверта документація — рідкість і велика цінність для тих, хто повторює цей досвід.
Оновлення без простою
Розгортання напівавтоматичне та продумане. Спочатку збираються бінарники для восьми платформ, потім повний набір регресійних тестів проганяється на локальному сервері, після чого бінарник по черзі завантажується на сервери, і кожен перезапускається окремо. Після кожного перезапуску версія перевіряється TXT-запитом до version.status.sslip.io. Такий rolling-деплой оновлює сервіс без жодної секунди простою. Кожні шість годин автоматичний смоук-тест (GitHub Actions) перевіряє живі nameserver'и: відповідність RDAP, доступність IPv4/IPv6, роботу по UDP/TCP і коректність ключових відповідей.
Живі цифри продуктивності
Live-метрики, опубліковані через DNS, дають точні цифри навантаження. Типовий зріз одного вузла:
- Всього оброблено 58 116 774 запити від моменту запуску, близько 4169 запитів на секунду на цьому вузлі.
- По протоколу: 58 259 316 запитів через UDP і лише 457 через TCP — UDP домінує.
- Відповідей із записами A/AAAA та іншими даними — близько 18,2 мільйона (~1308/с), це приблизно чверть усіх запитів.
- Видано 15,6 мільйона A-записів і 120 тисяч AAAA.
- Рівно 13 421 відповідь заблоковано (sinkhole).
- Блоклист востаннє оновлювався автоматично і містив 3773 CIDR-діапазони, 2 окремі IP і строкові маски.
Чверть трафіку на «порожні» відповіді — це наслідок дубльованих A/AAAA-запитів і ланцюжків крапкових суфіксів, про які йшлося вище.
Масштаб та живі метрики
Що означає «великий» тут
Станом на 2026 рік публічний сервіс обробляє близько 29 000 запитів на секунду сумарно по трьох вузлах. Бейдж Queries/сек на головній сторінці оновлюється автоматично що шість годин за даними live-метрик. Трафік майже повністю UDP; частка TCP — частки відсотка.
Метрики через DNS
Унікальна особливість проєкту — dogfooding: телеметрія обгорнута в сам DNS. Сервер віддає службові TXT-записи, доступні будь-кому:
- версія сервера: version.status.nip.io — семантична версія (наприклад, 5.1.5), дата збірки та git-хеш;
- визначення IP клієнта: ip.nip.io — повертає адресу того, хто поставив запитання;
- метрики сервера: metrics.status.nip.io — uptime, час оновлення та розмір блоклиста, загальна кількість запитів і швидкість у QPS, розбивка UDP/TCP, кількість відповідей із записами, лічильники за типами запитів, кількість заблокованих запитів і DNS-01 делегувань.
Запит метрик:
dig @ns-ovh.nip.io metrics.status.nip.io txt +short
Щоб метрики не використовували як підсилювач DNS-ампліфікації (відповідь із метриками значно більша за запит), сервер обмежує видачу метрик приблизно чотирма відповідями на секунду.
Інженерна оптимізація
Один із найцікавіших трюків — оптимізація блоклиста. Із 746 вхідних CIDR-записів 744 були одиночними адресами /32. Розробники перевели їх у звичайну map-структуру з ключами-рядками, що скоротило час обробки запиту приблизно на 11% (обробка з ~0,25 секунди стала зневажливо швидкою).
Експериментальні функції
На сторінці https://nip.io/experimental.html задокументовано три експериментальні функції. Автори попереджають: експериментальні функції можуть змінитися — не покладайтесь на них.
Визначення зовнішнього IP через DNS
Сервіс дозволяє дізнатися власну публічну IP-адресу простим DNS-запитом, за моделлю Google-сервісу o-o.myaddr.l.google.com:
dig @ns.nip.io txt ip.nip.io +short # поверне ваш публічний IP dig @ns.nip.io txt ip.nip.io +short -4 # примусово IPv4 dig @ns.nip.io txt ip.nip.io +short -6 # примусово IPv6
Ключове застереження: обовʼязково вказуйте @ns.nip.io, інакше відповість ваш резолвер, і ви отримаєте адресу резолвера, а не власну. Перевага перед HTTP-сервісами на кшталт icanhazip.com — набагато менший трафік: DNS-запит коштує близько 594 байт у двох пакетах, тоді як HTTP-запит до icanhazip.com — близько 8692 байт у 34 пакетах (понад 14 разів більше). Для мобільних користувачів і скриптів, що регулярно опитують IP, це відчутна економія.
Версія сервера
dig @ns-ovh.nip.io version.status.nip.io txt +short # "5.1.5" # "дата збірки" # "git-хеш"
Цікава деталь: дата збірки та git-хеш можуть відрізнятися між вузлами — це нормальний артефакт rolling-деплою.
Метрики
dig @ns-ovh.nip.io metrics.status.nip.io txt +short
Повертає список TXT-записів: uptime, стан блоклиста, сумарні лічильники та швидкість обробки.
Телеметрія та dnstap
Окрім публічних TXT-метрик, сервер уміє стрімити повну телеметрію DNS-трафіку через протокол dnstap. Вмикається флагом -dnstap з адресою Unix- чи TCP-сокета. У продакшні для цього виділена окрема віртуальна машина dnstap.nono.io на домашньому Proxmox-сервері, де розгорнуто:
- DNS-collector (go-dnscollector v2.5.0) — приймає потік dnstap по TCP 6000;
- ClickHouse — колоночна БД, у якій накопичуються записи про кожен запит (identity, queryip, qname, operation, family, protocol, qtype, rcode, timestamps);
- ZFS-сховище для аналітичних даних.
Це дає операторам змогу відповідати на питання на кшталт «які домени запитують найчастіше», «хто питає про ip.sslip.io» та «які клієнти генерують найбільше запитів». Команда навіть веде публічні документи з методиками аналізу журналів journald простими конвеєрами з cut/awk.
Безпека: блоклист, sinkhole та захист від ампліфікації
Багаторівневий блоклист
Для боротьби з фішинговими сайтами, що живуть на nip.io-доменах, сервіс використовує автоматично оновлюваний блоклист, який завантажується з GitHub кожні 60 хвилин. Якщо завантаження не вдалося, сервер логує помилку й продовжує працювати. Блоклист має три рівні:
- CIDR-діапазони: блокування цілих підмереж, зокрема провайдерів із погано захищеними серверами.
- Окремі IP-адреси: одиночні адреси, які тримаються у швидкій map-структурі.
- Строкові підрядки: блокування за входженням рядка в hostname (наприклад, назва банку «raiffeisen» у
raiffeisen.94.228.116.140.nip.io).
Логіка блокування тонка: блокується лише імʼя, що містить валідну IP-адресу. Приватні адреси (RFC 1918/4193) не блокуються ніколи. Якщо запис потрапив у блоклист, сервер відповідає адресою «заглушки» blocked.nip.io (64.176.22.9), а імʼя розвʼязується на сторінку-попередження про те, що сайт заблоковано через зловживання.
blocked.nip.io та звітування про зловживання
Користувач, що відкрив заблокований домен у браузері, потрапляє на мобільно-зручну сторінку blocked.nip.io, яка пояснює, що сайт відключено за фішинг чи зловживання. Сервер сторінки живе в Сан-Паулу і за 2026 рік кілька разів масштабувався: канал зріс з 2 до 3 ТБ, диск — до 150 ГБ.
На головній сторінці сервісу — блок про abuse-репорти: скарги приймаються на адресу abuse@nip.io, оператори зобовʼязуються відповісти протягом 24 годин. Це важливий елемент довіри: безкоштовні wildcard-домени неминуче приваблюють зловмисників, і прозорий процес репортингу дозволяє спільноті самотужки чистити сервіс.
Режим -public=false
Власникам власних зон рекомендовано запускати сервер із флагом -public=false. У цьому режимі розвʼязуються лише приватні адреси: 10/8, 172.16/12, 192.168/16, 127/8, 169.254/16, CGNAT 100.64/10, IPv6 fd00::/8 (fc00::/7), loopback ::1, link-local fe80::/10 та інші службові діапазони. Публічні IP не розвʼязуються взагалі. Навіщо це? Фішер може орендувати машину з публічним IP, отримати hostname на кшталт 52-0-56-137.ip.wellsfargo.com (якщо ваш піддомен називається ip.wellsfargo.com) і використати його для атаки на клієнтів банку. З -public=false такий сценарій виключений повністю. Бонус: приватні адреси ніколи не потрапляють у блоклист і завжди розвʼязуються.
Захист від DNS-ампліфікації
Сервер завжди відповідає з RecursionAvailable=false і не працює як відкритий резолвер, тож його неможливо використати як підсилювач DDoS-атак. Додатково обмежується видача «важких» TXT-відповідей (метрик): буферизований канал на 200 токенів із паузою 250 мілісекунд тримає пропускну здатність на рівні приблизно чотирьох запитів на секунду.
DNS-01 challenge та делегування
Сервер обробляє запити виду _acme-challenge.імʼя.nip.io, відповідаючи NS-делегуванням на вбудований IP. Це дозволяє автоматичним інструментам отримувати сертифікати через DNS-01 challenge — але лише якщо ви піднімаєте власний екземпляр (механізм вмикається флагом -delegates). Wildcard-піддомени на зонах nip.io/sslip.io не підтримуються, хоча архітектура лишає для них місце.
Альтернативи та порівняння
Розставимо nip.io/sslip.io поруч з іншими сервісами того самого класу.
| Сервіс | Технологія | Статус | Особливості |
|---|---|---|---|
| nip.io / sslip.io | Go, з 2012/2015 | Працює | 29 000 q/s, IPv4/IPv6/PTR, white-label, відкритий DNS-сервер |
| xip.io | bash | Припинено | Історичний прародитель ідеї |
| traefik.me | Python + PowerDNS | Працює | Прямий нащадок оригінального бекенду nip.io; IP-в-імені та дефіси підтримуються |
| backname.io | Go (бібліотека Miek Gieben) | Працює | Сучасна Go-реалізація; IPv6 з крапками та дефісами |
| afraid.org | Власний | Працює | Повноцінний динамічний DNS, хостинг субдоменів і доменів, без вбудовування IP |
| ipq.co | Власний | Працює | «Tinyurl світу DNS» — короткі редиректи без вбудовування IP |
Що обрати:
- Вбудувати IP в імʼя, отримати TLS, локальна розробка — nip.io/sslip.io.
- Стабільний піддомен, що переживає зміну IP — afraid.org або ipq.co.
- Власний сервер, повний контроль, air-gapped — приватний екземпляр sslip.io або traefik.me на своєму залізі.
- Мінімум зусиль на Python-стеку — traefik.me або оригінальний бекенд nip.io.
Let's Encrypt заслуговує окремої згадки як «вмикач»: це саме той сервіс, завдяки якому nip.io практично незамінний для миттєвого TLS. Підтримати його можна пожертвою на abetterinternet.org.
Поширені запитання
Чи можна використовувати nip.io у продакшні?
Так — великі компанії на кшталт Google, AWS та Azure посилаються на ці домени в документації та інфраструктурі. Але якщо вам важлива максимальна стабільність і контроль політики безпеки, краще заделегувати власний піддомен (white-label) або підняти власний екземпляр сервера.
Чому в мене не розвʼязується 192.168.0.1.nip.io?
Найімовірніше — DNS-rebinding protection у вашому резолвері чи браузері або блокування з боку провайдера. Спробуйте прямий запит — dig @ns.nip.io 192-168-0-1.nip.io +short — і за потреби підніміть локальний екземпляр сервера.
Який формат кращий для IPv4 — крапки чи дефіси?
Дефіси. Крапкова форма генерує приблизно вдвічі більше запитів через суфіксні запити.
Чи можна отримати wildcard-сертифікат для *.nip.io?
Ні. Ні nip.io, ні sslip.io не видають wildcard-сертифікати. Кожен hostname отримує власний валідний сертифікат.
Як дізнатися свій зовнішній IP через DNS?
dig @ns.nip.io txt ip.nip.io +short — сервіс поверне ваш публічний IP. Не забувайте про @ns.nip.io.
Це безкоштовно?
Так, сервіс повністю безкоштовний і фінансується з кишень операторів. Найкраща форма підтримки — пожертви Let's Encrypt та повідомлення про зловживання.
Чим nip.io відрізняється від traefik.me?
Функціонально майже нічим — обидва підтримують вбудовування IPv4 із крапками та дефісами. Відмінності — у стеку (Go проти Python/PowerDNS) і в тому, що sslip.io додатково вміє PTR, white-label і має відкрите Go-ядро для самостійного розгортання.
Що таке DNS-rebinding protection і чи заважає вона nip.io?
Це захисний механізм резолверів і браузерів, що блокує імена, які розвʼязуються в приватні діапазони, щоб атакуючий не міг через спільний DNS атакувати внутрішні сервіси жертви. Для приватних адрес (127.x, 10.x, 192.168.x) він може заважати локальній розробці: частина провайдерів відповідає на такі запити помилкою. Розвʼязання — власний екземпляр сервера або публічний резолвер без таких фільтрів. Це обмеження задокументовано в обох проєктах і не є багом сервісу.
Звідки цифри 29 000 запитів на секунду?
З відкритих метрик сервісу. Кожні шість годин автоматичний скрипт опитує metrics.status.sslip.io на всіх трьох nameserver'ах, сумує швидкість відповідей і оновлює бейдж на головній сторінці. Переконатися в цифрах можна самостійно командами dig, описаними вище.
Підсумки
Чотирнадцять років nip.io і sslip.io доводять, що проста ідея може стати стандартом індустрії. Вбудувати IP-адресу в DNS-імʼя і повернути її у відповіді — здавалося б, нічого складного, але саме ця механіка тихо працює всередині тисяч Kubernetes-кластерів, локальних налаштувань і CI-конвеєрів по всьому світу. Історія проєкту така сама повчальна: створений наодинці у 2012 році, переживши смерть засновника, домен nip.io перейшов до спільноти і сьогодні разом зі sslip.io обслуговує понад 29 000 запитів на секунду з трьох континентів.
Головне зі статті:
- Сервіс безкоштовний, не потребує реєстрації та підтримує дефісну, крапкову та hex-форму IPv4, а також дефісну та hex-крапкову форму IPv6.
- Найцінніший сценарій — автоматичний TLS від Let's Encrypt для hostname зі вбудованим IP (Caddy справляється за один рядок конфігурації).
- White-label працює: заделегуйте піддомен трьом публічним nameserver'ам — і отримаєте логіку nip.io на власному домені.
- Повністю відкрита Go-реалізація (Apache 2.0) піднімається локально, у Docker або в air-gapped мережі, з підтримкою PTR, блоклиста, режимів безпеки та телеметрії dnstap.
- Для IPv4 кращі дефіси — крапкова форма коштує вдвічі більше запитів.
- Wildcard-сертифікати не підтримуються, але кожен окремий hostname забезпечується валідним сертифікатом.
- Економіка вражає: сервіс на десятки тисяч запитів на секунду коштує операторам копійки завдяки розумному вибору провайдерів та IaC-підходу.
Якщо ви розробляєте локально, використовуєте Kubernetes або Caddy — nip.io/sslip.io, найімовірніше, уже працює у вашому ланцюжку інструментів, можливо, навіть непомітно для вас. Тепер ви знаєте, як він влаштований усередині, як приручити його під себе та як підняти власний екземпляр.
Джерела
- Офіційний сайт nip.io / sslip.io
- Вихідний код sslip.io на GitHub
- Оригінальний бекенд nip.io (Python + PowerDNS)
- Релізи та готові бінарники DNS-сервера
- Docker-образ cunnie/sslip.io-dns-server
- Документація Google Cloud: default domain у Knative
- Блог AWS: аутентифікація EKS через Teleport
- Блог Microsoft Azure: автомасштабування AKS-мікросервісів
- IBM Redbooks: розгортання хмарної інфраструктури
- Документація Let's Encrypt: ліміти та квоти
- Let's Encrypt: сертифікати для IP-адрес
- Вебсервер Caddy з автоматичними TLS-сертифікатами
- Дотичний сервіс traefik.me
- Дотичний сервіс backname.io
- Безкоштовний DNS-хостинг afraid.org
- Короткі DNS-посилання ipq.co
- Підтримати Let's Encrypt
