web-dev-qa-db-ja.com

Linux上のRacoon-初期パケット損失

2つのLinuxボックスを構成して、通信が必要なときにトランスポートレベルのIPSec接続を自動的に使用するようにしました。構成は、X509認証とbundle_complexオプションがonに設定されたRacoon、および2つのボックス間に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トランスポートがネゴシエートされるまでパケットを「遅延」させることによって、これを防ぐ方法はありますか?

3
E.Benoît

最初のパケット(およびネゴシエーションが完了するまでの他のすべてのパケット)は常に破棄されます。

これは、私が扱ったすべてのISAKMP実装に当てはまります。破棄されているパケットをバッファリングできなかった理由が必ずしもあるとは思いません。むしろ、それはすべきではありません

これは、インターネットのルーティングインフラストラクチャ全体で使用される意識的な設計決定の拡張です:パケットを保持しない

インターネット上のルーティングシステムは、パケットを(ほぼ)すぐにルーティングできない場合、遅延するのではなく、常にパケットを破棄します。インターネット全体でのパケット損失は、パケットを余裕ができるまでバッファリングしておくだけで、はるかに低いレベルに簡単に減らすことができます。しかし、そこに問題があります。先入れ先出しキューで200ミリ秒遅れて実行されている過負荷のルーターは、すべてのパケットをその200ミリ秒遅延させます。

これをISAKMPの状況に戻します。パスがそれらを伝送する準備ができるまで2、3のpingを保持することは素晴らしいことですが、それが数十万のUDPパケットの一定のストリームである場合はどうでしょうか。また、リモートシステムにアクセスできない場合、ISAKMPはそこに座って、ISAKMPネゴシエーションメッセージ2を60秒間待機します。

これらは克服できないエンジニアリングの問題ではありませんが、インターネットエンジニアリングコミュニティの一般通念は、主にTCPなどの損失耐性のあるプロトコルを使用することで、クライアントシステムにパケット損失の問題を処理させる方がはるかに簡単で簡単であるというものです。

1
Shane Madden

トラフィックが流れ始める前に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).

私はまだアライグマで同じことをする方法を理解していませんが、私は同様の何かがあるはずだと思います。

1
user389238