aws主机为ubuntu 24.04 LTS。openvpn使用端口19,走TCP协议。
(本文内容主要参考 如何在Ubuntu22.04上设置和配置OpenVPN服务器 - 菜鸟教程 )
服务器端需要安装两个软件:openvpn和easy-rsa。
easy-rsa是用来生成各种密钥的,主要有五个文件:
ca.key——ca( ca
选项使用)
server.key——服务器私钥(服务器配置文件中 key
选项使用)
client.key——客户端私钥
server.crt——服务器公钥(服务器配置文件中 cert
选项使用)
client.crt——客户端公钥
ta.key——tls-crypt加密材料( tls-auth
选项使用)
还有一个dh.pem,由openvpn生成。
使用ubuntu账户创建目录 ~/easy-rsa:
xxxxxxxxxx
$ mkdir ~/easy-rsa
$ ln -s /usr/share/easy-rsa/* ~/easy-rsa/
$ sudo chown ubuntu ~/easy-rsa
$ chmod 700 ~/easy-rsa
以上步骤采用符号链接,将 easy-rsa 的工作目录链接到 ubuntu 的家目录中,便于操作。
xxxxxxxxxx
/home/ubuntu/easy-rsa/>$ ./easyrsa init-pki
初始化完成后,会生成pki目录,里面将会存放后面步骤生成的各种证书、key。
进入 ~/easy-rsa,创建 vars文件,内容如下:
xxxxxxxxxx
set_var EASYRSA_REQ_COUNTRY "CN"
set_var EASYRSA_REQ_PROVINCE "GuangDong"
set_var EASYRSA_REQ_CITY "Guangzhou"
set_var EASYRSA_REQ_ORG "suibianxie"
set_var EASYRSA_REQ_EMAIL "admin@example.com"
set_var EASYRSA_REQ_OU "Community"
set_var EASYRSA_ALGO "ec"
set_var EASYRSA_DIGEST "sha512"
xxxxxxxxxx
./easyrsa build-ca nopass
命令会要求输入Common Name,默认为“Easy-RSA CA”。
命令执行后生成两个文件:
/home/ubuntu/easy-rsa/pki/ca.crt
/home/ubuntu/easy-rsa/pik/private/ca.key
这两个文件构成了证书颁发机构的公共和所有组件。
将ca.crt复制到/etc/openvpn/目录中。
xxxxxxxxxx
./easyrsa gen-req server nopass
生成两个文件:
/home/ubuntu/easy-rsa/pki/reqs/server.req
/home/ubuntu/easy-rsa/pki/private/server.key
req为证书请求文件,key为服务器私钥。
使用以下命令生成服务器证书:
xxxxxxxxxx
./easyrsa sign-req server server
命令执行后生成crt文件:
/home/ubuntu/easy-rsa/pki/issued/server.crt。
将server.crt和server.key复制到 /etc/openvpn/server目录中,以便openvpn服务启动时找到它们。
xxxxxxxxxx
./easyrsa gen-req client1 nopass
./easyrsa sign-req client client1
命令执行后生成以下两个有用文件:
/home/ubuntu/easy-rsa/pki/reqs/client1.req
/home/ubuntu/easy-rsa/pki/private/clinet1.key
/home/ubuntu/easy-rsa/pki/issued/client1.crt
xxxxxxxxxx
cd ~/easy-rsa
openvpn --genkey secret ta.key
然后将生成的ta.key文件复制到/etc/openvpn/server/目录下:
xxxxxxxxxx
sudo cp ta.key /etc/openvpn/server/
xxxxxxxxxx
cd ~/easy-rsa
./easyrsa gen-dh
sudo cp ~/easy-rsa/pki/dh.pem /etc/openvpn/server/
以上做完后基本上已经完成了材料制作。
创建服务器端配置文件 /etc/openvpn/server.conf,内容如下:
xxxxxxxxxx
dev tun
port 19
proto tcp
ca ca.crt
cert server/server.crt
key server/server.key
dh server/dh.pem
tls-crypt server/ta.key
comp-lzo
server 10.8.0.0 255.255.255.0
push "redirect-gateway local def1 bypass-dns"
push "dhcp-option DNS 8.8.8.8"
duplicate-cn
log-append /var/log/openvpn/openvpn.log
topology subnet
persist-key
persist-tun
keepalive 10 60
cipher AES-256-GCM
verb 3
daemon
user nobody
group nogroup
up ./iptables.rules
创建脚本 /etc/openvpn/iptables.rules ,内容如下:
xxxxxxxxxx
#
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o enX0 -j MASQUERADE
此脚本用于启用服务器的nat功能。
客户端脚本文件 client.ovpn,内容如下:
xxxxxxxxxx
client
dev tun
proto tcp
port 19
resolv-retry infinite
nobind
comp-lzo
persist-key
persist-tun
remote 【服务器地址】
<ca>
ca.crt文件中的内容
</ca>
<cert>
clinet1.crt中的内容
</cert>
<key>
clinet1.key中的内容
</key>
<tls-crypt>
ta.key中的内容
</tls-crypt>