IPIP Forward
1.0.0
UDP、TCP、および ICMP パケットをサポートするシンプルな IPIP 転送プログラム。このプログラムは生の AF_PACKET ソケットを使用します。クライアントが、プログラムのリッスン IP として宛先 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
何も見逃していないことを確認するための警告も含めました。ただし、これは基本的なビルド コマンドです。