Apa yang saya perlukan untuk menambahkan adaptor IPsec virtual?

8

Saya mencoba mengatur koneksi IPsec secara manual dari konsol dengan iproute2. Yang saya butuhkan adalah antarmuka virtual (paling-paling, alamat IP virtual juga bisa mencukupi) sehingga IPsec-mengubah semua yang masuk (ESP / TUNNEL MODE) dan menyerahkannya ke eth0 (pada sistem saya disebut em1). Di set lain, peer mengambil paket dari et deciphers-nya sendiri dan menyerahkannya ke antarmuka virtual di sisi lain. Jadi saya ingin membuat terowongan IPsec "normal".

Saya tidak punya masalah dengan kebijakan dan SA, dan mengonfigurasi itu mudah menggunakan alamat ethernet normal dari sistem dalam mode transportasi, yaitu

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

dan konfigurasi musuh pada peer bekerja dengan baik.

Sekarang saya mencoba mengatur IP virtual dan rute ke sistem lain

ip address add 10.0.0.0 dev em1
ip route add to 10.0.0.2 via 10.0.0.1

dan lagi sebaliknya di sisi lain. Ini lagi bekerja dengan baik. Kemudian saya mengubah kebijakan IPsec dan SA menjadi

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

Ketika saya sekarang mencoba untuk tcpingrekan saya tidak mendapat jawaban dan setkey -PDmengatakan kepada saya, bahwa kebijakan keamanan tidak pernah dipicu. Sekarang saya mencoba membuat antarmuka virtual yang berfungsi untuk menangani terowongan IPsec, tapi saya tidak tahu bagaimana cara mengikatnya ke antarmuka fisik dan bagaimana saya mendapatkan kernel untuk menerapkan kebijakan keamanan.

Sangat penting bagi saya bahwa saya dapat menyelesaikan ini dengan iproute2, karena saya akhirnya ingin melakukan ini dari program C ++ dan saya sudah memiliki kelas yang sesuai yang menjatuhkan perintah Netlink dengan gaya yang sama dengan ipperintah (apa yang dapat saya lakukan dengan ip, saya juga dapat dilakukan dalam kode saya). Bahkan, bagian pertama sudah berfungsi dari program saya dan saya ingin menggunakan fungsi Netlink API yang sama untuk yang lain.

Pembaruan Saya menemukan bahwa keadaan perlu diatur dengan alamat terowongan sehingga SA yang berfungsi

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

sementara kebijakannya tetap sama. Sekarang kebijakan dipicu dan saya melihat paket yang diubah pada port sniffing. Juga iptables di mesin lain memblokir paket dan saya menonaktifkannya untuk pengujian.

Jadi, satu arah tampaknya bekerja sekarang, tetapi saya masih belum mendapat jawaban. Saya juga tidak tahu apakah masalahnya adalah belum entah bagaimana mengubah, routing atau bagian antarmuka. Solusi yang saya pilih masih berupa antarmuka virtual, tetapi saya tidak tahu bagaimana mengikatnya secara fisik, apalagi jika transformasi akan bekerja seperti itu.

Marste
sumber

Jawaban:

1

Biasanya yang Anda gunakan adalah terowongan, dibuat menggunakan ip tunnel add. Perangkat terowongan memberi Anda perangkat virtual yang merangkum paket IP di dalam paket IP lainnya. Kemudian paket yang dienkapsulasi dapat dienkripsi menggunakan IPsec.

Misalnya, Anda bisa membuat terowongan GRE menggunakan:

ip tunnel add mytunnel mode gre remote 198.51.100.2
ip addr add 10.0.0.1 peer 10.0.0.2/31 dev mytunnel

Kemudian Anda dapat mengkonfigurasi IPSec untuk mengenkripsi paket GRE (baik secara umum, atau hanya ke tujuan itu).

olav
sumber