外网基于openVPN访问家庭服务
二次优化需求,整合了 EasyRSA 初始化、证书生成、OpenVPN 服务器配置和客户端配置。
一、EasyRSA 初始化与证书生成
以下代码块整合了 EasyRSA 初始化、CA 证书生成、服务器证书生成、Diffie-Hellman 参数生成、HMAC 密钥生成以及客户端证书生成,并附带每一行的注解。
# 1. 安装 OpenVPN 和 EasyRSA
sudo apt update
sudo apt install openvpn easy-rsa
# 2. 初始化 EasyRSA 目录
make-cadir ~/easy-rsa # 创建 EasyRSA 目录
cd ~/easy-rsa # 进入 EasyRSA 目录
# 3. 初始化 PKI(公钥基础设施)
./easyrsa init-pki # 初始化 PKI 目录结构
# 4. 配置 vars 文件(设置证书的默认信息)
cat <<EOF > ~/easy-rsa/vars
set_var EASYRSA_REQ_COUNTRY "CN" # 国家代码
set_var EASYRSA_REQ_PROVINCE "Beijing" # 省份
set_var EASYRSA_REQ_CITY "Beijing" # 城市
set_var EASYRSA_REQ_ORG "HomeVPN" # 组织名称
set_var EASYRSA_REQ_EMAIL "admin@homevpn.com" # 邮箱
set_var EASYRSA_REQ_OU "HomeVPN" # 组织单位
set_var EASYRSA_KEY_SIZE 2048 # 密钥长度
set_var EASYRSA_ALGO "ec" # 加密算法
set_var EASYRSA_DIGEST "sha512" # 哈希算法
EOF
# 5. 生成 CA 证书
./easyrsa build-ca nopass # 生成 CA 证书,无需密码
# 6. 生成服务器证书和密钥
./easyrsa build-server-full server nopass # 生成服务器证书,无需密码
# 7. 生成 Diffie-Hellman 参数
./easyrsa gen-dh # 生成 Diffie-Hellman 参数
# 8. 生成 HMAC 密钥
openvpn --genkey --secret ta.key # 生成 HMAC 密钥,用于增强安全性
# 9. 生成客户端证书和密钥
./easyrsa build-client-full lukey nopass # 生成客户端证书,用户名为 lukey
二、OpenVPN 服务器配置
以下是优化后的 OpenVPN 服务器配置文件 /etc/openvpn/server.conf
,使用腾讯云的公共 DNS(119.29.29.29
)。
# OpenVPN 服务器配置文件
port 1194 # 监听端口
proto udp # 使用 UDP 协议
dev tun # 使用 TUN 模式
ca /etc/openvpn/ca.crt # CA 证书路径
cert /etc/openvpn/server.crt # 服务器证书路径
key /etc/openvpn/server.key # 服务器密钥路径
dh /etc/openvpn/dh.pem # Diffie-Hellman 参数路径
server 10.8.0.0 255.255.255.0 # VPN 内网网段
push "route 10.8.0.0 255.255.255.0" # 推送内网路由
push "dhcp-option DNS 119.29.29.29" # 使用腾讯云 DNS
keepalive 10 120 # 保持连接
comp-lzo # 启用压缩
persist-key # 持久化密钥
persist-tun # 持久化 TUN 设备
status /var/log/openvpn-status.log # 状态日志
log /var/log/openvpn.log # 日志文件
verb 3 # 日志详细级别
三、客户端配置文件
以下是优化后的客户端配置文件 lukey.ovpn
,使用腾讯云的公共 DNS。
# 客户端配置文件
client
dev tun # 使用 TUN 模式
proto udp # 使用 UDP 协议
remote 49.232.105.** 1194 # OpenVPN 服务器地址和端口
resolv-retry infinite # 无限重试连接
nobind # 不绑定本地端口
persist-key # 持久化密钥
persist-tun # 持久化 TUN 设备
ca ca.crt # CA 证书路径
cert lukey.crt # 客户端证书路径
key lukey.key # 客户端密钥路径
comp-lzo # 启用压缩
verb 3 # 日志详细级别
四、文件分发与权限设置
-
服务器端文件分发:
- 将生成的证书和密钥文件复制到
/etc/openvpn/
目录:sudo cp ~/easy-rsa/pki/ca.crt /etc/openvpn/ sudo cp ~/easy-rsa/pki/issued/server.crt /etc/openvpn/ sudo cp ~/easy-rsa/pki/private/server.key /etc/openvpn/ sudo cp ~/easy-rsa/pki/dh.pem /etc/openvpn/ sudo cp ~/easy-rsa/ta.key /etc/openvpn/
- 将生成的证书和密钥文件复制到
-
客户端文件分发:
- 将以下文件打包发送给客户端:
ca.crt
lukey.crt
lukey.key
lukey.ovpn
- 将以下文件打包发送给客户端:
-
权限设置:
- 确保文件权限安全:
sudo chmod 600 /etc/openvpn/*.key sudo chmod 644 /etc/openvpn/*.crt sudo chmod 644 /etc/openvpn/*.pem
- 确保文件权限安全:
五、启动 OpenVPN 服务
-
启动服务:
sudo systemctl start openvpn@server sudo systemctl enable openvpn@server
-
检查状态:
sudo systemctl status openvpn@server
六、验证与测试
-
VPN 连接测试:
- 使用客户端配置文件
lukey.ovpn
连接 OpenVPN 服务器。 - 检查客户端是否获取到 VPN 分配的 IP 地址(如
10.8.0.x
)。
- 使用客户端配置文件
-
NAS 访问测试:
- 在客户端尝试访问
192.168.1.234
,确保可以访问 NAS 资源。
- 在客户端尝试访问
-
DNS 测试:
- 在客户端检查 DNS 是否设置为腾讯云的公共 DNS(
119.29.29.29
)。
- 在客户端检查 DNS 是否设置为腾讯云的公共 DNS(
七、总结
通过以上步骤,你可以实现内外网互通,并支持动态 IPv6 地址。异地设备可以通过 OpenVPN 访问家庭 NAS 资源。如果遇到问题,可以通过日志(如 /var/log/openvpn.log
)排查。
本文链接:
/archives/1104
版权声明:
本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自
三多运维!
喜欢就支持一下吧