搭建OpenVPN服务器及安装客户端(Ubuntu)

客户端

 # 客户端下载地址
 https://swupdate.openvpn.net/community/releases/OpenVPN-2.7.6-I001-amd64.msi

服务端

# 安装软件并确认版本
apt update && apt install -y openvpn easy-rsa
openvpn --version

# 创建 easy-rsa 工作目录 并 切换到该目录
mkdir -p /etc/openvpn/easy-rsa && cd /etc/openvpn/easy-rsa

# 复制 easy-rsa 脚本
cp -r /usr/share/easy-rsa/* .

# 初始化 PKI
./easyrsa init-pki

# 生成 CA(提示输入名称直接回车即可)
./easyrsa build-ca nopass

# 生成及签署证书(按提示输入即可)
./easyrsa gen-req server nopass
./easyrsa sign-req server server

# 客户端证书(每台设备一次,第一台用 client1,以后 client2/client3...)
./easyrsa gen-req client1 nopass
./easyrsa sign-req client client1

# DH 参数(需要几分钟)
./easyrsa gen-dh

# TLS 密钥
openvpn --genkey secret ta.key

# 复制证书到配置目录
cp pki/ca.crt pki/issued/server.crt pki/private/server.key pki/dh.pem ta.key /etc/openvpn/

# 写服务器配置
cat > /etc/openvpn/server.conf <<'EOF'
port 1194
proto udp
dev tun
explicit-exit-notify 1
ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key
dh /etc/openvpn/dh.pem
tls-auth /etc/openvpn/ta.key 0
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "route 192.168.7.0 255.255.255.0"		# 同网段 需要删除此行
keepalive 10 120
data-ciphers AES-256-GCM:AES-128-GCM:CHACHA20-POLY1305
user nobody
group nogroup
persist-key
persist-tun
status /var/log/openvpn-status.log
log-append /var/log/openvpn.log
verb 3
EOF

# server.conf 里:
# 客户端和服务器同网段时:这一行会导致握手后断连,不要加
# 客户端在其他网段、要通过 VPN 访问内网时:才需要加
# push "route 192.168.7.0 255.255.255.0"

# 网络配置(转发 + NAT + 防火墙)
# 开启转发
echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf && sysctl -p

# 查公网网卡名
ip addr | grep -E "^[0-9]+:"        # 确认网卡名,把下面 ens33 换成你的

# NAT(把 eth0 换成你的网卡名)
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o ens33 -j MASQUERADE

# 放行端口
iptables -A INPUT -p udp --dport 1194 -j ACCEPT

# 规则的作用
iptables -A FORWARD -i tun0 -j ACCEPT
iptables -A FORWARD -o tun0 -j ACCEPT

# 保存(作用重启服务器规则生效)
apt install -y iptables-persistent
netfilter-persistent save

# 启动服务
systemctl start openvpn@server
systemctl enable openvpn@server
systemctl status openvpn@server      # active (running) 即成功

# 创建目录
mkdir -p /etc/openvpn/client1

# 配置内容
cat > /etc/openvpn/client1.ovpn <<EOF
client
dev tun
proto udp
remote 192.168.7.12 1194
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
data-ciphers AES-256-GCM:AES-128-GCM:CHACHA20-POLY1305
verb 3
key-direction 1
<ca>
$(cat pki/ca.crt)
</ca>
<cert>
$(cat pki/issued/client1.crt)
</cert>
<key>
$(cat pki/private/client1.key)
</key>
<tls-auth>
$(cat /etc/openvpn/ta.key)
</tls-auth>
EOF

# 验证:必须输出 4(CA + 证书 + 私钥 + ta.key)
grep -c "BEGIN" /etc/openvpn/client1.ovpn

# Ubuntu 生成好的配置文件下载到本地电脑上导入客户端连接
/etc/openvpn/client1.ovpn    		 # client1.ovpn 这个文件

# 查看实时日志
tail -f /var/log/openvpn.log