IPIP Forward
1.0.0
一个简单的IPIP转发程序,支持UDP、TCP和ICMP数据包。该程序使用原始 AF_PACKET 套接字。当客户端向转发机发送数据包,目的IP为程序监听IP,且端口号在1024以上时,会添加外层IP头创建一个IPIP数据包,并发送给目的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
我使用 GCC 7 编译了这个程序。
这是我用来构建程序的内容:
gcc-7 -g IPIPForward.c -g common.c -o IPIPForward -lpthread
我还添加了警告,以确保我没有遗漏任何内容。然而,这是基本的构建命令。