我正在设置一个包含许多小型设备的 VPN 网络(运行 OpenWRT)。在我的用例中,所有设备都通过数字标识,我希望它们的 IP 地址与它们的 ID 匹配(例如:设备编号 6 的 IP 为 XXX6)。
我知道client-config-dir
,ifconfig-push
但我无法使用它们,因为我的所有设备都使用相同的证书(duplicate-cn
已启用)。这是一项要求,因为为每个设备生成一个证书会太受限制(此外,如果我们在系统中添加设备,我们不想更改 VPN 服务器的配置)
是否可以在客户端配置文件中设置 IP 地址?我在文档中没有找到有关该特定主题的任何内容...而且我尝试的所有方法都没有成功。
基本上,我的想法如下:
- 客户端连接到 VPN 服务器并请求特定地址(“给我 IP:172.16.0.22”)
- 如果地址已经被占用,则握手失败。如果是空闲的,则客户端将获得之前请求的地址
答案1
您应该能够使用ifconfig-pool-persist
配置选项来执行此操作。您可以预先配置该文件并设置seconds = 0
为告诉 OpenVPN 仅读取该文件。
出于审计目的,我们使用它来确保同一个用户通过 VPN 连接时分配相同的 IP。
来自手册页:
--ifconfig-pool-persist 文件 [秒] 以秒为间隔(默认值 = 600),以及在程序启动和关闭时将 ifconfig-pool 数据保留/取消保留到文件中。此选项的目标是在客户端(用其通用名称表示)和 ifconfig-pool 分配给它们的虚拟 IP 地址之间提供长期关联。保持长期关联对客户端有好处,因为它允许它们有效地使用 --persist-tun 选项。
文件是一个逗号分隔的 ASCII 文件,格式为,。
如果秒数 = 0,文件将被视为只读。如果您希望将文件视为配置文件,这很有用。
请注意,OpenVPN 仅将此文件中的条目视为基于通用名称和 IP 地址之间过去关联的建议。它们不保证给定的通用名称将始终接收给定的 IP 地址。如果您想要保证分配,请使用 --ifconfig-push
答案2
假设我们正在设置公司 VPN,并且我们想为 3 个不同类别的用户建立单独的访问策略:
System administrators -- full access to all machines on the network
Employees -- access only to Samba/email server
Contractors -- access to a special server only
我们采取的基本方法是:(a) 将每个用户类别隔离到其自己的虚拟 IP 地址范围内,(b) 通过设置以客户端的虚拟 IP 地址为关键的防火墙规则来控制对机器的访问。
在我们的示例中,假设我们的员工数量不定,但只有一名系统管理员和两名承包商。我们的 IP 分配方法是将所有员工放入 IP 地址池,然后为系统管理员和承包商分配固定 IP 地址。
请注意,本示例的先决条件之一是您在 OpenVPN 服务器计算机上运行软件防火墙,这使您能够定义特定的防火墙规则。在我们的示例中,我们假设防火墙是 Linux iptables。
首先我们根据用户类别创建一个虚拟IP地址映射:
Class Virtual IP Range Allowed LAN Access Common Names
Employees 10.8.0.0/24 Samba/email server at 10.66.4.4 [variable]
Sys Admins 10.8.1.0/24 Entire 10.66.4.0/24 subnet sysadmin1
Contractors 10.8.2.0/24 Contractor server at 10.66.4.12 contractor1, contractor2
接下来,让我们将此映射转换为 OpenVPN 服务器配置。首先,确保您已按照上述步骤使 10.66.4.0/24 子网可供所有客户端使用(虽然我们将配置路由以允许客户端访问整个 10.66.4.0/24 子网,但我们将使用防火墙规则施加访问限制以实现上述策略表)。
首先,为我们的 tun 接口定义一个静态单元号,以便我们稍后可以在防火墙规则中引用它:
dev tun0
在服务器配置文件中,定义员工IP地址池:
server 10.8.0.0 255.255.255.0
为系统管理员和承包商 IP 范围添加路由:
route 10.8.1.0 255.255.255.0
route 10.8.2.0 255.255.255.0
因为我们将为特定的系统管理员和承包商分配固定的 IP 地址,所以我们将使用客户端配置目录ccd
:
client-config-dir ccd
现在将特殊的配置文件放在ccd
子目录中,为每个非员工 VPN 客户端定义固定 IP 地址,如下所示。
ccd/sysadmin1
文件:
ifconfig-push 10.8.1.1 10.8.1.2
ccd/contractor1
文件:
ifconfig-push 10.8.2.1 10.8.2.2
ccd/contractor2
文件:
ifconfig-push 10.8.2.5 10.8.2.6
每对 ifconfig-push 地址代表虚拟客户端和服务器 IP 端点。它们必须取自连续的 /30 子网,以便与 Windows 客户端和 TAP-Windows 驱动程序兼容。具体来说,每个端点对的 IP 地址中的最后一个八位字节必须取自以下集合:
[ 1, 2] [ 5, 6] [ 9, 10] [ 13, 14] [ 17, 18]
[ 21, 22] [ 25, 26] [ 29, 30] [ 33, 34] [ 37, 38]
[ 41, 42] [ 45, 46] [ 49, 50] [ 53, 54] [ 57, 58]
[ 61, 62] [ 65, 66] [ 69, 70] [ 73, 74] [ 77, 78]
[ 81, 82] [ 85, 86] [ 89, 90] [ 93, 94] [ 97, 98]
[101,102] [105,106] [109,110] [113,114] [117,118]
[121,122] [125,126] [129,130] [133,134] [137,138]
[141,142] [145,146] [149,150] [153,154] [157,158]
[161,162] [165,166] [169,170] [173,174] [177,178]
[181,182] [185,186] [189,190] [193,194] [197,198]
[201,202] [205,206] [209,210] [213,214] [217,218]
[221,222] [225,226] [229,230] [233,234] [237,238]
[241,242] [245,246] [249,250] [253,254]
这样就完成了 OpenVPN 的配置。最后一步是添加防火墙规则以完成访问策略。
来源:https://openvpn.net/index.php/open-source/documentation/howto.html#policy
答案3
我在配置 @jas_raj 时遇到了一些问题。现在我正在执行下一步:
1) 在 /etc/openvpn 中创建一个新文件夹。例如“目录“
2)server.conf 添加行“客户端配置目录 dir/“
3)在“dir”中,您需要创建一个新文件,其名称与您在证书中写入的名称相同,然后输入:
ifconfig-push IP掩码
例如: ifconfig-推 10.0.0.10 255.0.0.0