dnsmasq: как увеличить TTL?

Наблюдатель веб-сайта может удаленно контролировать Ваш сайт и может уведомить Вас по электронной почте изменений страницы. Наблюдатель веб-сайта Лично, я провел бы больше времени/усилия при проверке Вас, имеет надлежащий от резервных копий сайта, таким образом, можно восстановить файлы, если существует проблема.

1
задан 21 November 2009 в 20:22
4 ответа

При базировании моего ответа на комментариях Gareth (который действительно должен быть включен в вопрос), я сказал бы, что наиболее вероятные причины проблемы:

  1. Вы на самом деле не используете кэш, Вы думаете, что Вы, или
  2. TTLs для сайта, который Вы посещаете, установлены довольно низко, обычно по причине, и нет ничего разумного, можно делать с этим (кроме, возможно, определяют первопричину частых отказов поиска DNS и фиксируют их сами (если, например, причиной было переполненное локальное Интернет-соединение), или подайте прошение, чтобы объект, ответственный, имел их зафиксированный (если, например, проблема состояла в том, что зона делегирована к облупленному авторитетному серверу DNS)),
1
ответ дан 3 December 2019 в 16:41

Вы имеете в виду TTL для отрицательного ответа от вышестоящего сервера? Этим управляют - отрицательный-ttl параметр:

- отрицательный-ttl = Отрицательные ответы от вышестоящих серверов обычно содержат информацию о времени жизни в записях SOA, которые dnsmasq использует для кэширования. Если ответы от вышестоящих серверов опускают эту информацию, dnsmasq не кэширует ответ. Эта опция дает значение по умолчанию в течение времени жизни (в секундах), который записывает использование dnsmasq кэшировать отрицательные ответы даже в отсутствие SOA.

1
ответ дан 3 December 2019 в 16:41
  • 1
    хм... Я не уверен. Позвольте мне дать Вам пример того, что я пытаюсь сделать: существует хороший сайт, который я часто посещаю (например, stackoverflow.com ), и мой рабочий стол Ubuntu продолжает ожидать ответов DNS слишком много раз. Я установил dnsmasq в надежде на смягчение этой проблемы напрасно. Я не знаю, установлен ли их сервер DNS правильно, или я пропускаю/смешиваю что-то. –  jldupont 21 November 2009 в 20:36

Dnsmasq имеет параметр - min-cache-ttl = [секунды] , где секунд ≤ 3600 (1 час).

3
ответ дан 3 December 2019 в 16:41

Фактически вы можете обойти 3600-секундную проверку --min-cache-ttl, воспользовавшись ошибкой целочисленного переполнения в исходном коде dnsmasq C, без какой-либо необходимости перекомпиляции. Вот работающее значение:

Через интерфейс командной строки: --min-cache-ttl = 6442450943

Через dnsmasq.conf: min-cache-ttl = 6442450943

Почему это работает? Ну, код dnsmasq C определяет константу целочисленного значения со знаком продолжительностью 3600 секунд, которая сравнивается и проверяется с тем, что пользователь указывает в качестве значения переопределения. Если значение больше 3600, то пользовательский ввод не будет учитываться и вместо него будет использоваться константа 3600. Это переопределенное значение также является целым числом со знаком, но несколькими строками позже в коде входное значение ttl преобразуется в беззнаковое длинное целое число при инициализации демона.

На первый взгляд вы можете задаться вопросом, а мы не просто устанавливаем значение -2 миллиарда во входном или конфигурационном файле. Что ж, есть начальная проверка ввода dnsmasq, которая прерывается раньше и завершается. Однако, если мы обернем целое число больше +4 миллиарда, мы начнем с нуля. Добавьте к этому еще +2 миллиарда + 1, и мы сможем вернуться к эффективному отрицательному числу, все еще обойдя начальную проверку.

Итак, почему это работает? Поскольку диапазоны целых чисел со знаком составляют примерно от -2 до +2 миллиардов, а целые числа без знака - от 0 до +4 миллиардов. Нам нужно получить значение, которое нужно обернуть на отметке примерно +2 миллиарда, чтобы она интерпретировалась как отрицательное значение проверкой dnsmasq после синтаксического анализа входных данных. По сути, проверка на ttl> 3600 пройдёт, потому что значение отрицательно интерпретируется как -2 миллиарда. -2 миллиарда - это определенно <3600. Но когда вторая часть кода переходит на преобразование -2 миллиарда, он в конечном итоге преобразует наш входной ttl в эквивалент примерно 2 ^ 31 + 1 (без знака) вместо -2 ^ 31 + 1 (со знаком).

Конечно, таким образом можно указать только действительно большие значения ttl, и это может быть никому не полезно, потому что такие значения ttl вообще не очень разумны. Но это хитрый трюк (ошибка dnsmasq). Надеюсь, это поможет кому-то, даже если это полезно только для отладки или возиться в качестве временного решения. Не стесняйтесь комментировать, работает или не работает в вашей ситуации. Наслаждайтесь! :)

2
ответ дан 3 December 2019 в 16:41

Теги

Похожие вопросы