私のコンピュータの物理インターフェイス用のトンデバイスインターフェイスを生成するためにCプログラムを作成しようとしています。全体的なアイデアは、トンネルデバイスにネイティブパケットを作成するときに物理物理インターフェイスに配置することです。私の質問は、tonデバイスを実際の物理インターフェイスにどのようにマッピングしますか?
たとえば、私のeth1のIPアドレスは-10.16.1.152です。 eth1 インターフェイスで読み書きできるように tun デバイスを作成するにはどうすればよいですか?同じIPアドレスを提供する必要がありますか、それとも別のIPアドレスを提供する必要がありますか?これは、tunデバイスにパケットを書き込んで、tunデバイスのデフォルトゲートウェイをphyデバイスとして使用するパスを作成する唯一の方法です。
私はフォローしていますこの例しかし、まだ概念は明確ではありません。
次のコマンドを使用してトンネルデバイスを作成しました。マイコンピュータには実際のイーサネットポートがあります。このイーサネットインターフェイスIPアドレス10.16.1.152は、複数のPCに接続し、ゲートウェイサーバーに接続してインターネットにアクセスします。
私はOSPF helloパケットをインターフェースに書き込むCプログラムを書こうとしています。
このために、OSPF hello パケットを書き込むためのトンネル デバイスを作成しました。しかし、その前にトンネル機器を確認したいと思います。ここで私のトンネルデバイスは11.11.11.2/24で10.16.1.152を得るためのパスを設定しています。私が理解しているように、実際のインターフェイス(たとえば10.16.1.152)で受信または送信されたすべてのパケットは、IPアドレス11.11.11.2を持つ対応するトンネルデバイスインターフェイスで受信されます。ただし、10.16.1.152でpingを試みても、RX / Txパケットは受信されません。だから私のトンネルがパケットを受信していないようです。
ip tuntap add mode tun dev tun0
ip addr add 11.11.11.2/24 dev tun0
ip link set dev tun0 up
ip route get 10.16.1.152
ここにどんな概念がありますか?どうすればいいですか?私はまだトンネル機器の概念を把握しようとしています。
答え1
tun
インターフェースを使用して「実際のパケットを既存のインターフェースに入れること」はできません。インターフェイスはtun
、常に既存のすべてのインターフェイスとは異なる新しいネットワークインターフェイスです。
しかし、あなたは使用することができますパケットソケット既存のネットワークインタフェースに生のパケットを書き込むか、既存のネットワークインタフェースから生のパケットを読み込みます。man 7 packet
詳細より。ただし、これはすべてのプロトコル層をバイパスするため、正しいプロトコル動作を直接実装する必要があります。本物あなたがやっていることを知ってそれをしないでください。
あなたは本当に達成したいことが何であるかを言わず、概念について少し混乱しているようです。XYの問題tun
、インタフェースもパケットソケットも実際に必要なものではないかもしれません。