IPIP Forward
1.0.0
UDP, TCP 및 ICMP 패킷을 지원하는 간단한 IPIP 전달 프로그램입니다. 이 프로그램은 원시 AF_PACKET 소켓을 사용합니다. 클라이언트가 대상 IP를 프로그램의 Listen IP로 하고 포트가 1024 이상인 포워딩 머신으로 패킷을 보내면 외부 IP 헤더를 추가하여 IPIP 패킷을 생성하고 NAT를 수행하여 대상 IP로 보냅니다. 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
또한 거기에 아무것도 놓치지 않았는지 확인하기 위해 경고도 포함했습니다. 그러나 이것은 기본 빌드 명령입니다.