三多运维

OpenVPN打通云服务器与本地网络互联配置方案

2025/12/02
6
0

网络拓扑图

第一阶段:云服务器(OpenVPN Server)配置

1.1 安装OpenVPN和Easy-RSA

bash

# 登录云服务器
ssh ley@120.48.170.222

# 更新系统
sudo apt update
sudo apt upgrade -y

# 安装指定版本OpenVPN
sudo apt install openvpn=2.6.12-0ubuntu0.24.04.3~bpo22.04.1 -y

# 安装Easy-RSA(证书管理工具)
sudo apt install easy-rsa -y

1.2 配置PKI(公钥基础设施)

bash

# 创建工作目录
mkdir ~/openvpn-ca
cd ~/openvpn-ca

# 复制Easy-RSA模板
cp -r /usr/share/easy-rsa/* .

# 初始化PKI
./easyrsa init-pki

# 创建CA证书(按提示输入信息)
./easyrsa build-ca

# 创建服务器证书和密钥
./easyrsa gen-req server nopass
./easyrsa sign-req server server

# 创建Diffie-Hellman参数(可能需要一些时间)
./easyrsa gen-dh

# 创建HMAC签名密钥
openvpn --genkey secret ta.key

1.3 生成客户端证书

bash

# 为公司PC创建证书
./easyrsa gen-req company-pc nopass
./easyrsa sign-req client company-pc

Common Name (eg: your user, host, or server name) [company-pc]:mac 

Keypair and certificate request completed. Your files are:
req: /usr/local/ley/easy-rsa/pki/reqs/company-pc.req
key: /usr/local/ley/easy-rsa/pki/private/company-pc.key
Certificate created at: /usr/local/ley/easy-rsa/pki/issued/company-pc.crt

# 为家庭笔记本创建证书
./easyrsa gen-req family-pc nopass
./easyrsa sign-req client family-pc

Common Name (eg: your user, host, or server name) [family-pc]:huawei

Keypair and certificate request completed. Your files are:
req: /usr/local/ley/easy-rsa/pki/reqs/family-pc.req
key: /usr/local/ley/easy-rsa/pki/private/family-pc.key
Certificate created at: /usr/local/ley/easy-rsa/pki/issued/family-pc.crt

1.4 配置OpenVPN服务器

bash

# 复制配置文件
sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf /etc/openvpn/server/

# 编辑服务器配置
sudo nano /etc/openvpn/server/server.conf

以下是关键配置内容:

conf

port 1194
proto udp
dev tun

# 证书和密钥路径
ca ca.crt
cert server.crt
key server.key
dh dh.pem
tls-auth ta.key 0

# VPN子网配置
server 10.8.0.0 255.255.255.0

# 推送路由到客户端
push "route 192.168.66.0 255.255.255.0"
push "route 192.168.3.0 255.255.255.0"

# 保持客户端配置(IP地址持久化)
ifconfig-pool-persist /var/log/openvpn/ipp.txt

# 客户端到客户端通信
client-to-client

# 保持连接
keepalive 10 120

# 加密设置
cipher AES-256-GCM
auth SHA256

# 其他设置
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
verb 3
explicit-exit-notify 1

1.5 启用IP转发和配置防火墙

bash

# 启用IP转发
sudo nano /etc/sysctl.conf
# 添加或取消注释以下行:
# net.ipv4.ip_forward=1

# 应用配置
sudo sysctl -p

# 配置防火墙(如果使用ufw)
sudo ufw allow 1194/udp
sudo ufw allow OpenSSH

# 配置NAT转发
sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

# 保存iptables规则
sudo apt install iptables-persistent -y
sudo netfilter-persistent save

1.6 启动OpenVPN服务

bash

# 启动服务
sudo systemctl start openvpn-server@server

# 启用开机自启
sudo systemctl enable openvpn-server@server

# 检查状态
sudo systemctl status openvpn-server@server

第二阶段:客户端配置

2.1 准备客户端配置文件

在服务器上创建客户端配置文件:

bash

# 创建客户端配置目录
mkdir /usr/local/ley/easy-rsa/client-configs
cd /usr/local/ley/easy-rsa/client-configs

# 创建基础配置文件
sudo cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /usr/local/ley/easy-rsa/client-configs/base.conf

# 编辑基础配置
nano /usr/local/ley/easy-rsa/client-configs/base.conf

基础配置文件内容:

conf

client
dev tun
proto udp
remote 120.48.170.222 1194
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
cipher AES-256-GCM
auth SHA256
verb 3

2.2 创建客户端配置文件生成脚本

bash

nano /usr/local/ley/easy-rsa/client-configs/make_config.sh

脚本内容:

bash

#!/bin/bash

# 第一个参数:客户端名称
KEY_DIR=/usr/local/ley/easy-rsa/pki
OUTPUT_DIR=/usr/local/ley/easy-rsa/client-configs/files
BASE_CONFIG=/usr/local/ley/easy-rsa/client-configs/base.conf

cat ${BASE_CONFIG} \
    <(echo -e '<ca>') \
    ${KEY_DIR}/ca.crt \
    <(echo -e '</ca>\n<cert>') \
    ${KEY_DIR}/issued/${1}.crt \
    <(echo -e '</cert>\n<key>') \
    ${KEY_DIR}/private/${1}.key \
    <(echo -e '</key>\n<tls-auth>') \
    ${KEY_DIR}/ta.key \
    <(echo -e '</tls-auth>') \
    > ${OUTPUT_DIR}/${1}.ovpn

2.3 生成客户端配置文件

bash

# 创建输出目录
mkdir -p /usr/local/ley/easy-rsa/client-configs/files

# 使脚本可执行
chmod 700 /usr/local/ley/easy-rsa/client-configs/make_config.sh

# 生成公司PC配置文件
cd /usr/local/ley/easy-rsa/client-configs
./make_config.sh company-pc

# 生成家庭笔记本配置文件
./make_config.sh family-pc

# 下载配置文件到本地
# 可以使用scp或SFTP工具下载
ll files/

-rw-rw-r-- 1 ley ley 11696 Dec  2 14:34 company-pc.ovpn
-rw-rw-r-- 1 ley ley 11707 Dec  2 14:37 family-pc.ovpn

2.4 公司PC(Mac)配置

安装OpenVPN客户端

# 使用Homebrew安装
brew install openvpn

# 或下载Tunnelblick GUI客户端
# https://tunnelblick.net/
  1. 导入配置文件

    • company-pc.ovpn复制到Mac

    • 如果使用Tunnelblick,双击.ovpn文件导入

  2. 连接VPN

    • 打开Tunnelblick

    • 选择配置并点击连接

2.5 家庭笔记本(Windows 11)配置

  1. 安装OpenVPN客户端

  2. 导入配置文件

    • family-pc.ovpn复制到C:\Program Files\OpenVPN\config\

    • 或通过OpenVPN GUI导入

  3. 连接VPN

    • 右键点击系统托盘中的OpenVPN图标

    • 选择连接

第三阶段:关键路由配置

3.1 家庭路由器(小米)配置

  1. 登录路由器管理界面

    • 浏览器访问:192.168.66.1

    • 输入管理员密码

  2. 配置静态路由

    • 进入"高级设置" → "路由设置"

    • 添加以下静态路由:

    目标网络

    子网掩码

    网关

    接口

    10.8.0.0

    255.255.255.0

    192.168.66.100

    LAN

    192.168.3.0

    255.255.255.0

    192.168.66.100

    LAN

    注意:192.168.66.100是家庭笔记本的本地IP

  3. 配置DHCP(可选)

    • 确保家庭笔记本获得固定IP(192.168.66.100)

    • 或配置DHCP保留地址

3.2 家庭笔记本(Windows)路由配置

  1. 启用IP转发

    powershell

    # 以管理员身份打开PowerShell
    # 启用IP转发
    Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" -Name "IpEnableRouter" -Value 1
    
    # 重启生效
    Restart-Computer
  2. 配置防火墙允许转发

    powershell

    # 允许ICMP(ping)通过
    netsh advfirewall firewall add rule name="ICMP Allow" dir=in action=allow protocol=icmpv4
    
    # 允许VPN子网访问
    netsh advfirewall firewall add rule name="VPN Subnet" dir=in action=allow remoteip=10.8.0.0/24
    netsh advfirewall firewall add rule name="Company Subnet" dir=in action=allow remoteip=192.168.3.0/24
    
    # 允许本地子网访问VPN
    netsh advfirewall firewall add rule name="Local to VPN" dir=out action=allow remoteip=10.8.0.0/24

3.3 服务器端路由优化

bash

# 在云服务器上添加路由表
sudo ip route add 192.168.66.0/24 via 10.8.0.3
sudo ip route add 192.168.3.0/24 via 10.8.0.2

# 使路由永久生效
sudo nano /etc/rc.local
# 在exit 0前添加:
# ip route add 192.168.66.0/24 via 10.8.0.3
# ip route add 192.168.3.0/24 via 10.8.0.2

3.4 客户端配置文件增强

修改客户端配置文件,添加特定路由:

对于公司PC配置文件:

conf

# 在company-pc.ovpn中添加
route 192.168.66.0 255.255.255.0

对于家庭笔记本配置文件:

conf

# 在family-pc.ovpn中添加
route 192.168.3.0 255.255.255.0
route 192.168.66.0 255.255.255.0 vpn_gateway

第四阶段:测试与验证

4.1 基本连接测试

  1. 测试VPN连接

    bash

    # 在公司PC上
    ping 10.8.0.1  # 应该能ping通服务器VPN IP
    
    # 在家庭笔记本上
    ping 10.8.0.1  # 应该能ping通服务器VPN IP
  2. 测试客户端间通信

    bash

    # 在公司PC上
    ping 10.8.0.3  # 应该能ping通家庭笔记本的VPN IP
    
    # 在家庭笔记本上
    ping 10.8.0.2  # 应该能ping通公司PC的VPN IP

4.2 跨网络访问测试

  1. 从公司PC访问家庭网络

    bash

    # 测试访问家庭路由器
    ping 192.168.66.1
    
    # 测试访问家庭其他设备
    ping 192.168.66.101  # 假设是NAS设备
  2. 从家庭网络访问公司PC

    bash

    # 在家庭网络的任一设备上
    ping 192.168.3.23
  3. 测试具体服务

    bash

    # 测试SMB共享(如果公司PC有共享)
    # 在家庭设备上:
    smbclient //192.168.3.23/shared -U username
    
    # 测试HTTP服务
    curl http://192.168.3.23:8080

4.3 路由跟踪测试

  1. 跟踪路由路径

    bash

    # 在公司PC上
    traceroute 192.168.66.100
    
    # 在家庭设备上
    traceroute 192.168.3.23

4.4 故障排查工具

如果遇到连接问题,使用以下工具排查:

bash

# 1. 检查OpenVPN日志
sudo tail -f /var/log/openvpn/openvpn.log

# 2. 检查连接状态
sudo systemctl status openvpn-server@server

# 3. 检查路由表
ip route show

# 4. 检查iptables规则
sudo iptables -L -n -v
sudo iptables -t nat -L -n -v

# 5. 测试端口连通性
nc -zv 120.48.170.222 1194

# 6. 客户端诊断
# 在Windows上:
openvpn --config "config.ovpn" --verb 4

4.5 性能测试

bash

# 1. 带宽测试
# 安装iperf3
sudo apt install iperf3

# 在服务器端运行
iperf3 -s

# 在客户端运行
iperf3 -c 10.8.0.1

# 2. 延迟测试
ping -c 100 10.8.0.1 | grep "min/avg/max"

4.6 安全验证

  1. 验证加密设置

    bash

    # 检查OpenVPN使用的加密
    openvpn --show-tls
  2. 检查证书有效期

    bash

    openssl x509 -in ~/openvpn-ca/pki/ca.crt -noout -dates

注意事项和优化建议

安全建议:

  1. 定期更新证书(建议每6-12个月)

  2. 使用强密码保护私钥文件

  3. 考虑启用双因素认证

  4. 限制VPN访问权限

性能优化:

  1. 调整MTU大小以提高性能

    conf

    # 在服务器配置中添加
    mssfix 1400
  2. 启用压缩(如果CPU资源充足)

    conf

    compress lz4-v2
    push "compress lz4-v2"
  3. 调整keepalive参数

    conf

    keepalive 5 30

故障处理:

  1. 如果连接不稳定,尝试切换为TCP协议

  2. 如果速度慢,考虑升级服务器带宽

  3. 定期检查日志中的错误信息

这个配置方案应该能够实现您的网络目标。如果在实施过程中遇到问题,请根据第四阶段的故障排查部分进行检查。

资源下载

提示:如遇链接失效,请在评论区留言反馈