|
|
ru.unix.bsd- RU.UNIX.BSD ------------------------------------------------------------------ From : Sergey Korolew 2:6053/1.2 22 May 2005 23:59:09 To : All Subject : 5.4 - поломан PMTUD при использовании IPSEC в транспортном режиме --------------------------------------------------------------------------------
Роутер с 5.4STABLE (сегодняшней). Стандартая схема использования ipsec -
поднят gif-туннель, соответственно, шифруются ipencap-пакеты. mtu туннеля меньше
чем 1500.
Проблема - при приходе tcp-пакета с DF не проходящего в этот gif-интерфейс
генерится icmp unreachable, need frag с _нулевым_ желательным mtu !
Разумеется, источник пакетов никак на такую лажу не реагирует.
Убирание IPSEC из ядра полностью снимает проблему.
Дело, по всей видимости, в корявой попытке исправить pmtud для туннельного
режима ipsec:
sys/netinet/ip_input.c
#if defined(IPSEC) || defined(FAST_IPSEC)
/*
* If the packet is routed over IPsec tunnel, tell the
* originator the tunnel MTU.
* tunnel MTU = if MTU - sizeof(IP) - ESP/AH hdrsiz
* XXX quickhack!!!
*/
... поскипано
/*
* find the correct route for outer IPv4
* header, compute tunnel MTU.
*
* XXX BUG ALERT
* The "dummyifp" code relies upon the fact
* that icmp_error() touches only ifp->if_mtu.
*/
/*XXX*/
destifp = NULL;
if (sp->req != NULL
&& sp->req->sav != NULL
&& sp->req->sav->sah != NULL) {
ro = &sp->req->sav->sah->sa_route;
if (ro->ro_rt && ro->ro_rt->rt_ifp) {
dummyifp.if_mtu =
ro->ro_rt->rt_rmx.rmx_mtu ?
ro->ro_rt->rt_rmx.rmx_mtu :
ro->ro_rt->rt_ifp->if_mtu;
dummyifp.if_mtu -= ipsechdr;
destifp = &dummyifp;
}
}
Если обнаружена политика ipsec, подходящая для данного пакета, то тупо пытаемся
скорректировать mtu. Блин, ну хоть проверку на тип (туннельный/транспортный)
надо же вставить ! Иначе получаем нулевое желательное mtu в ответном icmp-пакете
при транспортном режиме.
Есть ли здесь заинтересованные люди (читай использующие ipsec),
способные корректно исправить проблему или хотя бы донести это до авторов ?
Это же вилы...
Всего наилучшего,
Sergey aka DS
--- GoldED+/W32 snapshot-2001.03.04
* Origin: Hету. Придумывать лень. (2:6053/1.2)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор Архивное /ru.unix.bsd/22204290e78d.html, оценка из 5, голосов 10
|