第一步:创建并编辑脚本文件

在 Ubuntu 终端中执行以下命令,创建一个名为 setup_vpn.sh 的文件:

1
nano setup_vpn.sh

第二步:复制完整脚本代码

在打开的编辑器中,粘贴以下全自动脚本代码(代码中已自动处理交互确认,无需手动按回车或输入 yes):

  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
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
#!/bin/bash
set -e

echo "=== 1. 更新软件源并安装 OpenVPN ==="
sudo apt update
sudo apt install -y openvpn easy-rsa iptables curl

echo "=== 2. 配置 PKI 并生成证书 ==="
rm -rf ~/openvpn-ca
make-cadir ~/openvpn-ca
cd ~/openvpn-ca

# 初始化 PKI 并自动签发 CA
./easyrsa init-pki
./easyrsa --batch build-ca nopass

# 生成并自动签发服务端证书
./easyrsa --batch gen-req server nopass
./easyrsa --batch sign-req server server

# 生成 Diffie-Hellman 参数和 TLS 密钥
./easyrsa gen-dh
openvpn --genkey secret ta.key

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

echo "=== 3. 写入服务端配置文件 ==="
sudo bash -c 'cat <<EOF > /etc/openvpn/server/server.conf
port 1194
proto udp
dev tun
ca /etc/openvpn/server/ca.crt
cert /etc/openvpn/server/server.crt
key /etc/openvpn/server/server.key
dh /etc/openvpn/server/dh.pem
tls-auth /etc/openvpn/server/ta.key 0
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 223.5.5.5"
push "dhcp-option DNS 119.29.29.29"
keepalive 10 120
cipher AES-256-GCM
auth SHA256
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
verb 3
EOF'

echo "=== 4. 配置网络与防火墙路由 ==="
# 开启 IPv4 转发
grep -qF 'net.ipv4.ip_forward = 1' /etc/sysctl.conf || echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

# 获取网卡名称并配置 NAT
NIC=$(ip route get 8.8.8.8 | awk '{print $5; exit}')
sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o $NIC -j MASQUERADE

# 如果开了 ufw 防火墙则放行端口
if command -v ufw > /dev/null; then
    sudo ufw allow 1194/udp
fi

echo "=== 5. 生成客户端证书与 phone.ovpn 配置文件 ==="
cd ~/openvpn-ca
./easyrsa --batch gen-req phone nopass
./easyrsa --batch sign-req client phone

PUBLIC_IP=$(curl -s ifconfig.me)

cat <<EOF > ~/phone.ovpn
client
dev tun
proto udp
remote $PUBLIC_IP 1194
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
cipher AES-256-GCM
auth SHA256
key-direction 1
<ca>
$(cat pki/ca.crt)
</ca>
<cert>
$(cat pki/issued/phone.crt)
</cert>
<key>
$(cat pki/private/phone.key)
</key>
<tls-auth>
$(cat ta.key)
</tls-auth>
EOF

echo "=== 6. 启动 OpenVPN 服务 ==="
sudo systemctl restart openvpn-server@server
sudo systemctl enable openvpn-server@server

echo ""
echo "=================================================="
echo " OpenVPN 服务端安装完成!"
echo " 客户端配置文件已保存在: ~/phone.ovpn"
echo " 服务器外网 IP 为: $PUBLIC_IP"
echo " 注意:请务必在云服务器控制台安全组中放行 UDP 1194 端口!"
echo "=================================================="

保存退出方法:

  • Ctrl + O,然后按 Enter(保存)

  • Ctrl + X(退出编辑器)

第三步:给脚本赋予执行权限

在终端中运行:

1
chmod +x setup_vpn.sh

第四步:一键运行脚本

执行以下命令开始搭建:

1
./setup_vpn.sh

手机端连接方式:

将生成在主目录下的 ~/phone.ovpn 文件传输到手机(通过 SCP、微信文件传输助手或 FTP)。

手机下载安装 OpenVPN Connect App

App 中选择 Import Profile -> File,导入 phone.ovpn 即可一键开启连接。