Де знайти налаштування DNS в MacOS

Привіт!

Нещодавно переді мною постало завдання налагодити процес резолва імен DNS в MacOS. Повноцінного матеріалу, про те як саме він відбувається, я не знайшов, довелося збирати інформацію самому.
Ось що вдалося з’ясувати.

За завдання, пов’язані з DNS в macOS, відповідає демон по імені mDNSResponder. У його житті зустрічалися пригоди — на його зміну приходив демон discoveryd (Yosemite), який багато що поламав і створив купу проблем. Через рік Apple схаменулася і повернула (El Capitan) перевірений mDNSResponder, що відразу починило близько 300 багів і повернуло стабільність.

mDNSResponder є частиною Bonjour — набору технологій, націлених на роботу пристрою в мережі без необхідності конфігурації, що включає в себе пошук сервісів, автопризначування адреси і резолв імен. Саме Bonjour використовується коли ви дістаєте свій iPhone і шукаєте Apple TV або принтер.

У Bonjour відкритий вихідний код, і у mDNSResponder відповідно теж. Це спрощує завдання, якщо вам потрібно докопатися до кінцевої істини і показати все, що приховано. В архіві вже є готові реалізації під Windows, Posix і VxWorks.

Демон обробляє unicastDNS і multicastDNS. UnicastDNS — це звичайний DNS до якого ми звикли і знаємо. MulticastDNS — це протокол для використання DNS в локальних мережах, що не вимагає сервера. Якщо пристрою треба когось знайти — воно відправляє питання — «question» мультикаст пакетом і отримує відповідь від пристрою з замовленим ім’ям (якщо воно звісно існує). Сам протокол докладно описаний в однойменному RFC.

Саме особливостями MulticastDNS зловживає Responder — софт для атак в локальній мережі. Після запуску він підступно починає відповідати на всі mDNS запити, заманюючи нічого не підозрюють жертв в свої лапи.

Читайте також  Кешування даних — Java Spring

Це був ліричний відступ — а тепер до головного питання — як побачити поточний кеш DNS і загальний статус DNS налаштувань.

Отже, виконуємо наступні кроки:

  1. У терміналі пишемо:
    sudo log config --mode "private_data:on" 

    ця команда дозволить нам побачити висновок, інакше він буде захований під заглушкою private

  2. Відкриваємо console, вибираємо наш девайс:

    і в фільтрі пишемо mDNSResponder

  3. Виконуємо у терміналі:
    sudo killall -INFO mDNSResponder
  4. Відкриваємо назад console і отримуємо прекрасний висновок, який ми зараз трохи розберемо:

Статус DNS налаштувань представляє з себе велике полотно, розділене на секції. Найбільш цікаві з них:

Cache — тут зберігається безпосередньо DNS cache:

------------ Cache -------------
Slt Q TTL if U Type rdlen
 3 4290 en0 + PTR 33 _companion-link._tcp.local. PTR ВЕРСІЙ._companion-link._tcp.local.
 3 4273 en0 + PTR 37 _companion-link._tcp.local. PTR ВЕРСІЙ32(2)._companion-link._tcp.local.
 6 107951 -U- - Addr 0 isafronov-G8WP. Addr
 6 107951 -U - SOA 64 . SOA a.root-servers.net. nstld.verisign-grs.com. 2019011700 1800 900 604800 86400
 6 107951 -U- - AAAA 0 isafronov-G8WP. AAAA
 6 107951 -U - SOA 64 . SOA a.root-servers.net. nstld.verisign-grs.com. 2019011700 1800 900 604800 86400
 9 763 -U - CNAME 37 1-COURIER.PUSH.APPLE.COM. CNAME 1.courier-push-apple.com.akadns.net.
 13 8819 -U - CNAME 22 ax.itunes.apple.com.edgesuite.net. CNAME a1108.gi3.akamai.net.

Вміст файлу /etc/hosts — на всяк випадок:

--------- /etc/hosts ---------
 State Interface
 KnownUnique LO 4 localhost. Addr 127.0.0.1
 KnownUnique LO 16 localhost. AAAA ::1
 KnownUnique LO 4 vmware-localhost. Addr 127.0.0.1
 KnownUnique LO 16 vmware-localhost. AAAA ::1
 KnownUnique LO 4 broadcasthost. Addr 255.255.255.255

Статистика по mDNS — дублікати імен, кількість пакетів, події інтерфейсів:

--- MDNS Statistics ---
Name Conflicts 0
KnownUnique Name Conflicts 0
Duplicate Query Suppressions 2045
KA Suppressions 0
KA Multiple Packets 0
Пуф Cache Deletions 203
--------------------------------
Multicast packets Sent 8211
Multicast packets Received 22382
Remote Subnet packets 1
QU questions received 25960
Normal multicast questions 62197
Answers questions for 4259
Unicast responses 0
Multicast responses 0
Unicast response Demotions 0
--------------------------------
Sleeps 181
Wakeups 182
Interface UP events 665
Interface UP Flap events 48
Interface Down events 817
Interface DownFlap events 16
Cache refresh queries 2876
Cache refreshed 28935
Wakeup on Resolves 0

Список мережевих інтерфейсів:

------ Network Interfaces ------
 Struct addr Registered MAC BSSID Interface Address
00007FA2FD834E00 11, 00007FA2FD834E00, v6 utun0 00:00:00:00:00:00 00:00:00:00:00:00 Active A fe80::ebfb:c666:8f7b:62ed
00007FA2FF01B800 9, 00007FA2FF01B800, v6 awdl0 DE:14:B1:E7:21:33 00:00:00:00:00:00 Active v6 A M fe80::dc14:b1ff:fee7:2133
00007FA2FD829C00 7, 0000000000000000, v4 en0 F4:5C:89:8E:9D:C1 E4:8D:8C:61:7F:5D 192.168.1.73 dormant for 1943 seconds
00007FA2FD00C200 13, 00007FA2FD00C200, v4 en5 42:4D:7F:A3:50:1B 00:00:00:00:00:00 Active v4 A M 169.254.150.120
00007FA2FE008C00 7, 00007FA2FE008C00, v4 en0 F4:5C:89:8E:9D:C1 E4:8D:8C:61:7F:5C Active v4 A M p 192.168.1.73

Список DNS серверів:

--------- DNS Servers(2) ----------
DNS Server . en0 127.0.0.1:53 0 Unscoped 30 18283 v4 v6 !cell !exp !clat46 !DNSSECAware
DNS Server . en0 127.0.0.1:53 0 InterfaceScoped 30 18291 v4 v6 !cell !exp !clat46 !DNSSECAware
v4answers 1
v6answers 1
Last DNS Trigger: 140697 ms ago 

Світ внутрішніх і зовнішніх взаємодій підсистем MacOS широкий і сповнений загадок. Робота з доменними іменами — лише його маленька частина. Для подальшого читання рекомендую:

  • Офіційну документацію Apple
  • Блог malware дослідника і *OS ентузіаста Patrick Wardle
  • Сайт і книги дослідника і практика *OS Johnatan Levin
Читайте також  Поради щодо запуску мобільної гри: Частина 2, Глобальний запуск

Степан Лютий

Обожнюю технології в сучасному світі. Хоча частенько і замислююся над тим, як далеко вони нас заведуть. Не те, щоб я прям і знаюся на ядрах, пікселях, коллайдерах і інших парсеках. Просто приходжу в захват від того, що може в творчому пориві вигадати людський розум.

You may also like...

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *