为了连接到OpenVPN服务器以允许您访问内部网本地资源,您只需要一个 OpenVPN 客户端。在本指南中,我们将学习如何在 CentOS 8/Ubuntu 18.04 上安装和配置 OpenVPN 客户端。请注意,OpenVPN 软件可以配置为作为服务器或客户端工作。
通过以下链接了解如何在 CentOS 8 上安装和配置 OpenVPN 服务器;
在 CentOS 8/Ubuntu 18.04 上安装和配置 OpenVPN 客户端
为了演示不同 Intranet 上两台服务器的通信,我们有两台服务器,Ubuntu 18.04 和 CentOS 8,它们无法通信,因为它们位于不同的 LAN 网络上,只能通过 OpenVPN 服务器访问。两台服务器仅连接了 NAT 接口。
在 Ubuntu 18.04 上安装 OpenVPN 客户端
OpenVPN 维护着多个 OpenVPN (OSS) 软件存储库,可以从中安装最新和稳定版本的 OpenVPN 客户端。但是,您需要手动创建这些源列表,如下所示;
安装 OpenVPN 存储库签名密钥。
wget -O - https://swupdate.openvpn.net/repos/repo-public.gpg| sudo apt-key add -
接下来,安装 Ubuntu 18.04 的源列表。
echo "deb http://build.openvpn.net/debian/openvpn/stable $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/openvpn-aptrepo.list
更新您的包缓存。
apt update
在 Ubuntu 18.04 上安装 OpenVPN 客户端
apt install openvpn
然后,您可以通过运行以下命令来验证版本;
openvpn --version
在 CentOS 8 上安装 OpenVPN 客户端
在 CentOS 8 上,在撰写本文时,最新的 OpenVPN 版本 2.4.8 由 EPEL 存储库提供。
dnf info openvpn
Name : openvpn
Version : 2.4.8
Release : 1.el8
Arch : x86_64
Size : 540 k
Source : openvpn-2.4.8-1.el8.src.rpm
Repo : epel
Summary : A full-featured SSL VPN solution
URL : https://community.openvpn.net/
License : GPLv2
...
要在 CentOS 8 上安装 OpenVPN 客户端,您需要安装 EPEL 存储库,如果没有;
dnf install epel-release
然后就可以通过执行命令安装OpenVPN客户端了;
dnf install openvpn
在 CentOS 8/Ubuntu 18.04 上配置 OpenVPN 客户端
为了能够连接到 OpenVPN 服务器,您需要创建包含 CA 证书、客户端服务器证书和密钥的客户端配置。
如果您遵循我们在 CentOS 8上设置 OpenVPN 服务器的指南,我们描述了如何生成客户端证书文件和密钥。
生成密钥后,将它们复制到客户端并记下它们的存储路径。
您还需要将 HMAC 密钥和 CA 证书复制到客户端。
然后您可以创建 OpenVPN 客户端配置。
例如,为客户端koromicha创建 OpenVPN 配置文件,其证书和密钥为koromicha.crt和koromicha.key;
vim koromicha.ovpn
client
tls-client
pull
dev tun
proto udp4
remote 192.168.2.132 1194
resolv-retry infinite
nobind
#user nobody
#group nogroup
persist-key
persist-tun
key-direction 1
remote-cert-tls server
auth-nocache
comp-lzo
verb 3
auth SHA512
tls-auth ta.key 1
ca ca.crt
cert koromicha.crt
key koromicha.key
请注意,在此设置中,客户端证书、密钥、CA 证书和 HMAC 密钥与 OpenVPN 客户端配置本身位于同一路径 koromicha.ovpn。
ls
ca.crt koromicha.crt koromicha.key koromicha.ovpn ta.key
为了避免证书和密钥路径的问题,您可以将它们内嵌在配置文件中;
client
tls-client
pull
dev tun
proto udp4
remote 192.168.2.132 1194
resolv-retry infinite
nobind
#user nobody
#group nogroup
persist-key
persist-tun
key-direction 1
remote-cert-tls server
auth-nocache
comp-lzo
verb 3
auth SHA512
<tls-auth>
-----BEGIN OpenVPN Static key V1-----
feb1af5407baa247d4e772c76aed6c75
...
-----END OpenVPN Static key V1-----
</tls-auth>
<ca>
-----BEGIN CERTIFICATE-----
MIIDTjCCAjagAwIBAgIUX0VQrHTgLDabUUIOAf7tD9cGp4YwDQYJKoZIhvcNAQEL
...
WA9BBk2shVWfR849Lmkep+GPyqHpU47dZAz37ARB2Gfu3w==
-----END CERTIFICATE-----
</ca>
<cert>
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
...
/7FvJaeLqmUHnvSs5eBlRZSgtOL19SCFkG0HXdnw3LtBaoHQXxgzOkDPW1+5
-----END CERTIFICATE-----
</cert>
<key>
-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC+DI7kg6MsRoCs
...
6WdLcNtWKAcU294xJEZoOA8/
-----END PRIVATE KEY-----
</key>
在所有客户端服务器上为需要连接到 vpn 的每个用户执行相同操作。
如果您注意到了,下面的行被注释以避免错误,错误:Linux 路由添加命令失败:外部程序退出并显示错误状态:2通过刷新创建的路由,然后在重新连接时再次添加它们。
#user nobody
#group nogroup
OpenVPN 客户端配置文件现已准备就绪。
然后您可以按需连接到 OpenVPN 服务器或配置您的服务器以在系统重新启动时建立 VPN 配置文件。
要按需连接,只需使用 openvpn 命令即可;
sudo openvpn client.ovpn
或者
sudo openvpn --config client.ovpn
如果与 OpenVPN 服务器的连接成功,您应该会看到一个 Initialization Sequence Completed
.
...
Wed Apr 14 15:23:19 2020 ROUTE_GATEWAY 10.0.2.2/255.255.255.0 IFACE=enp0s3 HWADDR=08:00:27:8d:b0:f8
Wed Apr 14 15:23:19 2020 TUN/TAP device tun0 opened
Wed Apr 14 15:23:19 2020 TUN/TAP TX queue length set to 100
Wed Apr 14 15:23:19 2020 /sbin/ip link set dev tun0 up mtu 1500
Wed Apr 14 15:23:19 2020 /sbin/ip addr add dev tun0 10.8.0.3/24 broadcast 10.8.0.255
Wed Apr 14 15:23:19 2020 /sbin/ip route add 192.168.2.132/32 via 10.0.2.2
Wed Apr 14 15:23:19 2020 /sbin/ip route add 0.0.0.0/1 via 10.8.0.1
Wed Apr 14 15:23:19 2020 /sbin/ip route add 128.0.0.0/1 via 10.8.0.1
Wed Apr 14 15:23:19 2020 Initialization Sequence Completed
检查IP地址;
[koromicha@centos8 ~]$ ip add show tun0
6: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 100
link/none
inet 10.8.0.3/24 brd 10.8.0.255 scope global tun0
valid_lft forever preferred_lft forever
inet6 fe80::8d65:4038:acb0:b954/64 scope link stable-privacy
valid_lft forever preferred_lft forever
koromicha@ubuntu1804:~$ ip add show tun0
10: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 100
link/none
inet 10.8.0.2/24 brd 10.8.0.255 scope global tun0
valid_lft forever preferred_lft forever
inet6 fe80::bd3d:27ff:84d5:e587/64 scope link stable-privacy
valid_lft forever preferred_lft forever
测试两台远程服务器之间的连通性;
koromicha@ubuntu1804:~$ ping 10.8.0.3 -c 4
PING 10.8.0.3 (10.8.0.3) 56(84) bytes of data.
64 bytes from 10.8.0.3: icmp_seq=1 ttl=64 time=3.78 ms
64 bytes from 10.8.0.3: icmp_seq=2 ttl=64 time=3.59 ms
64 bytes from 10.8.0.3: icmp_seq=3 ttl=64 time=3.61 ms
64 bytes from 10.8.0.3: icmp_seq=4 ttl=64 time=3.30 ms
--- 10.8.0.3 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3007ms
rtt min/avg/max/mdev = 3.307/3.576/3.786/0.172 ms
[koromicha@centos8 ~]$ ping 10.8.0.2 -c 4
PING 10.8.0.2 (10.8.0.2) 56(84) bytes of data.
64 bytes from 10.8.0.2: icmp_seq=1 ttl=64 time=6.77 ms
64 bytes from 10.8.0.2: icmp_seq=2 ttl=64 time=1.57 ms
64 bytes from 10.8.0.2: icmp_seq=3 ttl=64 time=4.37 ms
64 bytes from 10.8.0.2: icmp_seq=4 ttl=64 time=13.6 ms
--- 10.8.0.2 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 15ms
rtt min/avg/max/mdev = 1.571/6.572/13.577/4.443 ms
根据您的服务器路由设置,您还应该能够访问互联网。
将 OpenVPN 客户端作为 Systemd 服务运行
为了在服务器重新启动时自动建立连接,您可以启用 OpenVPN 客户端 systemd 服务。
你可以做到这一点之前,改变你的VPN配置文件从扩展.ovpn
到.conf
。相应地替换文件名。
cp koromicha.ovpn koromicha.conf
将.conf
文件复制到 OpenVPN 客户端配置目录,/etc/openvpn/client
.
cp koromicha.conf /etc/openvpn/client
接下来,启动 OpenVPN 客户端 systemd 服务。将名称koromicha替换为.conf 配置文件的名称。
systemctl start openvpn-client@koromicha
检查状态;
systemctl status openvpn-client@koromicha
● openvpn-client@koromicha.service - OpenVPN tunnel for koromicha
Loaded: loaded (/lib/systemd/system/openvpn-client@.service; disabled; vendor preset: enabled)
Active: active (running) since Wed 2020-04-14 16:00:35 EAT; 8s ago
Docs: man:openvpn(8)
https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage
https://community.openvpn.net/openvpn/wiki/HOWTO
Main PID: 6877 (openvpn)
Status: "Initialization Sequence Completed"
Tasks: 1 (limit: 2300)
CGroup: /system.slice/system-openvpn\x2dclient.slice/openvpn-client@koromicha.service
└─6877 /usr/sbin/openvpn --suppress-timestamps --nobind --config koromicha.conf
Elb 14 16:00:37 ubuntu1804.kifarunix-demo.com openvpn[6877]: Incoming Data Channel: Cipher 'AES-256-GCM' initialized with 256 bit key
Elb 14 16:00:37 ubuntu1804.kifarunix-demo.com openvpn[6877]: ROUTE_GATEWAY 10.0.2.2/255.255.255.0 IFACE=enp0s3 HWADDR=08:00:27:4b:ff:18
Elb 14 16:00:37 ubuntu1804.kifarunix-demo.com openvpn[6877]: TUN/TAP device tun0 opened
Elb 14 16:00:37 ubuntu1804.kifarunix-demo.com openvpn[6877]: TUN/TAP TX queue length set to 100
Elb 14 16:00:37 ubuntu1804.kifarunix-demo.com openvpn[6877]: /sbin/ip link set dev tun0 up mtu 1500
Elb 14 16:00:37 ubuntu1804.kifarunix-demo.com openvpn[6877]: /sbin/ip addr add dev tun0 10.8.0.2/24 broadcast 10.8.0.255
Elb 14 16:00:37 ubuntu1804.kifarunix-demo.com openvpn[6877]: /sbin/ip route add 192.168.2.132/32 via 10.0.2.2
Elb 14 16:00:37 ubuntu1804.kifarunix-demo.com openvpn[6877]: /sbin/ip route add 0.0.0.0/1 via 10.8.0.1
Elb 14 16:00:37 ubuntu1804.kifarunix-demo.com openvpn[6877]: /sbin/ip route add 128.0.0.0/1 via 10.8.0.1
Elb 14 16:00:37 ubuntu1804.kifarunix-demo.com openvpn[6877]: Initialization Sequence Completed
使其能够在系统启动时运行;
systemctl enable openvpn-client@koromicha
您已经在 Ubuntu 18.04 和 CentOS 8 上成功安装和设置了 OpenVPN 客户端。到此我们结束了关于如何在 CentOS 8/Ubuntu 18.04 上安装和配置 OpenVPN 客户端的教程。