VPN サーバーは VPN クライアントから受信したパケットをどのように処理しますか?

VPN サーバーは VPN クライアントから受信したパケットをどのように処理しますか?

まず、ネットワークに関する私の知識は非常に限られているため、間違った用語を使用している場合は事前にお詫び申し上げます。

状況

私は、クライアントが別のネットワーク上のローカル Web サーバーと通信できるようにするプロトタイプを作成しようとしています。Web サーバーは、VPN サーバーと同じネットワーク上でホストされています。これまでのところ、クライアント パケット (例: SYN) を仮想インターフェイス (tun) にルーティングし、パケット全体を VPN サーバーに送信することができます。サーバー側では、これらのパケットを受信し、送信元と送信先の IP を変更し、ヘッダー内のチェックサムを再計算します。

繰り返しになりますが、流れは次のようになります。

  1. ユーザーは特定の IP アドレスを使用して Web サーバーにアクセスしようとします。
  2. SYN パケットはルーティング テーブル内のルートと一致するため、仮想インターフェイスに送信されます。
  3. VPN クライアント アプリケーションは、確立された Websocket 接続を介して SYN パケットを VPN サーバーに送信します (接続の種類は関係ありません)。
  4. VPN サーバーはパケットを受信し、送信元/宛先 IP アドレスを変更して、同じネットワーク上でホストされている実際の Web サーバーを指すようにします。
  5. これらのパケットを Web サーバーに送信し、Web サーバーからの応答を受信するにはどうすればよいでしょうか。クライアントが VPN サーバーまたは確立された Web ソケット接続を介して Web サーバーと通信するようにしたいのですが、どのようなオプションがありますか。

質問

これらのパケットを Web サーバーに送信し、Web サーバーからパケットを受信して​​クライアントに送り返すにはどうすればよいですか? パケットを正しいインターフェイスに「挿入」し、アプリケーションが応答をクライアントに送り返すようにする必要がありますか? クライアントが VPN サーバー/確立された Web ソケット接続を介して Web サーバーと通信するようにします。どのようなオプションがありますか? また、一般に、現在の VPN サーバーはこれをどのように実行しますか?

私が試したこと

サーバー側で試したのは、仮想インターフェイス (tun) を作成し、クライアントから受信したパケットをインターフェイスに書き込むことです。ただし、これらのパケットは Web サーバーに送信されません。クライアントとサーバーは、ネットワーク拡張機能を使用して macOS 上で実行されています (これが役立つ場合)。Web サーバーは で実行されており、インターフェイスに書き込む前に、192.168.1.95パケットのソース IP を に変更しました。100.64.0.77tun

Routing tables

Internet:
Destination        Gateway            Flags        Netif Expire
default            192.168.1.254      UGSc           en0       
default            link#10            UCSI         utun2       
100.64.0.77        100.64.0.77        UH           utun2       
127                127.0.0.1          UCS            lo0       
127.0.0.1          127.0.0.1          UH             lo0       
169.254            link#7             UCS            en0      !
192.168.1          link#7             UCS            en0      !
192.168.1          link#10            UCSI         utun2       
192.168.1.92/32    link#7             UCS            en0      !
192.168.1.99       8c:a9:82:2e:d6:2e  UHLWI          en0    986
192.168.1.254/32   link#7             UCS            en0      !
192.168.1.254      70:f1:96:86:e6:a0  UHLWIir        en0   1196
224.0.0/4          link#7             UmCS           en0      !
224.0.0/4          link#10            UmCSI        utun2       
224.0.0.251        1:0:5e:0:0:fb      UHmLWI         en0       
255.255.255.255/32 link#7             UCS            en0      !
255.255.255.255/32 link#10            UCSI         utun2   

`

答え1

VPN サーバーはパケットを受信し、送信元/宛先 IP アドレスを変更して、同じネットワーク上でホストされている実際の Web サーバーを指すようにします。

クライアントが既に必要な宛先 IP アドレスを指定しているため、これは必要ありません。(VPNカプセル化する元のパケットを別の IP パケット内に格納し、元の IP ヘッダーを変更することなく、サーバー側で再度カプセル化を解除して元のパケットをそのまま転送するだけで済みます。

NATは実行可能です(実際に時々実行されています)が、多くの場合はOSファイアウォールの役割であり、システム管理者の判断です。VPNソフトウェアだけで実行すべきではありません。また、一般的に、内部ネットワーク内の通信は必要NAT を使用すると、ネットワークの基本的なルーティングが正しく設定されていないことが示されることがよくあります。

これらのパケットを Web サーバーに送信し、Web サーバーからの応答を受信するにはどうすればよいでしょうか。クライアントが VPN サーバーまたは確立された Web ソケット接続を介して Web サーバーと通信するようにしたいのですが、どのようなオプションがありますか。

通常、VPN サーバーは VPN クライアントとまったく同じ仮想インターフェイスを持ち、パケットの生成と受信にまったく同じメカニズムを使用します。(クライアントごとに専用の仮想インターフェイスを作成するものもあれば、すべてのクライアントに対して単一のインターフェイスを持つものもあります。) クライアントがインターフェイスを使用している場合はtun、サーバーでも同じことができます。

関連情報