三多运维

OpenVPN与云服务器基于家庭网关互通

2025/12/02
9
0

网络拓扑图

deepseek_mermaid_20251202_6dd7f2.svg

由于我们想要访问的是整个家庭局域网,而不仅仅是家庭笔记本电脑,所以我们需要在家庭笔记本电脑上配置路由,使得家庭局域网的其他主机可以通过家庭笔记本电脑访问VPN,或者将家庭笔记本电脑作为网关,将流量转发到OpenVPN服务器。

这里有两种方式:

  1. 家庭笔记本电脑作为VPN客户端,同时作为家庭局域网的网关,将家庭局域网的流量路由到VPN。

  2. 家庭笔记本电脑仅作为VPN客户端,然后通过配置家庭路由器,将VPN流量路由到家庭笔记本电脑。

由于家庭路由器的配置可能不同,且可能不支持自定义路由,本文采用第一种方式,即家庭笔记本电脑作为网关,但这样需要在家庭笔记本电脑上启用IP转发,并且配置iptables进行NAT,这样家庭局域网的其他主机就可以通过家庭笔记本电脑访问VPN网络。

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

步骤1.1:更新系统并安装必要软件

bash

# 登录云服务器
ssh ley@120.48.170.222

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

# 安装OpenVPN和Easy-RSA
sudo apt install openvpn=2.6.12-0ubuntu0.24.04.3~bpo22.04.1 easy-rsa iptables-persistent -y

步骤1.2:配置Easy-RSA证书颁发机构

bash

# 创建Easy-RSA目录
mkdir ~/easy-rsa
ln -s /usr/share/easy-rsa/* ~/easy-rsa/
chmod 700 ~/easy-rsa

# 初始化PKI
cd ~/easy-rsa
./easyrsa init-pki

# 创建CA证书(无密码)
./easyrsa build-ca nopass

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

# 生成Diffie-Hellman参数
./easyrsa gen-dh

# 生成TLS认证密钥
openvpn --genkey --secret ta.key

步骤1.3:配置OpenVPN服务器

bash

# 创建OpenVPN配置目录
sudo mkdir -p /etc/openvpn/server

# 复制证书文件
sudo cp ~/easy-rsa/pki/ca.crt /etc/openvpn/server/
sudo cp ~/easy-rsa/pki/issued/server.crt /etc/openvpn/server/
sudo cp ~/easy-rsa/pki/private/server.key /etc/openvpn/server/
sudo cp ~/easy-rsa/pki/dh.pem /etc/openvpn/server/
sudo cp ~/easy-rsa/ta.key /etc/openvpn/server/

# 创建服务器配置文件
sudo nano /etc/openvpn/server/server.conf

/etc/openvpn/server/server.conf 内容:

ini

# 网络配置
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

# 虚拟网络配置
server 10.8.0.0 255.255.255.0
topology subnet

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

# 推送路由到客户端
push "route 192.168.66.0 255.255.255.0"
push "route 192.168.3.0 255.255.255.0"
push "dhcp-option DNS 8.8.8.8"

# 安全配置
tls-auth /etc/openvpn/server/ta.key 0
cipher AES-256-GCM
auth SHA256
key-direction 0

# 连接保持
keepalive 10 120

# 用户权限
user nobody
group nogroup
persist-key
persist-tun

# 日志配置
status /var/log/openvpn/status.log
log-append /var/log/openvpn/openvpn.log
verb 3

# 客户端配置目录
client-config-dir /etc/openvpn/ccd

步骤1.4:配置静态客户端IP分配

bash

# 创建客户端配置目录
sudo mkdir -p /etc/openvpn/ccd

# 为公司PC创建固定IP配置
sudo nano /etc/openvpn/ccd/company_pc

内容:

text

ifconfig-push 10.8.0.2 255.255.255.0
iroute 192.168.3.0 255.255.255.0

bash

# 为家庭笔记本电脑创建固定IP配置
sudo nano /etc/openvpn/ccd/home_laptop

内容:

text

ifconfig-push 10.8.0.3 255.255.255.0
iroute 192.168.66.0 255.255.255.0

步骤1.5:启用IP转发和配置iptables

bash

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

# 应用配置
sudo sysctl -p

# 配置iptables规则
sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
sudo iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT
sudo iptables -A FORWARD -i eth0 -o tun0 -j ACCEPT

# 保存iptables规则
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

# 在云服务器上生成客户端证书
cd ~/easy-rsa

# 为公司PC生成证书
./easyrsa gen-req company_pc nopass
./easyrsa sign-req client company_pc

# 为家庭笔记本电脑生成证书
./easyrsa gen-req home_laptop nopass
./easyrsa sign-req client home_laptop

步骤2.2:下载客户端配置文件

将以下文件从服务器下载到各客户端:

  1. ~/easy-rsa/pki/ca.crt

  2. ~/easy-rsa/pki/issued/company_pc.crt(公司PC)

  3. ~/easy-rsa/pki/private/company_pc.key(公司PC)

  4. ~/easy-rsa/pki/issued/home_laptop.crt(家庭笔记本)

  5. ~/easy-rsa/pki/private/home_laptop.key(家庭笔记本)

  6. ~/easy-rsa/ta.key

步骤2.3:公司PC(macOS)配置

bash

# 安装OpenVPN客户端(使用Homebrew)
brew install openvpn

# 创建客户端配置文件
sudo nano /usr/local/etc/openvpn/client.ovpn

client.ovpn 内容(公司PC):

ini

client
dev tun
proto udp
remote 120.48.170.222 1194
resolv-retry infinite
nobind
persist-key
persist-tun

# 证书配置
ca ca.crt
cert company_pc.crt
key company_pc.key

# 安全配置
remote-cert-tls server
tls-auth ta.key 1
cipher AES-256-GCM
auth SHA256

# 路由配置
route 192.168.66.0 255.255.255.0

# 连接参数
verb 3

步骤2.4:家庭笔记本电脑(Windows 11)配置

  1. 下载并安装OpenVPN GUI客户端

  2. 创建配置文件 home_laptop.ovpn

ini

client
dev tun
proto udp
remote 120.48.170.222 1194
resolv-retry infinite
nobind
persist-key
persist-tun

# 证书配置
ca ca.crt
cert home_laptop.crt
key home_laptop.key

# 安全配置
remote-cert-tls server
tls-auth ta.key 1
cipher AES-256-GCM
auth SHA256

# 路由配置
route 192.168.3.0 255.255.255.0

# 连接参数
verb 3
  1. 将配置文件放入 C:\Program Files\OpenVPN\config\

第三阶段:关键路由配置

步骤3.1:配置服务器路由表

bash

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

# 永久保存路由(添加到rc.local)
sudo nano /etc/rc.local

添加以下内容到 /etc/rc.local 的 exit 0 之前:

bash

sleep 30
ip route add 192.168.66.0/24 via 10.8.0.3 dev tun0 2>/dev/null || true
ip route add 192.168.3.0/24 via 10.8.0.2 dev tun0 2>/dev/null || true

步骤3.2:家庭网络路由配置

在家庭笔记本电脑上(Windows)以管理员身份运行:

powershell

# 启用IP转发
reg add "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v IPEnableRouter /t REG_DWORD /d 1 /f

# 配置家庭路由器
# 登录家庭路由器管理界面(通常是192.168.66.1)
# 添加静态路由:
# 目标网络:10.8.0.0/24
# 网关:家庭笔记本电脑的IP(如192.168.66.100)
# 目标网络:192.168.3.0/24
# 网关:家庭笔记本电脑的IP

步骤3.3:公司网络路由配置

如果公司网络允许,在路由器上添加路由:

text

目标网络:10.8.0.0/24 → 网关:192.168.3.23
目标网络:192.168.66.0/24 → 网关:192.168.3.23

或者在公司PC上配置端口转发(如果公司网络有防火墙限制):

bash

# macOS 上设置端口转发
sudo sysctl -w net.inet.ip.forwarding=1
sudo pfctl -f /etc/pf.conf 2>/dev/null

第四阶段:测试与验证

步骤4.1:连接测试

  1. 测试服务器端状态

bash

# 在云服务器上检查
sudo systemctl status openvpn-server@server
sudo cat /var/log/openvpn/openvpn.log | tail -20
  1. 测试客户端连接

bash

# 公司PC连接
sudo openvpn --config /usr/local/etc/openvpn/client.ovpn

# 家庭笔记本电脑通过OpenVPN GUI连接

步骤4.2:连通性测试

bash

# 从公司PC测试:
ping 10.8.0.1          # 测试到VPN服务器
ping 10.8.0.3          # 测试到家庭笔记本电脑VPN IP
ping 192.168.66.1      # 测试到家庭路由器
ping 192.168.66.100    # 测试到家庭其他设备

# 从家庭笔记本电脑测试:
ping 10.8.0.1          # 测试到VPN服务器
ping 10.8.0.2          # 测试到公司PC VPN IP
ping 192.168.3.23      # 测试到公司PC本地IP

# 从家庭其他设备测试:
ping 10.8.0.2          # 通过VPN隧道到公司PC
ping 192.168.3.23      # 到公司PC本地IP

步骤4.3:路由表验证

bash

# 在云服务器上查看路由
ip route show

# 在公司PC上查看路由
netstat -nr

# 在家庭笔记本电脑上查看路由
route print

步骤4.4:服务测试

bash

# 测试SSH连接
ssh user@192.168.66.100      # 从公司PC SSH到家庭设备
ssh user@192.168.3.23        # 从家庭设备SSH到公司PC

# 测试文件共享
# 配置Samba或NFS共享,测试跨网络访问

步骤4.5:防火墙检查

bash

# 检查云服务器防火墙
sudo ufw status
# 确保1194端口开放
sudo ufw allow 1194/udp

# 检查客户端防火墙
# Windows: 确保OpenVPN客户端在防火墙中被允许
# macOS: 系统偏好设置 → 安全性与隐私 → 防火墙

步骤4.6:故障排除

如果连接失败,检查:

  1. 服务器日志sudo journalctl -u openvpn-server@server -f

  2. 客户端日志:查看OpenVPN客户端的连接日志

  3. 网络跟踪

bash

# 跟踪路由
traceroute 192.168.66.1
# 检查端口
nc -zv 120.48.170.222 1194

安全建议

  1. 定期更新证书:每6-12个月更新一次证书

  2. 使用强密码:为证书设置强密码(虽然示例中用了nopass)

  3. 防火墙限制:限制VPN端口访问IP

  4. 监控日志:定期检查OpenVPN日志

  5. 备份配置:定期备份服务器配置和证书

这个配置方案实现了云服务器作为VPN枢纽,打通公司PC和家庭网络的互访。根据实际网络环境,可能需要调整路由和防火墙设置。


资源下载

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