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

Racoon в Linux - потеря первоначального пакета

Я сконфигурировал два Linux-сервера, чтобы они автоматически использовали IPSec-соединение транспортного уровня всякий раз, когда им нужно общаться. Конфигурация основана на Racoon с аутентификацией X509 и bundle_complex опция установлена ​​на on, а также политики, требующие как ESP, так и AH между двумя блоками.

Во время работы конфигурации, как правило, первые несколько пакетов всегда теряются, например:

$ ping -c 3 A.B.C.D
PING A.B.C.D (A.B.C.D) 56(84) bytes of data.
ping: sendmsg: Operation not permitted
ping: sendmsg: Operation not permitted
64 bytes from A.B.C.D: icmp_req=3 ttl=64 time=0.497 ms

Есть ли способ предотвратить это, например, "задерживая" пакеты до тех пор, пока не будет согласован транспорт IPSec?

Вы можете автоматически запустить туннель IPSEC до того, как начнется поток трафика (обычно эти первые отброшенные пакеты инициируют согласование IKE). Вот как это сделать с помощью StrongSwan:

   auto = ignore | add | route | start
          what operation, if any, should be done  automatically  at  IPsec
          startup;  currently-accepted  values  are  add, route, start and
          ignore (the default).  add loads a connection  without  starting
          it.   route  loads  a  connection  and installs kernel traps. If
          traffic is detected between leftsubnet and rightsubnet , a  con‐
          nection  is established.  start loads a connection and brings it
          up immediatly.  ignore ignores the connection. This is equal  to
          delete  a  connection  from  the  config  file.   Relevant  only
          locally, other end need not agree on it (but in general, for  an
          intended-to-be-permanent   connection,   both  ends  should  use
          auto=start to ensure that any reboot causes immediate renegotia‐
          tion).

Хотя я до сих пор не понял, как сделать то же самое с енотом, но, думаю, должно быть что-то подобное.

Первый пакет (и все остальные до завершения согласования) всегда отбрасывается.

Это верно для каждой реализации ISAKMP, с которой я имел дело. Я не верю, что обязательно есть причина, по которой это не мог буферизировать отбрасываемые пакеты; скорее это не должен.

Это продолжение осознанного дизайнерского решения, которое используется во всей инфраструктуре маршрутизации Интернета: Не держите пакеты.

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

Возвращаем это к ситуации ISAKMP; удерживать пару эхо-запросов до тех пор, пока путь не будет готов к их переносу, - это прекрасно, но что, если это постоянный поток из сотен тысяч пакетов UDP? А что, если удаленная система недоступна, поэтому ISAKMP находится в ожидании сообщения согласования ISAKMP 2 в течение 60 секунд?

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