0%

安装OpenVpn的Ubuntu22.04服务端和Windows10客户端

本文将在Ubuntu22.04服务器安装OpenVpn服务端,并在Windows10安装OpenVpn客户端。

安装OpenVpn和Easy-RSA

Easy-RSA主要用来生成CA证书,服务端证书和key,客户端证书和key。先登录Ubuntu服务器,然后用root身份执行下文的命令。

1
2
3
4
5
sudo apt update
sudo apt install openvpn easy-rsa

# 安装完可以查看下openvpn版本
openvpn --version

制作所需的证书

执行如下命令

1
2
3
4
5
6
7
8
9
10
cd /usr/share/easy-rsa

# 拷贝一份vars文件
cp vars.example vars

# 编辑vars文件
vim vars

# 在最后一行添加如下内容,这个 KEY_NAME 下文会用到,请记住
export KEY_NAME="myserver"

开始制作证书

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 执行完这个命令,会在/usr/share/easy-rsa下多出个pki目录
./easyrsa init-pki
chmod 777 pki

# 创建ca证书,此时在pki目录下会多出 ca.crt
./easyrsa build-ca nopass

# 创建服务端证书,命令中的myserver要换成前面vars文件中设置的KEY_NAME
# 此时,pki下的issued和private目录会多出myserver.crt、myserver.key 等文件
./easyrsa build-server-full myserver nopass

# 创建客户端证书
# 再次查看,pki下的issued和private目录会多出myclient.crt、myclient.key 等文件
./easyrsa build-client-full myclient nopass

# 创建DH密钥
./easyrsa gen-dh

配置OpenVpn服务端

拷贝配置文件

1
cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf /etc/openvpn/

拷贝刚才创建的CA证书,服务端证书和key(私钥),客户端证书和key,以及创建tls的key

1
2
3
4
5
6
7
8
9
10
cd /etc/openvpn/
cp /usr/share/easy-rsa/pki/ca.crt .
cp /usr/share/easy-rsa/pki/dh.pem .
cp /usr/share/easy-rsa/pki/issued/myserver.crt server/
cp /usr/share/easy-rsa/pki/private/myserver.key server/
cp /usr/share/easy-rsa/pki/issued/myclient.crt client/
cp /usr/share/easy-rsa/pki/private/myclient.key client/

# 生成tls需要的key
openvpn --genkey tls-auth ta.key

编辑服务端配置文件server.conf,改成如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# vpn服务端口
port 1194

# 使用tcp协议
proto tcp

# vpn使用的虚拟网卡设备
dev tun

# CA以及证书和私钥
ca /etc/openvpn/ca.crt
cert /etc/openvpn/server/myserver.crt
key /etc/openvpn/server/myserver.key # This file should be kept secret
dh /etc/openvpn/dh.pem

# vpn服务端要给客户端分配的IP地址(以及网段)
server 10.8.100.0 255.255.255.0

ifconfig-pool-persist /var/log/openvpn/ipp.txt

# vpn服务端要帮客户端转发的网段(即192.168.0.0/255.255.255.224这些地址,才会经过vpn)
push "route 192.168.0.0 255.255.255.224"

# 让客户端使用下面的dns服务器
push "dhcp-option DNS 114.114.114.114"
push "dhcp-option DNS 8.8.8.8"

# 客户端之间可以互相访问
client-to-client

# 支持多个客户端连接服务端
duplicate-cn
keepalive 10 120

# 开启tls安全,上文的ta.key就用在这里
tls-auth ta.key 0 # This file is secret
cipher AES-256-CBC

# 启用lzo压缩
comp-lzo

# 运行最多30个客户端连接
max-clients 30

# 持久key和tun设备
persist-key
persist-tun

status /var/log/openvpn/openvpn-status.log
log /var/log/openvpn/openvpn.log

# 记录的日期等级为3
verb 3

启动vpn服务端

1
2
3
4
5
systemctl start openvpn@server
systemctl status openvpn@server

# 感兴趣的话,可以查看日志
tail -f /var/log/openvpn/openvpn.log

如果你的Ubuntu系统是云服务器,通常管理后台可以设置防火墙,建议在Ubuntu关闭ufw:

1
2
3
4
5
# 停止ufw
sudo ufw disable
# 禁用ufw
sudo systemctl stop ufw
sudo systemctl disable ufw

设置IP转发

如果你搭建的VPN服务器所在的内网还有其他云服务器,你想访问其他云服务器就应该设置ip转发。就如上文描述的,我们在VPN服务端配置文件server.conf中配置了 push "route 192.168.0.0 255.255.255.224"

打开内核ip转发:

1
2
3
4
5
6
7
8
# 编辑文件/etc/sysctl.conf
vim /etc/sysctl.conf

# 打开如下一行,改为:
net.ipv4.ip_forward = 1

# 然修改永久生效
sysctl -p

设置防火墙(iptables )转发规则:

1
2
# 设置源地址翻译SNAT:把来自10.8.100.0/24的流量在离开网络接口ens3前,修改源ip为192.168.0.28
iptables -t nat -A POSTROUTING -s 10.8.100.0/24 -o ens3 -j SNAT --to-source 192.168.0.28

重启下vpn服务端:systemctl start openvpn@server。到这里,服务端安装完成。

安装Windows客户端

在openvpn官网下载客户端:这里。下载好以后点击运行,进行安装。

vpn客户端配置文件路径在:C:\Program Files\OpenVPN\config 目录下。

把上文在Ubuntu创建的4个文件下载到Windows系统的 C:\Program Files\OpenVPN\config 目录下(可以用scp命令或FileZilla这样的工具来下文件,如果你安装了32位的openvpn,应该是目录 C:\Program Files (x86)\OpenVPN\config):

1
2
3
4
5
# Ubuntu上的这4个文件,下载放到Windows的C:\Program Files\OpenVPN\config目录内
/etc/openvpn/ca.crt
/etc/openvpn/ta.key
/etc/openvpn/client/myclient.crt
/etc/openvpn/client/myclient.key

创建客户端配置文件

进入 C:\Program Files\OpenVPN\config 目录,在里面创建一个ovpn配置文件,比如叫 test-001.ovpn,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
client
dev tun
proto tcp
remote 你的公网IP地址 1194
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
verb 3
ca ca.crt
cert myclient.crt
key myclient.key
tls-auth ta.key 1
comp-lzo
route 192.168.0.0 255.255.255.224

上面的 route 192.168.0.0 255.255.255.224 也是告诉服务端,客户端访问这些 192.168.0.0/255.255.255.224 地址时,才经过VPN。

保存配置文件,然后启动 openvpn gui 客户端。通常,客户端会在Windows托盘停留,右键选择 test-001.ovpn 配置,点连接即可。连接成功显示如下:

如果你发现你的vpn客户端不是这样的界面,请下载 openvpn-install-2.4.8-I601-Win10.exe 这个版本的vpn(I601-Win10不重要,主要是版本最好是2.4.8),卸载原来的版本,并重新安装就行。

然后,在CMD中ping VPN服务端的地址(下面10.8.100.1是vpn分配的网关地址,vpn客户端分配到的是10.8.100.6,192.168.0.28是vpn服务器内网ip,192.168.0.4是vpn服务所在内网的另一条机器的内网ip):

至此,vpn客户端和服务端全部安装完成。