![更改 OpenVPN DHCP 池](https://linux22.com/image/678260/%E6%9B%B4%E6%94%B9%20OpenVPN%20DHCP%20%E6%B1%A0.png)
我目前有一个配置,它工作得很好,直到一些客户端连接,服务器开始将客户端从服务器上踢出或类似情况。据我检查,每个客户端都获得了一个好的 IP 地址,并且没有 IP 地址冲突。客户端使用不同的证书进行连接。但是我想更改此配置以分离 DHCP 范围。
当前服务器配置如下:
port 1194
proto udp
dev tun
ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key
dh /etc/openvpn/dh2048.pem
server 10.8.0.0 255.255.255.0
topology subnet
push "route 10.8.0.1 255.255.255.0"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
ifconfig-pool-persist ipp.txt
client-config-dir /etc/openvpn/ccd
client-to-client
keepalive 10 300
comp-lzo
user nobody
group nobody
persist-key
persist-tun
status /etc/openvpn/openvpn-status.log
verb 6
我希望从这个范围分配动态 IP:
10.8.1.0 - 10.8.1.254
为此,我想使用 /23,所以 255.255.254.0
我将从这个范围中分配静态 IP:
10.8.0.3 - 10.8.1.255,因为 0.1 和 0.2 可能被分配给服务器。
我将使用它来向客户端推送静态 IP:
ifconfig-push 10.8.0.5 255.255.254.0
您能帮我修改配置来实现这一点吗?
因此将我的 10.8.0.0-10.8.1.255 范围分成两部分:
- 静态 IP:10.8.0.4-10.8.0.255
- 动态 IP:10.8.1.0-10.8.1.254
我也会拥有 Linux 和 Windows 客户端。
答案1
好的,最后通过对配置文件进行一些更改解决了这个问题:
port 1194
proto udp
dev tun
ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key
dh /etc/openvpn/dh2048.pem
mode server
tls-server
topology subnet
push "topology subnet"
ifconfig 10.8.0.1 255.255.254.0
ifconfig-pool 10.8.1.0 10.8.1.253
route-gateway 10.8.0.1
push "route-gateway 10.8.0.1"
client-config-dir /etc/openvpn/ccd
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
client-to-client
keepalive 10 300
comp-lzo
user nobody
group nobody
persist-key
persist-tun
status /etc/openvpn/openvpn-status.log
verb 6
答案2
为了借鉴 Zoltan Szabo 的回答并满足评论中要求的澄清,以下是我对答案的看法。
如何修改DHCP地址池?
首先,回答最初的问题。server 10.8.0.0 255.255.255.0
您的配置中可能存在类似的东西。此指令将自动分配一个带有的 DHCP 池ifconfig-pool 10.8.0.4 10.8.0.251
。如果您尝试自己指定ifconfig-pool
,OpenVPN 会抱怨您不能一起使用server
和ifconfig-pool
。现在有两种方法可以自定义 DHCP 地址池。
a) 使用 nopool
有一个选项可以强制 OpenVPN 不分配 DHCP 地址池。只需nopool
在服务器指令末尾添加参数,您就可以自己指定池。
server 10.8.0.0 255.255.255.0 nopool
ifconfig-pool 10.8.0.100 10.8.0.200
server
b)自己声明和定制扩展指令
Zoltan 使用了此解决方案,虽然有点棘手,但可以让您自定义服务器的更多方面。OpenVPN 手册显示了如何server
扩展该指令。在此基础上,您可以自己声明所有必要的选项。这在很大程度上取决于拓扑以及您是否使用dev tun
或dev tap
。
我只是根据问题中的配置添加了一个示例(topology subnet
和dev tun
)。
mode server
tls-server
push "topology subnet"
ifconfig 10.8.0.1 255.255.255.0
ifconfig-pool 10.8.0.2 10.8.0.253 255.255.255.0
push "route-gateway 10.8.0.1"
route-gateway 10.8.0.1
请参阅下面的注释和手册以获取更多信息。
如何为客户端分配静态 IP 地址?
问题的第二部分是关于分配静态 IP。楼主似乎已经想出了这个办法,而且已经有了充足 的 资源关于这个主题,网上有很多帖子。不过,我想补充一段关于为某些客户端分配静态 IP 地址的简短文字。
解决方案是使用客户端配置目录并在其中为每个客户端添加一个文件。
将其添加到您的 OpenVPN 服务器配置:
client-config-dir /etc/openvpn/ccd
例如,如果您想要将 IP 10.8.0.5 分配给具有通用名称的客户端client1
,请创建包含此内容的文件/etc/openvpn/ccd/client1
(注意:这是用于topology subnet
):
ifconfig-push 10.8.0.5 255.255.255.0
还要保留在OpenVPN 手册记住了。我在 Zoltan 的回答中发布的配置中ifconfig-push
找不到该指令。route
还要记住在包含本地的主 OpenVPN 配置文件中包含一个 --route 指令,以便内核知道将其路由到服务器的 TUN/TAP 接口。
笔记
只是为了补充,这是OpenVPN 手册关于服务器指令的扩展。
例如
--server 10.8.0.0 255.255.255.0
展开如下:mode server tls-server push "topology [topology]" if dev tun AND (topology == net30 OR topology == p2p): ifconfig 10.8.0.1 10.8.0.2 if !nopool: ifconfig-pool 10.8.0.4 10.8.0.251 route 10.8.0.0 255.255.255.0 if client-to-client: push "route 10.8.0.0 255.255.255.0" else if topology == net30: push "route 10.8.0.1" if dev tap OR (dev tun AND topology == subnet): ifconfig 10.8.0.1 255.255.255.0 if !nopool: ifconfig-pool 10.8.0.2 10.8.0.253 255.255.255.0 push "route-gateway 10.8.0.1" if route-gateway unset: route-gateway 10.8.0.2