KorDen Posted June 25, 2018 Share Posted June 25, 2018 (edited) Дано: туннель IPIP over IPsec через интернет. Туннель работает, но напрягает сломанная трассировка через туннель. На стенде из пары роутеров не воспроизводилось, начал ковырять дальше и таки выяснил причину - при трассировке через IPIPoverIPsec туннель TTL=1 выставялется для "внешнего" пакета, как следствие, time exceeded приходит от провайдера! На tcpdump ISP это выглядит условно так: 19:23:42.163312 IP (tos 0x0, ttl 1, id 0, offset 0, flags [DF], proto ESP (50), length 152) localrouter > remoterouter: ESP(spi=0x11111111,seq=0x11), length 132 19:23:42.164677 IP (tos 0x0, ttl 30, id 0, offset 0, flags [none], proto ICMP (1), length 56) isp-gateway > localrouter: ICMP time exceeded in-transit, length 36 IP (tos 0x0, id 0, offset 0, flags [DF], proto ESP (50), length 152, bad cksum 82e0 (->83e0)!) При этом при пинге удаленного конца туннеля видим, что внешний пакет приходит с TTL равен исходящему минус количество внешних хопов, однако в развернутом пакете TTL равен исходящему минус 1. Вопрос - возможно ли его изменить, чтобы исходящий пакет уходил с нормальным TTL, не взирая на TTL заворачиваемого пакета? Edited June 25, 2018 by KorDen Quote Link to comment Share on other sites More sharing options...
KorDen Posted June 25, 2018 Author Share Posted June 25, 2018 (edited) 1 час назад, KorDen сказал: возможно ли его изменить, чтобы исходящий пакет уходил с нормальным TTL, не взирая на TTL заворачиваемого пакета? Отвечу себе же на свой же вопрос: ipip0: ip/ip remote 1.2.3.4 local 5.6.7.8 ttl inherit Короче говоря, "ip tunnel change ipip0 ttl 64" решает проблему. Остается вопрос - как перманентно установить TTL для исходящего туннельного пакета из CLI? ip adjust-ttl устанавливает не то что нужно... Похоже это в фичреквесты добавления команды типа interface tunnel ttl как минимум для IPIP и GRE (с EoIP непонятно, поскольку RFC-подобного описания сходу не нашел), которая будет устанавливать TTL внешнего пакета. @Le ecureuil...? P.S.: временно решил проблему через /opt/etc/ndm/ifstatechanged.d: #!/bin/sh [ "$system_name" != "ipip0" ] && exit 0 ip tunnel change ipip0 ttl 64 Edited June 25, 2018 by KorDen Quote Link to comment Share on other sites More sharing options...
Le ecureuil Posted June 29, 2018 Share Posted June 29, 2018 @KorDen так нужно inherit сделать, или фиксированное значение а-ля 64? Как скажете, так и залеплю. Quote Link to comment Share on other sites More sharing options...
KorDen Posted June 29, 2018 Author Share Posted June 29, 2018 (edited) 41 минуту назад, Le ecureuil сказал: так нужно inherit сделать, или фиксированное значение а-ля 64? Для большинства случаев использования туннелей в роутерах нужно фиксированное значение а-ля 64. По-умолчанию же идет inherit. По RFC2003 "The Time To Live (TTL) field in the outer IP header is set to a value appropriate for delivery of the encapsulated datagram to the tunnel exit point.", но linux ставит inherit если параметр ttl отсутствует при создании туннеля. В качестве быстрого фикса установка того же 64 закроет вопрос. Аналогично по идее и для GRE, за EoIP не скажу. Но в идеале бы хотелось бы видеть опцию для настройки, хоть и не обязательно.. Edited June 29, 2018 by KorDen Quote Link to comment Share on other sites More sharing options...
Le ecureuil Posted July 2, 2018 Share Posted July 2, 2018 В 29.06.2018 в 22:06, KorDen сказал: Для большинства случаев использования туннелей в роутерах нужно фиксированное значение а-ля 64. По-умолчанию же идет inherit. По RFC2003 "The Time To Live (TTL) field in the outer IP header is set to a value appropriate for delivery of the encapsulated datagram to the tunnel exit point.", но linux ставит inherit если параметр ttl отсутствует при создании туннеля. В качестве быстрого фикса установка того же 64 закроет вопрос. Аналогично по идее и для GRE, за EoIP не скажу. Но в идеале бы хотелось бы видеть опцию для настройки, хоть и не обязательно.. Сейчас сделал, что явно забито IPDEFTTL (оно же равно 64 в большинстве реализаций). Появится в следующем draft. Если будет работать нормально - перетащу во все остальные ветки. 1 Quote Link to comment Share on other sites More sharing options...
KorDen Posted July 3, 2018 Author Share Posted July 3, 2018 (edited) @Le ecureuil, похоже, работает, по крайней мере для IPIP Edited July 3, 2018 by KorDen Quote Link to comment Share on other sites More sharing options...
KorDen Posted August 27, 2019 Author Share Posted August 27, 2019 По мотивам данной темы, из чата: аналогичная проблема с туннелями 6in4, тоже желательно хотя бы IPDEFTTL вместо inherit 1 1 Quote Link to comment Share on other sites More sharing options...
rustrict Posted August 27, 2019 Share Posted August 27, 2019 16 минут назад, KorDen сказал: По мотивам данной темы, из чата: аналогичная проблема с туннелями 6in4, тоже желательно хотя бы IPDEFTTL вместо inherit На всякий случай мой запрос по этой теме #446611. Если я ничего не путаю, то @vst там в копии. 1 Quote Link to comment Share on other sites More sharing options...
Le ecureuil Posted September 3, 2019 Share Posted September 3, 2019 В 27.08.2019 в 22:53, rustrict сказал: На всякий случай мой запрос по этой теме #446611. Если я ничего не путаю, то @vst там в копии. Ок, сейчас посмотрим. Quote Link to comment Share on other sites More sharing options...
Le ecureuil Posted September 3, 2019 Share Posted September 3, 2019 @KorDen @rustrict Везде поправлено. 2 Quote Link to comment Share on other sites More sharing options...
rustrict Posted September 3, 2019 Share Posted September 3, 2019 @Le ecureuil, большое спасибо, особенно за скорость Если можно, пара вопросов: Я правильно понимаю, что изменения появятся в следующем обновлении 3.1? Ваш коллега из поддержки написал в запросе, что будет добавлена команда в CLI для управления значениями TTL и MTU на интерфейсе TunnelSixInFour. Теперь не ждать её появления? Quote Link to comment Share on other sites More sharing options...
Le ecureuil Posted September 3, 2019 Share Posted September 3, 2019 8 минут назад, rustrict сказал: @Le ecureuil, большое спасибо, особенно за скорость Если можно, пара вопросов: Я правильно понимаю, что изменения появятся в следующем обновлении 3.1? Ваш коллега из поддержки написал в запросе, что будет добавлена команда в CLI для управления значениями TTL и MTU на интерфейсе TunnelSixInFour. Теперь не ждать её появления? Команда уже вроде есть (если мне память не изменяет). Их точно нет? Появится в 2.11, 2.15, 3.01 и в следующих. Quote Link to comment Share on other sites More sharing options...
rustrict Posted September 3, 2019 Share Posted September 3, 2019 (edited) Простите, да, для MTU команда interface ip mtu работает. Но для TTL я ничего в справочнике не вижу, а ip adjust-ttl send неприменима для TunnelSixInFour: (config)> interface TunnelSixInFour0 Core::Configurator: Done. (config-if)> ip adjust-ttl send 64 Network::Interface::Repository error[6553609]: unable to find TunnelSixInFour0 as "Network::Interface::IP". В запросе мне ваш коллега так описал команду: interface TunnelSixInFour0 ip mtu - set Maximum Transmit Unit size remote - set a remote peer address ttl - set Time to live value interface ip ttl — такой команды как раз сейчас нет. Edited September 3, 2019 by rustrict русский язык :) Quote Link to comment Share on other sites More sharing options...
Le ecureuil Posted September 3, 2019 Share Posted September 3, 2019 10 минут назад, rustrict сказал: Простите, да, для MTU команда interface ip mtu работает. Но для TTL я ничего в справочнике не вижу, а ip adjust-ttl send неприменима для TunnelSixInFour: (config)> interface TunnelSixInFour0 Core::Configurator: Done. (config-if)> ip adjust-ttl send 64 Network::Interface::Repository error[6553609]: unable to find TunnelSixInFour0 as "Network::Interface::IP". В запросе мне ваш коллега так описал команду: interface TunnelSixInFour0 ip mtu - set Maximum Transmit Unit size remote - set a remote peer address ttl - set Time to live value interface ip ttl — такой команды как раз сейчас нет. Видимо забыли, что эта команда только для ipv4 есть. TTL не будет, пока смысла в ней не вижу совсем. Quote Link to comment Share on other sites More sharing options...
rustrict Posted September 3, 2019 Share Posted September 3, 2019 8 минут назад, Le ecureuil сказал: TTL не будет, пока смысла в ней не вижу совсем. Ок, я вас понял. Ещё раз спасибо за исправление. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.