凌峰创科服务平台

Linux搭建VPN服务器步骤有哪些?

  1. 使用 WireGuard强烈推荐,这是目前最流行、性能最高、配置最简单的现代 VPN 协议,它基于最新的加密技术,代码量少,易于审计,速度极快,非常适合个人使用。
  2. 使用 OpenVPN:经典选择,非常稳定、成熟,兼容性极好,几乎所有设备和平台都支持客户端,配置比 WireGuard 稍微复杂一些,但功能强大。

本文将以 Ubuntu 22.04 为例进行讲解,其他发行如 Debian、CentOS 的命令也基本类似,只需稍作调整(apt 改为 yumdnf)。

Linux搭建VPN服务器步骤有哪些?-图1
(图片来源网络,侵删)

使用 WireGuard (推荐)

WireGuard 的核心优势是简单,整个配置过程就是几个命令。

第 1 步:更新系统并安装 WireGuard

登录到你的 Linux 服务器(推荐使用 root 用户或 sudo 权限用户)。

# 更新软件包列表
sudo apt update
# 安装必要的工具和 WireGuard
sudo apt install wireguard -y

第 2 步:生成服务器的密钥对

WireGuard 使用公钥和私钥进行认证,我们需要为服务器和每个客户端都生成一对。

生成服务器密钥:

Linux搭建VPN服务器步骤有哪些?-图2
(图片来源网络,侵删)
# 进入 WireGuard 配置目录
cd /etc/wireguard/
# 生成私钥和公钥
# 私钥 wg0.privatekey 将只显示在屏幕上,请务必保存好!
# 公钥 wg0.publickey 将会保存到文件中
umask 077
wg genkey | tee server_private.key | wg pubkey > server_public.key

查看并记录下服务器的公钥,稍后会用到:

cat server_public.key

第 3 步:创建服务器配置文件

WireGuard 的网络接口(如 wg0)配置文件通常存放在 /etc/wireguard/ 目录下。

创建并编辑配置文件:

sudo nano /etc/wireguard/wg0.conf

粘贴进去,并根据你的实际情况进行修改:

[Interface]
# 服务器私钥,从刚才的文件中读取
PrivateKey = <你的服务器私钥内容>
# VPN 服务器的 IP 地址和子网
# 这个 IP 将作为你 VPN 网关的地址
Address = 10.0.0.1/24
# 端口,WireGuard 默认使用 51820,可以修改成你喜欢的,8080 或 4433
# 同时确保在云服务商(阿里云、腾讯云等)和防火墙中开放这个端口
ListenPort = 51820
# 启用 IP 转发,这是让客户端能够访问互联网的关键
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
# (可选) 如果你的服务器有多个网卡,将 eth0 改成你对外连接的网卡名

重要:

  • <你的服务器私钥内容> 替换为 cat /etc/wireguard/server_private.key 的输出内容。
  • eth0 是大多数云服务器默认的公网网卡名称,你可以使用 ip a 命令查看你的网卡名,如果不是 eth0,请务必修改。

保存并退出 nano (按 Ctrl+XYEnter)。

第 4 步:配置客户端(以你的手机为例)

我们需要为你的手机或电脑创建一个客户端配置。

生成客户端密钥对: 在服务器上执行,为第一个客户端(比如叫 phone)生成密钥。

# 为客户端 'phone' 生成密钥
wg genkey | tee phone_private.key | wg pubkey > phone_public.key

记录下客户端的私钥公钥

# 客户端私钥,用于生成客户端配置文件
cat phone_private.key
# 客户端公钥,用于添加到服务器配置中
cat phone_public.key

创建客户端配置文件: 这个 .conf 文件需要导入到你的手机或电脑 WireGuard 客户端中。

sudo nano /etc/wireguard/phone.conf
[Interface]
# 客户端的私钥
PrivateKey = <你的客户端私钥内容>
# 客户端在 VPN 网络中的 IP 地址
Address = 10.0.0.2/32
# (可选) 客户端 DNS,防止 DNS 泄漏
DNS = 8.8.8.8, 1.1.1.1
[Peer]
# 服务器的公钥
PublicKey = <你的服务器公钥内容>
# 服务器的公网 IP 地址和端口
Endpoint = <你的服务器公网IP>:51820
# 允许客户端访问的 VPN 子网
AllowedIPs = 10.0.0.0/24
# (可选) 如果想让客户端通过 VPN 访问整个互联网,将上面这行改为:
# AllowedIPs = 10.0.0.0/24, 0.0.0.0/0
# 保持连接,120 秒内没有数据传输,则发送一个 100 字节的包来保持连接
PersistentKeepalive = 25

重要:

  • <你的客户端私钥内容><你的服务器公钥内容> 替换为之前记录的内容。
  • <你的服务器公网IP> 替换为你的服务器的真实公网 IP 地址。
  • AllowedIPs 的设置决定了通过 VPN 走哪些流量。0.0.0/24 表示只访问 VPN 服务器所在局域网;0.0.0/0 表示所有流量都走 VPN。

第 5 步:将客户端添加到服务器并启动服务

将客户端的公钥添加到服务器配置:

编辑服务器的主配置文件:

sudo nano /etc/wireguard/wg0.conf

在文件末尾添加一个 [Peer] 部分:

# ... (之前的 [Interface] 配置) ...
[Peer]
# 客户端 'phone' 的公钥
PublicKey = <你的客户端phone公钥内容>
# 分配给客户端的 VPN IP 地址
AllowedIPs = 10.0.0.2/32

启动 WireGuard 服务:

# 启动 wg0 接口
sudo wg-quick up wg0
# 设置开机自启
sudo systemctl enable wg-quick@wg0

检查服务状态:

# 查看 WireGuard 的配置和连接状态
sudo wg
# 应该能看到类似下面的输出,显示已连接的客户端
# interface: wg0
#   public key: <服务器公钥>
#   private key: (hidden)
#   listening port: 51820
#
# peer: <客户端公钥>
#   endpoint: <客户端IP>:端口
#   allowed ips: 10.0.0.2/32
#   latest handshake: 10 seconds ago
#   transfer: 1.25 MiB received, 2.50 MiB sent

第 6 步:在客户端连接

  1. 在你的手机(iOS/Android)或电脑(Windows/macOS/Linux)上安装 WireGuard 客户端。
  2. 通过 "导入配置文件" 或 "二维码扫描" 的方式,将刚才创建的 /etc/wireguard/phone.conf 文件内容添加到客户端。
    • 手机:你可以使用 cat /etc/wireguard/phone.conf 命令查看文件内容,然后长按选择全部,复制生成二维码,用手机扫描即可。
    • 电脑:可以直接将 phone.conf 文件拖到客户端窗口。
  3. 启动连接!

你的设备应该已经通过 VPN 安全地连接到服务器了,你可以访问 whatismyip.com 来验证你的公网 IP 是否已变为服务器的 IP。


使用 OpenVPN (经典稳定)

如果你需要兼容非常老的设备,或者对某些高级功能有需求,可以选择 OpenVPN。

第 1 步:安装 OpenVPN 和 Easy-RSA

easy-rsa 是一个用于管理 PKI (Public Key Infrastructure) 的工具集,可以简化证书的创建过程。

sudo apt update
sudo apt install openvpn easy-rsa -y

第 2 步:准备 PKI 环境

# 创建一个工作目录
mkdir ~/openvpn-ca && cd ~/openvpn-ca
# 复制 easy-rsa 模板文件
make-cadir easy-rsa
cd easy-rsa/
# 编辑 vars 文件,预设一些默认值
nano vars

vars 文件中,找到并修改以下几行(去掉 export 前面的 并修改值):

set_var EASYRSA_REQ_COUNTRY     "CN"
set_var EASYRSA_REQ_PROVINCE    "Beijing"
set_var EASYRSA_REQ_CITY        "Beijing"
set_var EASYRSA_REQ_ORG         "My Company"
set_var EASYRSA_REQ_EMAIL       "your.email@example.com"
set_var EASYRSA_REQ_OU          "MyOrganizationalUnit"

保存退出。

第 3 步:构建证书颁发机构 (CA) 和服务器/客户端证书

# 初始化 PKI
./easyrsa init-pki
# 构建一个 Certificate Authority (CA)
# 过程中会要求你输入一个密码,请务必记住!
./easyrsa build-ca nopass
# 为服务器创建证书和密钥
# 这一步会问你 CA 密码,输入即可,Common Name 可以直接回车使用默认值。
./easyrsa gen-req server nopass
# 使用 CA 签名服务器的请求
# 这一步会问你 CA 密码。
./easyrsa sign-req server server
# 为客户端创建证书(以 client1 为例)
./easyrsa gen-req client1 nopass
./easyrsa sign-req client client1
# 生成 Diffie-Hellman 参数(用于密钥交换),比较耗时
./easyrsa gen-dh
# 生成一个 HMAC 密钥,用于增强 TLS 的安全性
openvpn --genkey --secret pki/ta.key

第 4 步:创建服务器配置文件

# 复制示例配置文件
sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/
sudo gunzip /etc/openvpn/server.conf.gz
# 编辑配置文件
sudo nano /etc/openvpn/server.conf

修改或确保以下配置项正确:

# ...
port 1194
proto udp
dev tun
# ...
ca /root/openvpn-ca/easy-rsa/pki/ca.crt
cert /root/openvpn-ca/easy-rsa/pki/issued/server.crt
key /root/openvpn-ca/easy-rsa/pki/private/server.key
dh /root/openvpn-ca/easy-rsa/pki/dh.pem
# ...
server 10.8.0.0 255.255.255.0
# ...
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 1.1.1.1"
# ...
keepalive 10 120
tls-auth /root/openvpn-ca/easy-rsa/pki/ta.key 0
cipher AES-256-CBC
auth SHA256
user nobody
group nogroup
persist-key
persist-tun
# ...

第 5 步:配置客户端文件

创建一个客户端配置文件模板:

sudo cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client1.ovpn

编辑 ~/client1.ovpn

client
dev tun
proto udp
remote <你的服务器公网IP> 1194
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
cipher AES-256-CBC
auth SHA256
auth-nocache
verb 3
<ca>
# --- 将 /root/openvpn-ca/easy-rsa/pki/ca.crt 的内容粘贴到这里 ---
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE---
</ca>
<cert>
# --- 将 /root/openvpn-ca/easy-rsa/pki/issued/client1.crt 的内容粘贴到这里 ---
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE---
</cert>
<key>
# --- 将 /root/openvpn-ca/easy-rsa/pki/private/client1.key 的内容粘贴到这里 ---
-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY---
</key>
<tls-auth>
# --- 将 /root/openvpn-ca/easy-rsa/pki/ta.key 的内容粘贴到这里 (0 对应服务器,1 对应客户端) ---
-----BEGIN OpenVPN Static key V1-----
...
-----END OpenVPN Static key V1---
</tls-auth>

注意: <tls-auth> 部分的 key-direction 在客户端配置中通常是 1,但在新版的 OpenVPN 中,如果服务器配置了 tls-auth ... 0,客户端可以省略 key-direction 或设为 1

第 6 步:启动服务并设置防火墙

# 启动 OpenVPN 服务
sudo systemctl start openvpn@server
# 设置开机自启
sudo systemctl enable openvpn@server
# 检查状态
sudo systemctl status openvpn@server

配置防火墙 (UFW):

# 允许 OpenVPN 端口 (UDP 1194)
sudo ufw allow 1194/udp
# 启用 IP 转发
echo 'net.ipv4.ip_forward=1' | sudo tee /etc/sysctl.d/99-openvpn.conf
sudo sysctl -p
# 配置 NAT 规则
sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
# 保存规则 (Ubuntu/Debian)
sudo apt install iptables-persistent
sudo netfilter-persistent save

第 7 步:客户端连接

将生成的 client1.ovpn 文件传输到你的客户端设备,然后使用 OpenVPN 客户端导入并连接即可。


总结与对比

特性 WireGuard OpenVPN
易用性 极高,配置文件简单,命令少。 中等,涉及证书管理,步骤较多。
性能 极高,内核级实现,延迟低,吞吐量高。 良好,性能足够,但通常低于 WireGuard。
安全性 极高,使用最现代的加密算法(如 ChaCha20, Poly1305),代码库小,易于审计。 ,成熟可靠,使用 OpenSSL/TLS,历史悠久。
兼容性 良好,主流系统均已内置或提供官方客户端。 极佳,几乎所有平台都有成熟客户端,支持非常广泛。
适用场景 个人用户、追求极致性能和简洁性的场景。 企业环境、需要兼容旧设备、或依赖特定 OpenVPN 功能的场景。

对于绝大多数新用户和项目,WireGuard 是不二之选,它简单、快速、安全,能让你在 10 分钟内完成搭建,只有当你明确知道需要 OpenVPN 的某个特定功能,或者需要连接非常古老的设备时,才需要去折腾 OpenVPN。

分享:
扫描分享到社交APP
上一篇
下一篇