iproute2を使用して、コンソールから手動でIPsec接続をセットアップしようとしています。私が必要としているのは、IPsecがすべての進入(ESP / TUNNEL MODE)を変換し、それをeth0(私のシステムではem1と呼ばれます)に渡す仮想インターフェース(せいぜい、仮想IPアドレスでも十分です)です。もう一方のセットでは、ピアがパケットを自身のethから取り出して解読し、反対側の仮想インターフェイスに渡します。したがって、「通常の」IPsecトンネルを確立したいと思います。
ポリシーとSAには何の問題もありません。トランスポートモードのシステムの通常のイーサネットアドレスを使用して簡単に構成できます。
ip xfrm policy add src 198.51.100.1 dst 198.51.100.2 dir out tmpl proto esp
ip xfrm state add src 198.51.100.1 dst 198.51.100.2 spi 24501 proto esp enc des 0xAABBCCDDEEFF0011
ip xfrm state add src 198.51.100.2 dst 198.51.100.1 spi 24501 proto esp enc des 0xAABBCCDDEEFF0022
ピアの敵対的な構成は非常にうまく機能します。
今私は仮想IPと他のシステムへのルートをセットアップしてみました
ip address add 10.0.0.0 dev em1
ip route add to 10.0.0.2 via 10.0.0.1
反対側も同様です。これもうまくいきます。次に、IPsecポリシーとSAを
ip xfrm policy add src 10.0.0.1 dst 10.0.0.2 dir out tmpl src 198.51.100.1 dst 198.51.100.2 proto esp mode tunnel
ip xfrm state add src 10.0.0.1 dst 10.0.0.2 spi 24501 proto esp enc des 0xAABBCCDDEEFF0011
ip xfrm state add src 10.0.0.2 dst 10.0.0.1 spi 24501 proto esp enc des 0xAABBCCDDEEFF0022
tcping
ピアにアクセスしようとすると、応答が得られずsetkey -PD
、セキュリティポリシーがトリガーされなかったことがわかります。現在、IPsecトンネルを処理するために機能する仮想インターフェイスを作成しようとしていますが、それを物理インターフェイスにバインドする方法と、カーネルにセキュリティポリシーを適用させる方法がわかりません。
私はこれをiproute2で解決できることが重要です。これは、最終的にC ++プログラムからこれを実行したいため、ip
コマンドと同じスタイルでNetlinkコマンドをドロップする適切なクラスがすでにあるためです(私ができることip
、I私のコード内でも行うことができます)。実際、最初の部分はすでに私のプログラムで動作しており、残りの部分にも同じNetlink API関数を使用したいと思っています。
更新 私は状態がトンネルアドレスで設定される必要があることを理解したので、動作中のSAは
ip xfrm state add src 10.0.0.1 dst 10.0.0.2 spi 24501 proto esp enc des 0xAABBCCDDEEFF0011
ip xfrm state add src 10.0.0.2 dst 10.0.0.1 spi 24501 proto esp enc des 0xAABBCCDDEEFF0022
ポリシーは同じままですが。これでポリシーがトリガーされ、スニッフィングポートで変換されたパケットが表示されます。また、他のマシンのiptablesがパケットをブロックし、テストのためにそれを無効にしました。
そのため、現在は一方通行のように見えますが、それでも答えは得られません。問題がある場合、私にもわかりませんまだ、何とか変換ルーティングまたはインターフェース部。私が好む解決策は仮想インターフェイスを含むものですが、変換がそのように機能するかどうかは言うまでもなく、それを物理インターフェイスにバインドする方法はわかりません。