برنامج إعادة توجيه IPIP بسيط يدعم حزم UDP وTCP وICMP. يستخدم هذا البرنامج مآخذ التوصيل AF_PACKET الخام. عندما يرسل العميل حزمة إلى جهاز إعادة التوجيه باستخدام عنوان IP الوجهة باعتباره عنوان IP للاستماع للبرنامج ويكون المنفذ أعلى من 1024، فسيقوم بإنشاء حزمة IPIP عن طريق إضافة رأس IP خارجي وإرساله إلى عنوان IP الوجهة مع إجراء NAT إلى نفق نقطة النهاية IPIP. عندما يستقبل البرنامج حزم IPIP، فإنه سيرسلها مرة أخرى إلى العميل.
ملاحظة - اعتبارًا من الآن، يرسل فقط الحزم إذا كان منفذ UDP/TCP أعلى من 1024. أعلم أن هذا ليس مناسبًا، لكنني أخطط لتنفيذ ميزة تستبعد فقط منافذ معينة عبر ملف تكوين في برنامج مستقبلي أخطط له لجعل. أقوم بإصدار الكود لهذا البرنامج لإظهار كيفية إعادة توجيه IPIP ببساطة.
ملاحظة - يستخدم هذا مآخذ التوصيل AF_PACKET وتقوم النواة بنسخ الحزمة إلى مساحة المستخدم. أخطط للنظر في استخدام DPDK في وقت ما في المستقبل مما سيؤدي إلى أداء أفضل.
وهنا استخدام البرنامج:
./IPIPForward <Listen IP> <Listen Port> <Destination IP> <Nat IP> <Nat Port> <Interface> [<Thread Count>]
هنا مثال:
./IPIPForward 10.50.0.3 27015 10.50.0.4 10.2.0.5 27015 ens18 4
لقد قمت بتجميع هذا البرنامج باستخدام مجلس التعاون الخليجي 7.
إليك ما استخدمته لبناء البرنامج:
gcc-7 -g IPIPForward.c -g common.c -o IPIPForward -lpthread
لقد قمت أيضًا بتضمين تحذيرات للتأكد من أنني لم أفتقد أي شيء هناك. ومع ذلك، هذا هو أمر البناء الأساسي.