Чи правда, що серверу імен потрібно відповідати на запити через TCP?


23

Я процес налаштування моніторингу DNS-серверів кількох великих веб-хостів. Моя мета - порівняти час відповіді їхніх серверів dns, відстежуючи їх відповідь на ping.

У ході цього процесу я виявив, що сервери імен Bluehost не відповідають на ping. Я спробував отримати більше інформації, запустивши Pingdom DNS Check на bluehost.com, і це призвело до такої помилки:

Сервер імен ns1.bluehost.com (74.220.195.31) не відповідає на запити через TCP.

Сервер імен не зміг відповісти на запити, надіслані через TCP. Можливо, це пов'язано з неправильним налаштуванням сервера імен або через неправильно налаштовану фільтрацію в брандмауері. Досить поширена помилка, що DNS не потребує TCP, якщо вони не забезпечують передачу зон - можливо, адміністратор сервера імен не знає, що TCP зазвичай є вимогою.

Я хотів би знати наступне:

  • Наскільки справжнє твердження правдиве?
  • Які наслідки того, що сервер імен не відповідає на запити через TCP?

Відповіді:


47

Текст діагностики з Pingdom абсолютно правильний. TCP призначений не лише для передачі зон.

Реалізації сервера DNS є в даний час «потрібно» (в так само , як будь-який RFC вимагає нічого) для підтримки TCP, в RFC 5966 , «DNS транспорту через TCP - Вимоги до реалізації».

Зауважте, що це вимога щодо впровадження серверного програмного забезпечення, вона не застосовується строго до роботи будь-якого сервера - оперативна практика не охоплюється.

Це означає, що якщо ваші конкретні сервери DNS не налаштовані на підтримку TCP, або якщо він заблокований, довгостроковим ефектом буде неможливість правильно підтримувати DNSSEC. Так само можуть бути заблоковані будь-які інші дані DNS, які призводять до перевищення відповідей 512 байт.

ob disclaimer: Я написав, що RFC.

EDIT RFC 5966 тепер замінено RFC 7766


RE: Оперативна практика, той, хто ненавидить DNSSEC, може просто відключити TCP і заздалегідь скинути його на брандмауер. Не дивно, що наслідки є. Ніяка підтримка EDNS0 у двох кінцевих точках не може змусити пристрої між ними не втручатися. (фрагментація, помилкове позначення старовинними брандмауерами тощо). Якщо у вас є великі записи DNS на авторизованому сервері (роздутий TXT), потрібен буде TCP, якщо ви не хочете виключати сегмент своєї аудиторії. Так само, відключення його на рекурсивному сервері ізолює вас від відповідей DNS, що ваш кластер поштових повідомлень може потребувати боротьби зі спамом.
Андрій Б

3

він повинен підтримувати TCP та UDP - TCP призначений для розмірів відповідей> 512 байтів (які включатимуть передачу зон) (відповідно до матеріалів, які я прочитав, у будь-якому випадку. Я зазвичай включаю TCP та UDP для запуску NS ...)


-2

Добре знати, що говорять на цю тему, і ми вже маємо хорошу авторитетну відповідь на це, але в практичних цілях я вважаю пораду професора Даніеля Дж. Бернштейна, автора довідки DJBDNS, досить цікавою.

http://cr.yp.to/djbdns/tcp.html#why (2003-01-16)

Коли надсилаються запити TCP?

Якщо ви перебуваєте в одній з наступних ситуацій, вам потрібно налаштувати свій DNS-сервер, щоб відповідати на запити TCP:

  • Ви хочете опублікувати набори записів більше 512 байт. (Це майже завжди помилка.)
  • Ви хочете дозволити передачу вихідних зон, наприклад, на сторонній сервер.
  • Батьківський сервер відмовляється делегувати вам ім'я, поки ви не налаштуєте послугу TCP.

Якщо ви не знаходитесь ні в одній із цих ситуацій, вам не потрібно надавати послугу TCP, і ви не повинні її налаштовувати. DNS-over-TCP набагато повільніше, ніж DNS-над-UDP, і по суті є набагато більш вразливим до атак відмови у наданні послуги. (Це стосується і BIND.)

Зауважте, що він упускає явну згадку про DNSSEC; причина полягає в тому, що, за словами DJB, DNSSEC підпадає під категорію "завжди помилка". Дивіться https://cr.yp.to/djbdns/forgery.html для отримання більш детальної інформації. DJB має альтернативний стандарт під назвою DNSCurve - http://dnscurve.org/ - який вже незалежно прийняли деякі провайдери (наприклад, OpenDNS). Цікаво: /security/45770/if-dnssec-is-so-questionable-why-is-it-ahead-of-dnscurve-in-adoption .

Зауважте, що якщо вищевказана документація про налаштування DJBDNS є будь-якою ознакою його особливостей, виявляється, що вона підтримує лише AXFR для TCP. Оскільки багато постачальників все ще використовують DJBDNS, вони навряд чи підтримуватимуть DNS через TCP без зайвих зусиль.

PS Зауважте, що DJB насправді практикує те, що він проповідує. Його власні сервери, (1), запускають DNSCurve, (2), не відповідають належним чином TCP. Тільки +notcpби вдалося (що за замовчуванням):

% dig +trace @ordns.he.net +notcp cr.yp.to | tail
yp.to.                  86400   IN      NS      uz5dz39x8xk8wyq3dzn7vpt670qmvzx0zd9zg4ldwldkv6kx9ft090.ns.yp.to.
yp.to.                  86400   IN      NS      uz5jmyqz3gz2bhnuzg0rr0cml9u8pntyhn2jhtqn04yt3sm5h235c1.yp.to.
;; Received 300 bytes from 216.74.32.100#53(tonic.to) in 151 ms

cr.yp.to.               600     IN      A       131.155.70.11
cr.yp.to.               600     IN      A       131.155.70.13
yp.to.                  3600    IN      NS      uz5jmyqz3gz2bhnuzg0rr0cml9u8pntyhn2jhtqn04yt3sm5h235c1.yp.to.
yp.to.                  3600    IN      NS      uz5dz39x8xk8wyq3dzn7vpt670qmvzx0zd9zg4ldwldkv6kx9ft090.yp.to.
;; Received 244 bytes from 131.155.70.13#53(uz5jmyqz3gz2bhnuzg0rr0cml9u8pntyhn2jhtqn04yt3sm5h235c1.yp.to) in 14 ms

, тоді як +tcpпомилка a (мабуть, з іншим повідомленням про помилку, залежно від того, який з його серверів буде обраний):

% dig +trace @ordns.he.net +tcp cr.yp.to | tail
yp.to.                  86400   IN      NS      uz5hjgptn63q5qlch6xlrw63tf6vhvvu6mjwn0s31buw1lhmlk14kd.ns.yp.to.
;; Received 300 bytes from 216.74.32.100#53(tonic.to) in 150 ms

;; Connection to 131.155.71.143#53(uz5dz39x8xk8wyq3dzn7vpt670qmvzx0zd9zg4ldwldkv6kx9ft090.ns.yp.to) for cr.yp.to failed: connection refused.
;; communications error to 131.155.70.13#53: end of file
;; Connection to 131.155.71.143#53(uz5dz39x8xk8wyq3dzn7vpt670qmvzx0zd9zg4ldwldkv6kx9ft090.ns.yp.to) for cr.yp.to failed: connection refused.
;; communications error to 131.155.70.13#53: end of file
;; Connection to 131.155.71.143#53(uz5dz39x8xk8wyq3dzn7vpt670qmvzx0zd9zg4ldwldkv6kx9ft090.ns.yp.to) for cr.yp.to failed: connection refused.
;; communications error to 131.193.32.147#53: end of file
;; connection timed out; no servers could be reached

2
Ваш акт DJB fanboi стає все більш зношеним. Спільнота DNS обрала DNSSEC, і значна частина літератури про DNSCurve повністю суперечить ортогональним вимогам достовірності даних та шифрування даних . IMNSHO, основна частина вашої відповіді нічого не сприяє цьому питанню.
Альнітак

@Alnitak, ваше наполягання на тому, що для DNS потрібен TCP, не означає, що це буде фактичною вимогою для DNS. Очевидно, що багато людей працюють без TCP і не відчувають жодних проблем із наявністю власних веб-сайтів. Тим не менш, ви продовжуєте пропагувати дезінформацію та FUD.
cnst

2
Це справді документ від 2003 року? Як ви можете стверджувати прямим обличчям, що це все ще актуально у 2017 році?
Майкл Хемптон

1
@MichaelHampton, так, від усієї душі і абсолютно. Деякі речі не змінюються, і DJB може бути мудаком, але він при цьому досить розумний. Усі аргументи, які він викладає, мають філософський характер і не змінюються, як це робить технологія. Тим часом, (1), чому так важко повірити, (2), чому посилання на ще більш старі RFC здійснюються прямим обличчям, і не будучи ти лицемером, (3), які фактичні контраргументи у тебе є, крім Дата"? Люди продовжують говорити, що у його шляху є проблеми з сумісними можливостями, але ті самі аргументи, які пропонуються (наприклад, відскочена пошта), він розвінчався ще в 2003 році!
cnst

-5

TCP необхідний і використовується лише тоді, коли потрібна тривала відповідь. Можуть бути негативні наслідки. Передача в зоні здійснюється через TCP, оскільки вони великі і повинні бути надійними. Не дозволяти TCP від ​​ненадійних серверів - це один із способів забезпечити надання лише невеликих відповідей.

З введенням підписаних відповідей DNS виникла вимога щодо послаблення обмеження 512 байт на відповіді UPD. EDNS0 забезпечує механізм більш тривалих відповідей на UDP. Якщо недозволити DNS через TCP, велика ймовірність порушити безпечну реалізацію DNS.

Цілком можливо запустити DNS-сервер, у якого відкритий для Інтернету лише порт 53 UDP. Доступ TCP до однолітків DNS необхідний, але це невеликий список хостів.

Існує більш новий RFC596, який тепер вимагає TCP для повної реалізації DNS. Це спрямовано на виконавців. Документи спеціально не стосуються операторів, але попереджають, що заборона TCP може призвести до ряду сценаріїв відмов. У ньому детально описано широкий спектр відмов, які можуть призвести, якщо DNS через TCP не підтримується.

Були обговорені питання використання TCP для запобігання атак посилення DNS. TCP має власні ризики відмови в обслуговуванні, але розповсюдження складніше.


DNSSEC не послаблював обмеження, EDNS0 це зробив у 1999 році (див. RFC 2671).
Альнітак

Ні, як пояснив Alnitak, TCP потрібен у більшості випадків (якщо ви не можете бути абсолютно впевнені, що у вас ніколи не буде відповіді> 512 байтів, чого ти зазвичай не знаєш заздалегідь)
bortzmeyer

Я успішно запустив DNS через брандмауер, дозволяючи лише UDP. Якщо заборонено паталогічні конфігурації, пошук адрес буде містити менше 512 символів. Я бачив посилання на те, що шляхи до DNS обмежені 256 символами. Дані в базі даних мого поштового сервера свідчать про те, що траси DNS до сервера рідко перевищують 100 символів, а сайти, які мають кілька імен, повернених записом PTR, рідко повертають понад 256 символів. Усі ці репозіції працюватимуть на UDP. У когось є розумний випадок, який працює близько 512 символів без DNSSEC або перенесення зони.
BillThor

Щодо DNSSEC, я не перевіряв RFC для розширених розмірів, але єдині посилання, які я бачив, щоб використовувати розширені розміри пакетів на UDP, мають ben DSNSEC.
BillThor

Один з великих постачальників контенту відклеївся кілька років тому, коли вони додали стільки записів A для однієї зі своїх веб-фарм, що вона перевищила 512 байт. Це спричинило реальні проблеми інтероп.
Альнітак
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.