Назад | Перейти на главную страницу

Почему изменение TTL IP опасно?

Я читал справочную страницу iptables (легкое чтение перед сном) и наткнулся на цель «TTL», но она предупреждает:

Установка или увеличение поля TTL потенциально может быть очень опасным

и

Никогда не устанавливайте и не увеличивайте значение пакетов, которые покидают вашу локальную сеть!

Я вижу, как, возможно, уменьшение или установка более низкого TTL может привести к тому, что пакеты будут отброшены до достижения места назначения, но какой эффект может иметь увеличение?

TTL уменьшается при прохождении через маршрутизатор. Это гарантирует, что если пакет будет двигаться по кругу, он в конечном итоге умрет.

Поле TTL пакета IP v4 представляет собой 8-битное поле (255 десятичных знаков). Таким образом, установка высокого уровня в начале не имеет большого значения, поскольку на самом деле он не может быть таким большим в правильно сформированном пакете (хотя некоторые вещи могут принимать искаженные IP-пакеты).

Однако, если что-то увеличивает его, и шаг увеличения часть петли, пакет может продолжать движение по кругу, никогда не достигнув нуля. Со временем (может быть очень коротким или постепенной утечкой) в системе, содержащей этот цикл, могут накапливаться пакеты, вызывая ее перегрузку.

TTL на пакетах, в основном, поддерживает нормальную маршрутизацию. Если бы пакет имел очень большой TTL и по какой-то причине был пойман на кольцевом маршруте, это могло бы вызвать большой объем трафика (так называемый «пакетный шторм») и помешать нормальной работе. Слишком низкий TTL приведет к потере связи, поскольку вы потеряете пакет до того, как он достигнет пункта назначения.

Есть один момент, который, похоже, был упущен в ответах, но который был бы чисто академическим (из-за того, сколько переходов, похоже, требуется в Интернете): если пакет обычно не достигает своего пункта назначения из-за истечения срока действия TTL, тогда его следует увеличить. позволит пакету добраться до места назначения, но не повлияет на возвращаемые пакеты, и срок их действия истечет до достижения вашей сети.

ОБНОВЛЕНИЕ: Согласно эта страница в Википедии:

Теоретически в IPv4 время жизни измеряется в секундах, хотя каждый хост, который передает дейтаграмму, должен уменьшить TTL как минимум на одну единицу. На практике поле TTL уменьшается на единицу на каждом переходе. Чтобы отразить эту практику, в IPv6 это поле переименовано в ограничение переходов.

ОБНОВЛЕНИЕ 2: Когда кто-то обновил мой пост и сослался на Википедию, я подумал, что лучше всего сослаться на сам RFC - http://www.ietf.org/rfc/rfc791.txt - Просто найдите там TTL, и он довольно хорошо объяснит это:

Это поле указывает максимальное время, в течение которого дейтаграмме разрешено оставаться в интернет-системе ... каждый модуль, обрабатывающий дейтаграмму, должен уменьшить TTL как минимум на один, даже если он обрабатывает дейтаграмму менее чем за секунду.

Я знаю только одну программу, которая могла бы использовать более высокое значение TTL, и это traceroute. Как следует из названия, он отслеживает маршрут к хосту назначения, изменяя значение TTL. Стандартное максимальное количество прыжков - 20, но вы можете увеличить это значение.

Каждый маршрутизатор, обрабатывающий пакет, уменьшает значение TTL до тех пор, пока пакет не достигнет места назначения или TTL не достигнет нуля, и завершит работу.

Как уже говорили другие, увеличение TTL может привести к тому, что пакеты никогда не умрут, если будет отрицательный цикл. Как правило, если значение TTL недостаточно велико, логика, чтобы попытаться увеличить TTL, вероятно, должна обрабатываться сквозными клиентами.

Если вы уверены, что маршрутизатор не находится в цикле (древовидная топология), теоретически вы можете безопасно увеличить значение TTL. При этом, если разрешить больше переходов, чем стандартно, это может повысить вероятность перегрузки во внешней сети. Если у вас есть длинная цепочка маршрутизаторов между внутренней и внешней сетью, при отсутствии цикла может помочь большее значение TTL. Сказав это, кому-то может быть довольно легко добавить границу в сеть и создать цикл, поэтому гораздо безопаснее начать с большего значения TTL, в котором изначально был создан пакет.