具有身份验证/加密功能的 VPN,每个客户端均具有单独的 TAP 界面

具有身份验证/加密功能的 VPN,每个客户端均具有单独的 TAP 界面

是否有任何 VPN 程序可以处理客户端身份验证、数据加密并为每个经过身份验证的客户端提供分接界面?

我需要1 个共享 UDP 端口(VPN 服务端口)哪些客户端正在使用 VPN 协议连接,我需要每个经过身份验证的客户端最终都会进入自己的tap 接口.. 这允许我为连接到 VPN 集中器的每个客户端分别设置防火墙、路由、不同的 dhcp 服务器等。

OpenVPN 不是一个选项,因为我不知道如何设置 1 个外部端口 -> 单独的 tap 接口。我不想在 VPN 守护进程中进行路由或任何过滤,这是内核的工作。

如果不存在,我将编写自己的应用程序(当然是 GPL 左右)。

谢谢你!

答案1

检查 OpenVPN 的 learn-address 设置,您可以运行一个脚本,为每个客户端设置一个自定义表,然后在您的 FORWARD 表中添加一条规则,根据客户端的源地址跳转到该自定义表(最终默认拒绝所有转发)。这就是我在这里处理它的方式,每个客户端都有一个文件,每行包含一个 CIDR 条目,该文件成为他们的自定义表并定义他们能够通过 VPN 访问哪些网络/主机(如果您需要过滤协议/端口而不是简单的网络/主机,只需编写更多脚本即可)。

答案2

OpenVPN 不是一个选项,因为您不知道如何使用它?您已经告诉我们您的要求。至于哪个选项是选项,就留给答案吧。

第一点:您可以使用 iptables CONNMARK 和 MARK 目标来标记来自特定客户端的所有内容。这可以用于防火墙和路由。我怀疑您是否需要多个 DHCP 服务器,因为您可以根据其 L2 地址设置每个客户端的配置。

如果您确实需要每个 DHCP 实例一个接口,那么使用虚拟接口应该可以实现:将 veth0 绑定到 VPN-tap 桥接器,并将 DHCP 服务器绑定到 veth1 或类似设备。桥接 VPN 客户端的分离可以通过 ebtables 完成。

很难相信有人会因为只想使用一个 UDP 端口而认真考虑编写 VPN 软件(为什么?)。即使这样也可以轻松通过 NAT 实现。您只需要能够将客户端配置与源地址关联起来。即使使用完全动态的客户端 IP 地址,也可以通过首先创建非加密 IP 隧道来强制执行。

相关内容