三多运维

OpenVPN指南:实现外地与家庭网络的安全连接

2025/12/02
7
0

一、网络拓扑图

二、分阶段详细配置步骤

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

步骤1:安装OpenVPN和Easy-RSA

# 登录云服务器
ssh ley@120.48.170.222

# 更新系统包列表
sudo apt update

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

# 安装Easy-RSA用于证书管理
sudo apt install easy-rsa

# 验证OpenVPN版本
openvpn --version | head -1

步骤2:配置PKI和生成证书

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

# 初始化PKI
./easyrsa init-pki

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

# 生成服务器证书
./easyrsa gen-req server nopass
./easyrsa sign-req server server

# 生成Diffie-Hellman参数(可能需要较长时间)
./easyrsa gen-dh

# 生成HMAC签名密钥
openvpn --genkey secret ta.key

# 创建客户端证书(为公司PC创建)
./easyrsa gen-req client-company nopass
./easyrsa sign-req client client-company

# 为家庭网络客户端创建证书
./easyrsa gen-req client-home nopass
./easyrsa sign-req client client-home

步骤3:配置OpenVPN服务器

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

# 将证书文件复制到安全位置
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

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

# VPN网络配置
server 10.8.0.0 255.255.255.0

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

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

# 保持连接
keepalive 10 120

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

# 其他设置
user nobody
group nogroup
persist-key
persist-tun

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

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

# 允许客户端通过VPN访问服务器所在网络
push "redirect-gateway def1 bypass-dhcp"

# DNS设置(可选)
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"

# 压缩(根据带宽选择)
comp-lzo

步骤4:为家庭网络客户端创建特定配置

# 创建客户端特定配置
sudo nano /etc/openvpn/ccd/client-home

client-home内容:

# 为家庭网络客户端分配固定IP
ifconfig-push 10.8.0.10 255.255.255.0

# 设置内部路由,让其他客户端知道通过此客户端访问家庭网络
iroute 192.168.66.0 255.255.255.0

步骤5:配置系统路由和防火墙

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

# 应用配置
sudo sysctl -p

# 配置iptables(Ubuntu 22.04默认使用nftables,需要安装iptables)
sudo apt install iptables-persistent

# 设置NAT规则
sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

# 允许VPN流量转发
sudo iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT
sudo iptables -A FORWARD -i eth0 -o tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT

# 保存iptables规则
sudo netfilter-persistent save

# 配置UFW(如果使用UFW)
sudo ufw allow 1194/udp
sudo ufw allow OpenSSH
sudo ufw enable

步骤6:启动OpenVPN服务

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

# 设置开机自启
sudo systemctl enable openvpn-server@server.service

# 检查服务状态
sudo systemctl status openvpn-server@server.service

# 查看日志确认服务运行正常
sudo tail -f /var/log/openvpn.log

第二阶段:客户端(家庭网络中的主机)配置

步骤1:在家庭网络主机上安装OpenVPN客户端

# 对于Ubuntu/Debian系统
sudo apt update
sudo apt install openvpn

# 对于MacBook(使用Homebrew)
brew install openvpn

# 或下载OpenVPN Connect客户端
# https://openvpn.net/client-connect-vpn-for-mac-os/

步骤2:准备客户端配置文件

# 在云服务器上,创建客户端配置包
cd ~/easy-rsa

# 创建客户端配置目录
mkdir -p ~/client-configs
cd ~/client-configs

# 创建基础配置文件
nano base.conf

base.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-CBC
auth SHA256
verb 3

# 证书和密钥
<ca>
# 这里将粘贴ca.crt内容
</ca>

<cert>
# 这里将粘贴client-home.crt内容
</cert>

<key>
# 这里将粘贴client-home.key内容
</key>

key-direction 1
<tls-auth>
# 这里将粘贴ta.key内容
</tls-auth>

步骤3:生成客户端配置文件

# 创建生成配置的脚本
nano make_config.sh

make_config.sh内容:

#!/bin/

# 检查参数
if [ -z "$1" ]; then
    echo "Usage: $0 CLIENT_NAME"
    exit 1
fi

CLIENT_NAME=$1

# 复制基础配置
cp base.conf ${CLIENT_NAME}.ovpn

# 添加CA证书
echo "<ca>" >> ${CLIENT_NAME}.ovpn
cat ../pki/ca.crt >> ${CLIENT_NAME}.ovpn
echo "</ca>" >> ${CLIENT_NAME}.ovpn

# 添加客户端证书
echo "<cert>" >> ${CLIENT_NAME}.ovpn
cat ../pki/issued/${CLIENT_NAME}.crt >> ${CLIENT_NAME}.ovpn
echo "</cert>" >> ${CLIENT_NAME}.ovpn

# 添加客户端密钥
echo "<key>" >> ${CLIENT_NAME}.ovpn
cat ../pki/private/${CLIENT_NAME}.key >> ${CLIENT_NAME}.ovpn
echo "</key>" >> ${CLIENT_NAME}.ovpn

# 添加TLS认证密钥
echo "<tls-auth>" >> ${CLIENT_NAME}.ovpn
cat ../ta.key >> ${CLIENT_NAME}.ovpn
echo "</tls-auth>" >> ${CLIENT_NAME}.ovpn

echo "Client config created: ${CLIENT_NAME}.ovpn"
# 运行脚本生成客户端配置文件
chmod +x make_config.sh
./make_config.sh client-home

# 将配置文件安全传输到家庭网络主机
scp client-home.ovpn ley@192.168.3.23:~/openvpn-client-config/

步骤4:在家庭网络主机上配置路由

# 启用IP转发(如果家庭主机需要转发流量)
sudo nano /etc/sysctl.conf
# 取消注释或添加:
net.ipv4.ip_forward = 1
sudo sysctl -p

# 配置路由(如果需要)
sudo route add -net 10.8.0.0 netmask 255.255.255.0 gw 192.168.66.1

步骤5:启动家庭网络客户端

# 使用OpenVPN Connect GUI客户端(Mac)
# 1. 安装OpenVPN Connect
# 2. 导入client-home.ovpn配置文件
# 3. 连接VPN

# 或使用命令行(Linux/Mac)
sudo openvpn --config ~/openvpn-client-config/client-home.ovpn

第三阶段:关键路由配置(实现全网互通)

步骤1:在云服务器上添加静态路由

# 查看当前路由表
ip route show

# 添加到家庭网络的路由(通过VPN隧道)
sudo ip route add 192.168.66.0/24 via 10.8.0.10 dev tun0

# 使路由永久生效(Ubuntu 22.04)
sudo nano /etc/netplan/99-openvpn-routes.yaml

99-openvpn-routes.yaml内容:

network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      dhcp4: true
  tunnels:
    tun0:
      addresses: [10.8.0.1/24]
      routes:
        - to: 192.168.66.0/24
          via: 10.8.0.10
      mtu: 1500

应用配置:

sudo netplan apply

步骤2:配置家庭路由器(如果需要)

# 登录家庭路由器管理界面(通常192.168.66.1)
# 添加静态路由:
# 目标网络:10.8.0.0/24
# 网关:192.168.66.23(VPN客户端主机的IP)
# 跃点数:2

步骤3:为其他客户端(公司PC)生成配置文件

# 在云服务器上
cd ~/client-configs
./make_config.sh client-company

# 创建公司PC特定配置
nano client-company.ovpn

# 在文件末尾添加:
route 192.168.66.0 255.255.255.0
redirect-gateway def1

步骤4:优化OpenVPN服务器配置

# 编辑服务器配置,添加更具体的路由
sudo nano /etc/openvpn/server/server.conf

# 在文件末尾添加:
# 推送特定路由
push "route 10.8.0.0 255.255.255.0"
push "route 192.168.66.0 255.255.255.0"

# 重启服务
sudo systemctl restart openvpn-server@server.service

第四阶段:测试与验证

步骤1:基本连接测试

# 1. 在云服务器上查看连接状态
sudo cat /var/log/openvpn-status.log

# 2. 检查VPN接口
ip addr show tun0

# 3. 测试从云服务器ping家庭网络客户端
ping 10.8.0.10

步骤2:路由测试

# 在云服务器上测试到家庭网络的路由
traceroute 192.168.66.100

# 查看路由表
ip route show | grep 192.168.66

# 测试NAT功能
sudo iptables -t nat -L -n

步骤3:端到端连接测试

# 1. 在公司PC上连接VPN
# 导入client-company.ovpn并连接

# 2. 测试VPN连接
ping 10.8.0.1  # 应该能ping通云服务器VPN IP

# 3. 测试访问家庭网络
ping 192.168.66.23  # 家庭网络中的VPN客户端
ping 192.168.66.100  # 其他家庭主机
ping 192.168.66.1    # 家庭路由器

# 4. 测试DNS解析(如果配置了)
nslookup google.com

步骤4:高级测试工具

# 使用mtr进行网络诊断
mtr -r -c 10 192.168.66.100

# 测试特定端口访问
nc -zv 192.168.66.100 22  # 测试SSH连接
nc -zv 192.168.66.100 80  # 测试HTTP连接

# 测试文件传输速度
# 在家庭网络主机上启动测试服务器
python3 -m http.server 8000 &

# 在公司PC上测试下载
curl -o /dev/null http://192.168.66.100:8000/

步骤5:故障排除命令

# 1. 检查OpenVPN日志
sudo journalctl -u openvpn-server@server.service -f

# 2. 检查防火墙规则
sudo iptables -L -n -v
sudo ufw status verbose

# 3. 检查网络接口
ip link show
ip addr show

# 4. 检查路由表
route -n
ip route show table all

# 5. 检查NAT配置
sudo iptables -t nat -L -n -v

# 6. 验证证书
openssl verify -CAfile /etc/openvpn/server/ca.crt /etc/openvpn/server/server.crt

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

步骤6:性能优化(可选)

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

# 添加性能优化参数:
sndbuf 393216
rcvbuf 393216
push "sndbuf 393216"
push "rcvbuf 393216"

# 对于高延迟网络,调整以下参数:
keepalive 10 60
persist-tun
persist-key

# 重启服务
sudo systemctl restart openvpn-server@server.service

步骤7:安全加固

# 1. 更改默认端口
# 编辑server.conf,修改port为其他端口(如1195)

# 2. 启用TLS加密
tls-server
tls-auth ta.key 0

# 3. 限制客户端数量
max-clients 10

# 4. 启用用户认证(可选)
# auth-user-pass-verify /etc/openvpn/checkpsw.sh via-file

# 5. 定期更新证书
# 设置证书有效期较短,定期更新

三、常见问题解决

问题1:连接超时

解决方案:

  1. 检查云服务器防火墙是否开放1194/UDP端口

  2. 检查云服务商安全组规则

  3. 验证客户端配置文件中的服务器地址

问题2:路由不生效

解决方案:

  1. 确认客户端配置中推送了正确的路由

  2. 检查云服务器是否启用了IP转发

  3. 验证iptables NAT规则

问题3:速度慢

解决方案:

  1. 调整MTU大小(尝试降低到1400)

  2. 启用压缩(comp-lzo)

  3. 调整加密算法(使用AES-128-CBC替代AES-256-CBC)

问题4:无法访问特定主机

解决方案:

  1. 检查家庭网络主机的防火墙设置

  2. 验证家庭路由器是否允许VPN流量

  3. 检查目标主机是否在线

四、维护脚本

创建维护脚本方便管理:

#!/bin/
# openvpn-manager.sh

case "$1" in
    status)
        sudo systemctl status openvpn-server@server.service
        ;;
    restart)
        sudo systemctl restart openvpn-server@server.service
        ;;
    logs)
        sudo tail -f /var/log/openvpn.log
        ;;
    clients)
        sudo cat /var/log/openvpn-status.log
        ;;
    new-client)
        if [ -z "$2" ]; then
            echo "Usage: $0 new-client CLIENT_NAME"
            exit 1
        fi
        cd ~/easy-rsa
        ./easyrsa gen-req $2 nopass
        ./easyrsa sign-req client $2
        cd ~/client-configs
        ./make_config.sh $2
        echo "Client config created: ~/client-configs/$2.ovpn"
        ;;
    *)
        echo "Usage: $0 {status|restart|logs|clients|new-client}"
        exit 1
        ;;
esac

这个详细的配置方案应该能帮助你成功搭建OpenVPN环境,实现公司PC通过云服务器安全访问家庭网络的目标。如果在配置过程中遇到任何问题,请参考故障排除部分或检查相关日志文件。

资源下载

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