重要声明:法律与合规性
在开始之前,必须强调最重要的一点:

- 遵守当地法律法规:在中国大陆,未经许可建立、使用VPN服务可能涉及法律风险,请确保您的操作符合相关法律法规,通常此类操作仅限于公司内部为员工提供远程办公支持。
- 公司授权:请确保您已获得公司的明确授权来进行此项操作,这属于公司IT基础设施的变更。
第一步:准备工作
在开始配置之前,请确保您已准备好以下内容:
-
一台云服务器:
- 操作系统:推荐使用 Ubuntu 22.04 LTS 或 CentOS 7/8,因为它们有大量的社区文档和教程支持,本指南将以 Ubuntu 22.04 为例。
- 服务器配置:对于少量用户,1核CPU、1-2GB内存、1-2Mbps带宽即可,用户增多或流量增大时,请相应升级配置。
- 公网IP地址:云服务器必须有一个固定的公网IP地址。
- 安全组/防火墙设置:这是最关键的一步,您需要在云服务商(如阿里云、腾讯云、AWS等)的控制台设置安全组,放行以下端口:
- VPN协议端口:
- WireGuard (推荐):UDP
51820 - OpenVPN (传统):TCP
1194或 UDP1194 - IPsec (IKEv2):UDP
500和4500
- WireGuard (推荐):UDP
- SSH端口:TCP
22(用于远程登录和管理服务器)
- VPN协议端口:
-
本地客户端设备:
您需要将连接VPN的设备(电脑、手机)准备好,并安装对应的VPN客户端软件。
(图片来源网络,侵删) -
管理员权限:
- 您需要拥有服务器的管理员(
root)权限,或一个可以使用sudo命令的用户。
- 您需要拥有服务器的管理员(
第二步:选择VPN协议并搭建
我们介绍两种目前最主流和推荐的方案:WireGuard 和 OpenVPN,WireGuard 更现代、性能更好、配置更简单;OpenVPN 兼容性更广,生态更成熟。
使用 WireGuard (强烈推荐)
WireGuard 是一个极其简单、快速且现代的 VPN,它利用了最新的加密技术。
在服务器上安装 WireGuard

# 更新软件包列表 sudo apt update # 安装 WireGuard 和必要的工具 sudo apt install wireguard -y
生成服务器的密钥对
# 进入 /etc/wireguard/ 目录 cd /etc/wireguard/ # 生成私钥和公钥 # wg genkey | tee privatekey | wg pubkey > publickey # 执行后,会生成两个文件:privatekey 和 publickey
查看并保存好这两个密钥:
# 查看私钥 (保密!) sudo cat privatekey # 查看公钥 (需要配置到客户端) sudo cat publickey
创建服务器配置文件 wg0.conf
sudo nano /etc/wireguard/wg0.conf
粘贴进去,并根据你的实际情况修改 Address 和 ListenPort:
[Interface] # 服务器内网IP地址,这个IP段将分配给VPN客户端 Address = 10.8.0.1/24 # VPN服务监听的端口,可以自定义,但确保安全组已放行 ListenPort = 51820 # 填入上面生成的服务器私钥 PrivateKey = <你的服务器私钥内容> # 启用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 是大多数云服务器的默认网卡名称,如果不是,请替换为你的实际网卡名(如 ens3, eth1 等)。
启动并设置开机自启 WireGuard
# 启动 wg0 接口 sudo wg-quick up wg0 # 设置开机自启 sudo systemctl enable wg-quick@wg0
在客户端上配置
你需要为每个需要连接的客户端(例如员工的电脑)创建一个配置文件。
- 生成客户端密钥对:在服务器上执行
wg genkey | tee client_private.key | wg pubkey > client_public.key,生成一对新的密钥。 - 创建客户端配置文件:在服务器上创建一个配置文件,
client.conf。
sudo nano /etc/wireguard/clients/client1.conf
客户端配置文件内容示例:
[Interface] # 客户端在内网VPN中的IP地址,确保不与服务器或其他客户端冲突 Address = 10.8.0.2/32 # 客户端的私钥 (保密!) PrivateKey = <客户端的私钥内容> # 可选:设置客户端的DNS,防止DNS泄露 DNS = 8.8.8.8, 1.1.1.1 [Peer] # 填入服务器的公钥 PublicKey = <你的服务器公钥内容> # 允许客户端访问的VPN服务器内网IP段 AllowedIPs = 10.8.0.0/24 # 服务器的公网IP和端口 Endpoint = <你的服务器公网IP>:51820
将客户端公钥添加到服务器
最后一步,将客户端的公钥添加到 WireGuard 的配置中,使其能够连接。
# 编辑服务器的主配置文件 sudo nano /etc/wireguard/wg0.conf
在文件末尾添加 [Peer] 部分:
# ... (前面的 [Interface] 部分) ... [Peer] # 客户端1的公钥 PublicKey = <客户端1的公钥内容> # 客户端1的VPN内网IP AllowedIPs = 10.8.0.2/32
保存后,重新加载 WireGuard 配置使其生效:
sudo wg-quick down wg0 && sudo wg-quick up wg0 # 或者使用 reload 命令 (如果支持) sudo wg reload wg0
分发配置文件
将 client1.conf 文件安全地分发给对应的员工,员工可以使用 WireGuard 官方客户端导入这个 .conf 文件即可连接。
使用 OpenVPN (传统方案)
如果你的客户端设备非常老旧,或者团队习惯使用 OpenVPN,可以选择此方案。
在服务器上安装 OpenVPN
# 安装 OpenVPN 和 easy-rsa (用于管理证书) sudo apt install openvpn easy-rsa -y
配置 Easy-RSA 并生成证书
# 创建一个目录来存放证书 make-cadir ~/openvpn-ca cd ~/openvpn-ca # 编辑 vars 文件,设置一些默认值 nano vars # 找到以下行并修改,或取消注释 export KEY_COUNTRY="CN" export KEY_PROVINCE="SH" export KEY_CITY="Shanghai" export KEY_ORG="MyCompany" export KEY_EMAIL="admin@mycompany.com" export KEY_OU="ITDepartment" # 保存并退出 # 初始化 PKI (Public Key Infrastructure) source vars ./clean-all ./build-ca # 生成 CA 证书,一路回车即可 # 为服务器生成证书和私钥 ./build-key-server server # 同样一路回车,最后两个问题选 y # 生成 Diffie-Hellman 参数,用于增强安全性 ./build-dh # 生成 HMAC 密钥,用于增强 TLS 的安全性 openvpn --genkey --secret keys/ta.key
创建服务器配置文件
# 复制一个示例配置文件 gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz | sudo tee /etc/openvpn/server.conf # 编辑配置文件 sudo nano /etc/openvpn/server.conf
修改以下关键项:
# ... ;local a.b.c.d # 改为监听所有网卡 local <你的服务器公网IP> # ... port 1194 # ... proto udp # ... dev tun # ... ca /root/openvpn-ca/keys/ca.crt cert /root/openvpn-ca/keys/server.crt key /root/openvpn-ca/keys/server.key # ... dh /root/openvpn-ca/keys/dh2048.pem # ... server 10.8.0.0 255.255.255.0 # 定义VPN客户端的IP段 # ... ifconfig-pool-persist /var/log/openvpn/ipp.txt # ... push "redirect-gateway def1 bypass-dhcp" # 推送路由,让客户端所有流量都走VPN # ... push "dhcp-option DNS 8.8.8.8" # 推送DNS服务器 push "dhcp-option DNS 1.1.1.1" # ... keepalive 10 120 # ... tls-auth /root/openvpn-ca/keys/ta.key 0 # 使用HMAC # ... cipher AES-256-CBC # 使用强加密 # ... user nobody group nogroup # ... persist-key persist-tun # ... status /var/log/openvpn/openvpn-status.log verb 3 # ...
启动并设置开机自启 OpenVPN
# 启动服务 sudo systemctl start openvpn@server # 设置开机自启 sudo systemctl enable openvpn@server
配置客户端
客户端配置比较复杂,通常需要从服务器下载 ca.crt, server.crt, client1.crt, client1.key, ta.key 等文件,然后手动组合成一个 .ovpn 文件,这个过程比较繁琐,通常有现成的脚本可以自动化生成客户端配置。
分发 .ovpn 文件
将生成的 .ovpn 文件分发给员工,他们可以使用 OpenVPN 官方客户端导入连接。
第三步:客户端连接与测试
- 安装客户端软件:
- 导入配置:将之前生成的
client.conf(WireGuard) 或.ovpn(OpenVPN) 文件导入到客户端软件中。 - 连接:在客户端软件中点击 "Connect" 按钮。
- 测试:
- 连接成功后,访问
https://whatismyipaddress.com或https://ipinfo.io,查看你的公网IP是否已变为服务器的IP。 ping一下你在服务器配置文件中定义的VPN内网IP(如8.0.1),看是否通。- 如果需要访问公司内网资源,确保服务器开启了IP转发,并且公司防火墙策略允许。
- 连接成功后,访问
第四步:安全加固建议
- 使用强密码:为服务器登录设置复杂的SSH密码,并建议使用SSH密钥对登录。
- 禁用密码登录:在SSH配置中(
/etc/ssh/sshd_config),设置PasswordAuthentication no,只允许密钥登录。 - 定期更新:保持系统和所有软件包为最新版本。
- 限制访问IP:在云服务器的安全组中,将SSH和VPN端口的访问来源限制为固定的公司IP地址,而不是对全互联网开放。
- 监控日志:定期查看
/var/log/auth.log(SSH) 和/var/log/syslog或 OpenVPN/WireGuard 的日志,检查异常登录行为。
希望这份详细的指南能帮助你成功搭建公司的VPN服务器!
