Skip to content

Instantly share code, notes, and snippets.

@darkk

darkk/README.md Secret

Last active February 11, 2019 22:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save darkk/7d61760628e3694062a10b3baf0fdd7c to your computer and use it in GitHub Desktop.
Save darkk/7d61760628e3694062a10b3baf0fdd7c to your computer and use it in GitHub Desktop.
К вопросу о MinTTL

Многие провайдеры на своих рекурсивных DNS-серверах включают повышение TTL до некоторого минимального пороговорго значения.

Для небольших TTL это считается "нормальной" практикой: так поступает Cloudflare на 1.1.1.1, а DNS-сервер knot ставит минимальный TTL в 5 секунд в конфигурации по-умолчанию.

Можно запустить измерение с помощью RIPE Atlas, и узнать, что некоторые российские провайдеры так и поступают:

  • Мароснет — 60 секунд
  • Новотелеком — 2 минуты
  • Ростелеком — от 2.5 до до 10 минут
  • Net by net — 10 минут
  • Корбина (Билайн) — 1 час (что #нивкакиерамки)

Измеряйте интернеты, хостите RIPE Atlas пробы! Это весело и бесплатно!

< RIPE-Atlas-measurement-19491403.json ripe-dns-abuf \
| jq -c 'select([.resultset[].result.min_ttl] | min > 13) | .resultset[] | {from, prb_id, min_ttl: .result.min_ttl, src_addr, dst_addr}' \
| jq -r '(.from + "\t" + (.prb_id | tostring) + "\t" + (.min_ttl | tostring) + "\t" + .src_addr + "\t" + .dst_addr)'
#!/usr/bin/python2
import base64
import json
import sys
import dns.message
for m in sys.stdin:
m = json.loads(m)
for res in m['resultset']:
if 'result' in res:
abuf = res['result']['abuf']
try:
answ = dns.message.from_wire(base64.b64decode(abuf.strip()))
ttl = min(_.ttl for _ in answ.answer)
except Exception as exc:
ttl = -1
res['result']['min_ttl'] = ttl
res['result']['abuf_txt'] = str(answ).strip().split('\n')
for k in m.viewkeys() - {'resultset'}:
if k not in res:
res[k] = m[k]
print(json.dumps(m, sort_keys=True))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment