OpenVPN 如何调整进入 tun0 的所有流量?

OpenVPN 如何调整进入 tun0 的所有流量?

首先,我了解内核路由表使所有出站流量转发到tun0.然而,他们不会访问本地tun0接口拥有的IP 地址(例如,10.13.10.6),而不是目标地址(例如,10.13.10.5)。在这种情况下,OpenVPN 如何连接所有流向的流量tun0?据我所知,涉及到一种叫做原始套接字的东西,但我想了解它是如何具体确保这种行为的。

答案1

再看一下路由表( ip route)。你会注意到有一条default到 的路由10.13.10.5,或一对0.0.0.0/1/128.0.0.0/1到的路由10.13.10.5(这只是一个技巧,允许 OpenVPN 保留默认路由,尽管它变得不活动),这条路线经过 tun0

有什么IP并不重要tun0,重要的是网关IP,恰好10.13.10.5位于 的另一边tun0

那么OpenVPN是如何让所有流量都进入的tun0呢?通过提供路由,就像没有 OpenVPN 一样,所有流量都会流向eth0(或wlan0,或任何默认路由所说的内容)。

OpenVPN 没有做任何特别的事情。特别是,它不使用原始套接字,而是创建一个 tun/tap 接口。

编辑

OpenVPN 不会“侦听绑定到另一端的流量”。

当。。。的时候Linux内核看到一个网络数据包,它会咨询路由表决定如何处理数据包。如果路由表显示“10.13.10.5通过以下方式将所有数据包发送到网关tun0”,那么 Linux 内核就是这样做的。 OpenVPN 不以任何方式参与其中。

现在OpenVPN已经创建了tun0,所以当内核放入一个数据包时tun0,OpenVPN可以读取这个数据包。这就是 tun/tap 接口的作用:它允许应用程序读取放入此接口(由内核)的数据包,并写入将从该接口发出的数据包(也将像内核一样进行处理,就像如果数据包来自真实的网卡)。

不涉及混杂模式。问题是你不明白tun/tap接口是如何工作的吗?

相关内容