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

Linux ip xfrm: какова цель tmpl?

Если взять пример Linux ip xfrm команда:

 ip xfrm policy add src $LOCAL dst $REMOTE dir out tmpl src $SRC dst $DST proto esp reqid $ID mode tunnel

Что это tmpl делать?


ОБНОВИТЬ: Конечно, я понимаю, что нужно указать $SRC и $DST. Но, поскольку они уже указаны в SA, через ip xfrm state команду, зачем нам повторять их в tmpl? И что означает называть это «шаблоном»? Мне кажется, что это всего лишь указатель на уже существующую SA (state).

Он сообщает ядру, как обрабатывать пакеты (для out политик) или откуда должны приходить пакеты (для in политик), когда трафик соответствует этой политике (fwd политики немного особенные, поскольку они могут применяться в обоих направлениях в зависимости от селектора, см. этот ответ). В вашем примере политика будет отправлять трафик через SA туннельного режима ESP с IP-адресами конечных точек. $SRC и $DST, и reqid $ID.

Почему нам нужно повторять их в tmpl?

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

И что означает называть это «шаблоном»?

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

Цель шаблона - сопоставить политику и состояние (SA). IP-адрес источника / назначения в политике обычно отличается от того, что используется в состоянии, по этой причине требуется дополнительная пара IP-адресов источника / назначения.

Он называется шаблоном, поскольку используется для сопоставления идентификатора (см. человек ip-xfrm) предоставляется в гос. Вот определение шаблона на странице руководства:


       TMPL := ID [ mode MODE ] [ reqid REQID ] [ level LEVEL ]

       ID := [ src ADDR ] [ dst ADDR ] [ proto XFRM-PROTO ] [ spi SPI ]

Как видите, он должен содержать идентификатор, который точно такой же, как в состоянии xfrm.