在本指南中,我们将学习如何为 OpenVPN 客户端分配静态 IP 地址。例如,在大多数情况下,如果您的环境中有一些控件需要主机具有静态 IP 地址以实现此类控件的可管理性,那么您很可能需要为特定客户端分配一个静态 IP 地址。OpenVPN 支持分配静态 IP 地址。
为 OpenVPN 客户端分配静态 IP 地址
OpenVPN 能够从定义的 IP 池中为客户端分配特定的 IP 地址。为此,它使用了三种类型的客户端 IP 地址选择算法。这些包括,按使用顺序;
- 的使用
--client-connect script
。这涉及执行指定的脚本,该脚本在客户端连接时在服务器上生成包含静态 IP 地址的文件。这种方法通常是首先要考虑的选择。 - 的使用
--client-config-dir
。这涉及使用包含客户端静态 IP 地址的文件,根据其客户端证书通用名称 (CN)(第二选择)。 - 使用
--ifconfig-pool
for 为动态 IP 分配(最后选择)。
如需更多信息,请咨询man openvpn
。
在本指南中,我们将使用第二个选项,我们将配置我们的 OpenVPN 服务器以读取特定文件,该文件包含客户端通用名称和映射的 IP 地址。这可确保根据客户端证书上定义的通用名称为连接客户端分配静态 IP 地址。
在我们之前的指南中,我们介绍了在 CentOS 8系统上安装和配置 OpenVPN 服务器。
创建一个文件来存储静态 IP 地址
使用该client-config-dir
选项,需要将分配给连接客户端的静态 IP 地址存储在 OpenVPN 服务器可以读取的文件中。
因此,打开 OpenVPN 服务器配置文件,/etc/openvpn/server/server.conf
并将静态 IP 分配文件的路径设置为client-config-dir
参数值。
vim /etc/openvpn/server/server.conf
...
# EXAMPLE: Suppose you want to give
# Thelonious a fixed VPN IP address of 10.9.0.1.
# First uncomment out these lines:
client-config-dir /etc/openvpn/ccd
...
在这个演示中,我们将存储静态/固定 IP 地址分配文件的路径设置为,/etc/openvpn/ccd
。好吧,我尝试使用默认的 /etc/openvpn/server/ccd 路径,但它导致了以下错误;
Could not access file 'ccd/koromicha': Permission denied (errno=13)
Could not access file 'ccd/DEFAULT': Permission denied (errno=13)
因此,作为一种变通方法,我们选择使用不同的路径,如上所示。
为 OpenVPN 客户端分配静态 IP 地址
对于要为其分配静态 IP 地址的每个 OpenVPN 客户端,您需要从该特定客户端证书中提取通用名称。
在我们的演示中,我们创建了两个 OpenVPN 客户端,koromicha和johndoe。要从客户端证书中提取通用名称,请使用openssl
如下所示的命令。请务必更换客户端证书。
openssl x509 -subject -noout -in /etc/openvpn/client/koromicha/koromicha.crt
subject=CN = koromicha
openssl x509 -subject -noout -in /etc/openvpn/client/johndoe/johndoe.crt
subject=CN = johndoe
一旦您有了客户端的通用名称,您就可以使用该ifconfig-push
选项为它们分配静态 IP 地址。例如,使用证书koromicha
为公用名分配IP地址的10.8.0.50
客户端,使用证书的客户端使用johndoe
CN的IP地址为IP地址10.8.0.60
,分配是这样完成的;
echo "ifconfig-push 10.8.0.50 255.255.255.0" > /etc/openvpn/ccd/koromicha
echo "ifconfig-push 10.8.0.60 255.255.255.0" > /etc/openvpn/ccd/johndoe
请注意,分配静态 IP 地址的方式取决于您配置 OpenVPN 服务器的拓扑。在我们的例子中,我们将拓扑设置为子网;
# Network topology
...
topology subnet
重启 OpenVPN 服务器;
systemctl restart openvpn-server@server
一定要经常检查日志;
tail -f /var/log/openvpn/openvpn.log
验证 OpenVPN 客户端上的静态 IP 地址分配
假设您的客户端上已经有相应的客户端 OpenVPN 配置文件,请启动连接并验证 IP 地址分配。
sudo openvpn johndoe.ovpn
检查分配的IP地址;
ip add show tun0
8: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 100
link/none
inet 10.8.0.60/24 brd 10.8.0.255 scope global tun0
valid_lft forever preferred_lft forever
inet6 fe80::ea62:fbae:5b45:2d78/64 scope link stable-privacy
valid_lft forever preferred_lft forever
在另一个客户端上;
ip add show tun0
12: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 100
link/none
inet 10.8.0.50/24 brd 10.8.0.255 scope global tun0
valid_lft forever preferred_lft forever
inet6 fe80::c928:c76d:fbd4:6c6a/64 scope link stable-privacy
valid_lft forever preferred_lft forever
检查两个客户端之间的连通性;
ping 10.8.0.60 -c 3
PING 10.8.0.60 (10.8.0.60) 56(84) bytes of data.
64 bytes from 10.8.0.60: icmp_seq=1 ttl=64 time=4.67 ms
64 bytes from 10.8.0.60: icmp_seq=2 ttl=64 time=3.86 ms
64 bytes from 10.8.0.60: icmp_seq=3 ttl=64 time=4.05 ms
--- 10.8.0.60 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 3.864/4.196/4.670/0.351 ms
这就对了。关于如何为 OpenVPN 客户端分配静态 IP 地址的指南到此结束。