Deploy Server and Client
Install OpenVPN and EasyRSA
apt install -y openvpn easy-rsa
Create CA
cd /etc/openvpn
Create EasyRSA dir.
make-cadir ~/easy-rsa
cd easy-rsa
Init PKI
./easyrsa init-pki
Create CA(Self Sign): Input CA nama and password.
./easyrsa build-ca
Create Server Cert
Create server cert and key.
./easyrsa gen-req server nopass
./easyrsa sign-req server server
Create Diffie-Hellman Params.
./easyrsa gen-dh
Create TLS Key.
openvpn --genkey --secret ta.key
Create Client Cert
cname=kuga
./easyrsa gen-req $cname nopass
req: /etc/openvpn/easy-rsa/pki/reqs/kuga.req
key: /etc/openvpn/easy-rsa/pki/private/kuga.key
./easyrsa sign-req client $cname
Certificate created at: /etc/openvpn/easy-rsa/pki/issued/kuga.crt
Put files to client dir.
mkdir -p /etc/openvpn/client/$sname
cp /etc/openvpn/easy-rsa/pki/issued/kuga.crt /etc/openvpn/client/$sname
cp /etc/openvpn/easy-rsa/pki/private/kuga.key /etc/openvpn/client/$sname
Setup Server
sname=cmajorrocks
mkdir -p /etc/openvpn/server/$sname
cp ./easy-rsa/pki/issued/server.crt /etc/openvpn/server/$sname
cp ./easy-rsa/pki/private/server.key /etc/openvpn/server/$sname
cp ./easy-rsa/pki/dh.pem /etc/openvpn/server/$sname
cp ./easy-rsa/ta.key /etc/openvpn/server/$sname
server.conf
# 监听端口和协议
port 1194
proto udp
dev tun
# 证书和密钥文件路径
ca /etc/openvpn/easy-rsa/pki/ca.crt
cert /etc/openvpn/server/cmajorrocks/server.crt
key /etc/openvpn/server/cmajorrocks/server.key
dh /etc/openvpn/server/cmajorrocks/dh.pem
remote-cert-tls client
# topology
topology subnet
# 分配给客户端的 IP 地址池
server 10.8.0.0 255.255.255.0
# 持久化 IP 分配,每60秒保存一次
ifconfig-pool-persist /var/log/openvpn/cmajorrocks-server-ipp.txt 60
# 推送路由规则到客户端,允许客户端访问 ECS 所在的内网(可选)和通过 ECS 上网
# push "redirect-gateway def1 bypass-dhcp"
# 推送 DNS 服务器,这里使用 Google 的公共 DNS
# push "dhcp-option DNS 8.8.8.8"
# push "dhcp-option DNS 8.8.4.4"
# 保持客户端之间的通信(客户端之间可以直接访问)
# client-to-client
# 保持连接,便于重新连接
keepalive 10 120
# 加密算法
data-ciphers AES-256-CBC
auth SHA256
# TLS 密钥,增强安全性
tls-auth /etc/openvpn/server/cmajorrocks/ta.key 0
# 允许压缩(如果带宽有限可以开启,但可能有安全风险,根据需求选择)
# comp-lzo
# 最大客户端数量
max-clients 2
# 权限降级,增加安全性
# user nobody
# group nobody
# 状态日志文件,每分钟记录一次
status /var/log/openvpn/cmajorrocks-server-status.log
log-append /var/log/openvpn/cmajorrocks-server.log
verb 4
push "route 10.8.0.0 255.0.0.0 vpn_gateway"
route 10.8.0.0 255.0.0.0 vpn_gateway
Client base.conf
client
dev tun
proto udp
remote ip-or-host 1194
resolv-retry infinite
nobind
persist-key
persist-tun
cipher AES-256-CBC
auth SHA256
verb 3
Client genconf.sh
#!/bin/bash
KEY_FILE=/etc/openvpn/client/cmajorrocks/kuga.key
CRT_FILE=/etc/openvpn/client/cmajorrocks/kuga.crt
CA_FILE=/etc/openvpn/easy-rsa/pki/ca.crt
TA_FILE=/etc/openvpn/server/cmajorrocks/ta.key
OVPN_DIR=/etc/openvpn/client/cmajorrocks
BASE_CONF=/etc/openvpn/client/cmajorrocks/base.conf
cat ${BASE_CONF} \
<(echo -e '<ca>') \
${CA_FILE} \
<(echo -e '</ca>\n<cert>') \
${CRT_FILE} \
<(echo -e '</cert>\n<key>') \
${KEY_FILE} \
<(echo -e '</key>\n<tls-auth>') \
${TA_FILE} \
<(echo -e '</tls-auth>') \
> ${OVPN_DIR}/${1}.ovpn
IP Forward & IP Table
vim /etc/sysctl.conf
net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
netfilter-persistent save