我是 VPN 网络的新手,所以我有一个概念性问题。
我的场景有一个客户端使用规则集连接到 VPN,该规则集将一些数据包隧道传输到远程 VPN 代理,以便在目标允许时进行分析和转发。
如果使用基于加密的协议,此隧道将使用附加层包装每个传入数据包,该层将使用证书(例如)在另一端进行验证。
隧道也由一个虚拟接口表示,假设我们将使用 utun0。
所以我的问题与在客户端和某些远程服务之间建立 tcp/ip 会话的情况有关。因此,对于传出的数据包,我可以假设它们将被 vpn 隧道层包裹,然后由 vpn 本身解包。
但是对于传入的数据包,它们将通过 vpn 层到达,因此它首先需要由 VPN 客户端验证,然后内层必须是进程,但这发生在另一个接口上(如常规 en0 保存客户端的IP)。
所以首先,我想知道虚拟接口 utun0 是如何获取它的数据包的——也许它使用特定的端口?
其次,当一个 tcp/ip 传入数据包到达 utun0 时,它被隧道客户端解密。它是否移动到从它的 vpn 层展开的常规接口 (en0) ?
谢谢 !
VPN 客户端(或服务器)“拥有”接口。与真实网络接口由硬件和物理连接支持的方式类似,虚拟网络接口由软件支持。进入接口的任何内容(传出流量)都会传递给 VPN 客户端进程。退出接口(传入流量)的任何内容都来自 VPN 客户端进程。
具体取决于虚拟接口的确切类型。对于 macOS utun,它是一个指向套接字的文件描述符。
隧道连接(IPSec、WireGuard、OpenVPN 等)是 VPN 客户端建立的常规网络连接。
你有它倒退:传入的隧道流量通过常规网络接口(例如en0)到达。建立连接的进程(VPN 客户端)接收并处理它。之后,它被发送到utun0,在那里它显示为传入的未加密流量。