Домен в зоне .РФ существует в двух видах одновременно: для человека — «пример.рф», для интернета — «xn--e1afmkfd.xn--p1ai». Второе представление называется punycode, и без него кириллический домен физически не может работать: система доменных имён умеет передавать только латиницу, цифры и дефис. Ниже — что это за преобразование, как выполнить его правильно и что делать, если после «перевода» сайт всё равно не открывается.

Что такое punycode и зачем он нужен домену .РФ

В DNS допустимы только латинские буквы, цифры и дефис — всего 37 символов. Кириллица в это поле не помещается, поэтому ещё на заре IDN было решено: пользователь видит и набирает «пример.рф», а в сеть уходит ASCII-эквивалент. Так появился punycode — описанный в RFC 3492 (март 2003 года) алгоритм семейства Bootstring, который однозначно и обратимо переводит последовательность символов Unicode в строку из разрешённых символов.

Сам punycode — только кодировка; правила, по которым имя приводится к нормальному виду и проверяется, задаёт стандарт IDNA (RFC 3490, более новый вариант — IDNA2008: RFC 5890–5892). Метка в ASCII-форме называется A-label и всегда начинается с префикса xn--, а результат кодирования без префикса — это уже собственно punycode-строка. Для зоны .РФ это не экзотика: в корневой зоне DNS нет ни одной кириллической буквы, сам домен верхнего уровня записан там как xn--p1ai.

Как кириллическое имя превращается в xn--: пример на домене .РФ

Кодируется не имя целиком, а каждая метка отдельно — то есть часть до точки и сам домен верхнего уровня. Например, тест.рф превращается в xn--e1aybc.xn--p1ai, а пример.рф — в xn--e1afmkfd.xn--p1ai. Первые элементы (xn--e1aybc и xn--e1afmkfd) — это ACE-формы «тест» и «пример», последний (xn--p1ai) — кириллическая зона «рф». Второй пример заодно показывает закономерность: любые имена в .РФ заканчиваются на xn--p1ai, потому что это ACE-форма самой зоны.

Длина метки в DNS ограничена 63 символами, а префикс xn-- занимает 4 из них, поэтому собственно punycode-часть не может быть длиннее 59 символов. Кириллица «дорогая»: одно-два русских слова нередко дают в ACE длинную строку, и правила зоны .РФ прямо требуют, чтобы punycode-представление обозначения укладывалось в 63 символа. Всё доменное имя в ASCII-форме при этом не должно превышать 253 символа.

Важно не путать punycode с другими вещами. Это не транслитерация: имя не превращается в «russkij-domen.ru», а кодируется как есть. Это не шифрование и не «защита» имени — преобразование обратимо, и его может выполнить любой. Это и не процентное кодирование: в punycode переводится только имя хоста, а путь и параметры URL кодируются отдельно, символами вида %D0%BF.

Как перевести домен .РФ в punycode: пошаговая инструкция

Проще всего сделать это онлайн-конвертером. На нашем сайте для этого есть инструмент /punycode: он переводит кириллическое имя в ACE-форму и обратно, без установки программ. Порядок действий такой: возьмите имя целиком вместе с зоной (например, магазин.рф), вставьте его в поле конвертера, при необходимости выберите направление «кириллица → punycode» и получите строку вида xn--…xn--p1ai.

Три технических детали, о которых часто забывают. Первая: имя нужно вводить без лишних пробелов и без «www», если вы кодируете именно домен второго уровня; www — отдельная метка, и для www.магазин.рф результат будет другим. Вторая: результаты кодирования принято писать в нижнем регистре, хотя сам алгоритм регистр не различает. Третья: буква «ё» — отдельный символ Unicode, она кодируется иначе, чем «е», поэтому ёжик.рф и ежик.рф дадут разные ACE-строки.

Проверять результат удобнее по уже готовой ACE-форме: утилиты dig, nslookup и ping надёжно работают с xn--, тогда как обработка кириллицы в командной строке зависит от версии утилиты и локали. Обратное преобразование (punycode → читаемое имя) полезно, когда вы видите в логах, письме или выгрузке непонятный xn--… и хотите понять, какой домен за ним стоит — конвертер punycode справится и с этой задачей. Если имя нужно кодировать программно, в Python для IDNA2008 используют отдельный пакет idna, а встроенный кодек 'idna' реализует более старую версию стандарта.

Где punycode встречается, кроме адресной строки браузера

Браузер показывает вам «магазин.рф», но во всех технических системах имя живёт в ACE-форме. В панели управления DNS записи A, AAAA, MX и CNAME создаются для xn--…, а не для кириллического варианта. В файлах зон, которые отдают авторитативные серверы, кириллицы нет вообще. В сертификатах SSL/TLS имя в полях CN и SAN тоже указывается в punycode; именно так его видят центры сертификации при выпуске, в том числе при автоматической выдаче через ACME.

Конфигурации веб-серверов — ещё одно место: в nginx директива server_name, а в Apache ServerName и ServerAlias должны содержать ACE-форму, иначе сервер просто не сопоставит запрос с нужным сайтом. В логах, системах аналитики, CSV-выгрузках и API-интерфейсах кириллический домен тоже почти всегда появляется как xn--.

Отдельно скажем про WHOIS и реестр. В записи реестра доменное имя хранится в ACE-форме — это первичная техническая форма, а кириллица в выдаче является лишь удобным отображением. В зависимости от сервиса и версии базы в ответе WHOIS для домена .РФ можно увидеть и «пример.рф», и xn--e1afmkfd.xn--p1ai. Поэтому если поиск по кириллическому варианту ничего не находит, стоит повторить запрос с punycode-строкой.

Почему домен не открывается после перевода в punycode

Если сайт по кириллическому адресу не работает, а по punycode-строке тоже не открывается, скорее всего дело не в кодировке: по умолчанию браузер сам преобразует имя, и вручную вводить xn--… вам не требуется. Но когда ACE-форма подставляется в панель, скрипт или конфиг, ошибки в её написании встречаются часто — и выглядят они примерно так.

Префикс xn-- потерян, разбит или искажён

Обрезанная строка вида e1aybc.xn--p1ai не разрешится: без префикса это уже другое доменное имя. Не сработают и типичные опечатки: xn-e1aybc (один дефис вместо двух), xnp1ai, лишний пробел перед строкой или перенос, склеивший имя с соседним текстом. Иногда дефисы «теряются» при копировании из интерфейса, который не поддерживает двойной дефис как есть.

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

В панели или конфиге введена кириллица вместо punycode

Многие панели управления DNS «понимают» кириллицу и показывают её в интерфейсе, но часть инструментов — скрипты развёртывания, API, шаблоны конфигов, системы мониторинга — работают только с ASCII. Если в server_name попадёт кириллическая строка, nginx не найдёт виртуальный хост и отдаст либо заглушку, либо сайт по умолчанию. Если кириллица уйдёт в поле API регистратора или хостера, запрос либо отклонится, либо создаст запись не для того имени.

Обратная ситуация тоже встречается: там, где ждут кириллицу, подставляют punycode. При переносе данных зоны в BIND или PowerDNS имена должны быть в ACE-форме, а в интерфейсах регистраторов для подтверждения владения доменом обычно просят исходное читаемое имя.

Внутри имени оказалась латинская буква-двойник

Гомоглифы — латинские a, c, e, o, p, x, которые выглядят почти как русские а, с, е, о, р, х, — регулярно попадают в имя при копировании из документов и сообщений. В зоне .РФ буквы латинского алфавита в имени не допускаются вовсе, поэтому такая строка либо не пройдёт проверку конвертера, либо даст ACE-форму, которая не совпадёт с зарегистрированной. Внешне адрес при этом выглядит «правильно» — этим, кстати, пользуются мошенники, регистрируя похожие имена в других зонах.

Домен не открывается по причинам, не связанным с кодировкой

Если ACE-форма подтверждена и совпадает с той, что показывает конвертер, а сайт всё равно недоступен, ищите причину в другом: домен не делегирован или у него не прописаны NS-серверы, у делегированного домена нет A/AAAA-записи для нужной метки (частая история — работает www, но не работает имя без www, или наоборот), истёк срок регистрации, сервер не отвечает. Проверить это можно через WHOIS по ACE-форме и запросами к DNS: например, dig xn--e1aybc.xn--p1ai.

Что проверить в домене .РФ перед покупкой или продажей

При сделке стороны нередко называют домен только по-русски, и это создаёт путаницу: в договоре, счёте и заявке регистратору фигурирует техническая запись. Пишите имя в обоих видах, а как основное для юридических формулировок используйте punycode — именно он однозначен и хранится в реестре. Заодно убедитесь, что в зоне .РФ обозначению соответствует ACE-строка длиной не более 63 символов, что имя не начинается и не заканчивается дефисом и не содержит ничего, кроме букв, цифр и дефиса.

Полезно пройтись и по «подводным камням»: проверьте домен на наличие буквы «ё» (вариант с «е» — другой адрес и, возможно, другой владелец), на похожие имена-двойники и обязательно сверьте ACE-форму с данными реестра. Если вы продаёте домен, сразу подготовьте punycode-написание: покупатели, разработчики и регистраторы запросят его первым делом, а расхождение хотя бы в одном символе легко превращает сделку в спор о том, какой именно домен имелся в виду.