โปรแกรมส่งต่อ IPIP แบบง่ายที่รองรับแพ็กเก็ต UDP, TCP และ ICMP โปรแกรมนี้ใช้ซ็อกเก็ต AF_PACKET แบบดิบ เมื่อไคลเอนต์ส่งแพ็กเก็ตไปยังเครื่องส่งต่อโดยมี IP ปลายทางเป็น IP ฟังของโปรแกรมและพอร์ตสูงกว่า 1024 มันจะสร้างแพ็กเก็ต IPIP โดยเพิ่มส่วนหัว IP ภายนอกและส่งไปยัง IP ปลายทางพร้อมกับดำเนินการ NAT ไปที่ อุโมงค์ปลายทาง IPIP เมื่อโปรแกรมได้รับแพ็กเก็ต IPIP ก็จะส่งกลับไปยังไคลเอนต์
หมายเหตุ - ณ ตอนนี้ จะส่งแพ็กเก็ตเฉพาะในกรณีที่พอร์ต UDP/TCP สูงกว่า 1,024 ฉันรู้ว่าไม่สะดวก แต่ฉันวางแผนที่จะใช้คุณสมบัติที่ยกเว้นเฉพาะบางพอร์ตผ่านไฟล์กำหนดค่าในโปรแกรมในอนาคตที่ฉันวางแผน ที่จะทำให้ ฉันกำลังปล่อยโค้ดให้กับโปรแกรมนี้เพื่อแสดงวิธีการส่งต่อ 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
ฉันรวบรวมโปรแกรมนี้โดยใช้ GCC 7
นี่คือสิ่งที่ฉันใช้ในการสร้างโปรแกรม:
gcc-7 -g IPIPForward.c -g common.c -o IPIPForward -lpthread
ฉันยังใส่คำเตือนเพื่อให้แน่ใจว่าฉันไม่ได้พลาดสิ่งใดไปที่นั่น อย่างไรก็ตาม นี่คือคำสั่ง build พื้นฐาน