Program penerusan IPIP sederhana yang mendukung paket UDP, TCP, dan ICMP. Program ini menggunakan soket AF_PACKET mentah. Ketika klien mengirimkan paket ke mesin penerus dengan IP tujuan sebagai IP pendengar program dan port di atas 1024, ia akan membuat paket IPIP dengan menambahkan header IP luar dan mengirimkannya ke IP tujuan bersamaan dengan melakukan NAT ke terowongan titik akhir IPIP. Ketika program menerima paket IPIP, program akan mengirimkannya kembali ke klien.
Catatan - Saat ini, ia hanya mengirim paket jika port UDP/TCP di atas 1024. Saya tahu ini tidak nyaman, tapi saya berencana untuk mengimplementasikan fitur yang hanya mengecualikan port tertentu melalui file konfigurasi di program mendatang yang saya rencanakan untuk membuat. Saya merilis kode untuk program ini untuk menunjukkan bagaimana penerusan IPIP dilakukan.
Catatan - Ini menggunakan soket AF_PACKET dan kernel menyalin paket ke ruang pengguna. Saya berencana untuk mempertimbangkan penggunaan DPDK di masa mendatang yang akan menghasilkan kinerja yang lebih baik.
Berikut penggunaan programnya:
./IPIPForward <Listen IP> <Listen Port> <Destination IP> <Nat IP> <Nat Port> <Interface> [<Thread Count>]
Berikut ini contohnya:
./IPIPForward 10.50.0.3 27015 10.50.0.4 10.2.0.5 27015 ens18 4
Saya mengkompilasi program ini menggunakan GCC 7.
Inilah yang saya gunakan untuk membuat program:
gcc-7 -g IPIPForward.c -g common.c -o IPIPForward -lpthread
Saya juga menyertakan peringatan untuk memastikan saya tidak melewatkan apa pun di sana. Namun, ini adalah perintah dasar build.