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 tcping
rekan saya tidak mendapat jawaban dan setkey -PD
mengatakan 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 ip
perintah (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.