VPN 伺服器如何處理從 VPN 用戶端收到的封包?

VPN 伺服器如何處理從 VPN 用戶端收到的封包?

首先,我在網路方面的知識非常有限,所以如果我使用了錯誤的術語,我提前道歉。

情況

我正在嘗試建立一個原型,允許客戶端與不同網路上的本機 Web 伺服器進行通訊。網頁伺服器與 VPN 伺服器託管在同一網路上。到目前為止,我能夠將客戶端資料包(例如:SYN)路由到虛擬介面(tun)並將整個資料包傳送到 VPN 伺服器。在伺服器端,我接收這些資料包,更改來源和目標 IP,並重新計算標頭內的校驗和。

重申一下,流程如下:

  1. 使用者嘗試使用特定的 IP 位址存取 Web 伺服器。
  2. SYN 封包被傳送到虛擬接口,因為它與路由表中的路由相符。
  3. VPN 用戶端應用程式透過已建立的 websocket 連線將 SYN 封包傳送到 VPN 伺服器(無論這是什麼類型的連線)
  4. VPN 伺服器接收封包並修改來源/目標 IP 位址以指向同一網路上託管的實際 Web 伺服器。
  5. 如何將這些資料包發送到網路伺服器並接收來自網路伺服器的回應?我希望客戶端透過 VPN 伺服器/建立的 Web 套接字連接與 Web 伺服器進行通訊。我有哪些選擇?

問題

我怎麼才能將這些資料包發送到網路伺服器,並從網路伺服器接收資料包並發回客戶端?我是否將資料包「注入」到正確的介面並確保我的應用程式將回應傳送回客戶端?我希望客戶端透過 VPN 伺服器/建立的 Web 套接字連接與 Web 伺服器進行通訊。我有哪些選項?

我嘗試過的

我在伺服器端嘗試做的是建立一個虛擬介面(tun)並將從客戶端接收到的封包寫入該介面。但是,這些資料包不會發送到網路伺服器。客戶端和伺服器在 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 可以完成(並且偶爾會完成),但更常見的是作業系統防火牆的工作和系統管理員的決定 - 它不應該完全由 VPN 軟體自行完成。一般來說,內部網路內的通訊不應該需要網路位址轉換;使用它通常表示您的網路的基本路由設定不正確。

如何將這些資料包發送到網路伺服器並接收來自網路伺服器的回應?我希望客戶端透過 VPN 伺服器/建立的 Web 套接字連接與 Web 伺服器進行通訊。我有哪些選擇?

通常,VPN 伺服器將具有與 VPN 用戶端完全相同的虛擬接口,並將使用完全相同的機制來產生和接收封包。 (有些將為每個客戶端創建專用的虛擬接口,其他的將為所有客戶端創建一個接口。)如果您的客戶端正在使用一個tun接口,您的伺服器也可以執行相同的操作。

相關內容