
1 基础知识
1.1 OpenVPN的介绍
OpenVPN是一个功能齐全的开源SSL VPN解决方案
OpenVPN能适应多种配置,包括远程访问、站点到站点VPN、WI-Fi安全以及负载均衡、故障转移和精细化功能
OpenVPN具有粒度访问控制,能达到复杂性和安全性的高度一致
OpenVPN可为中小企业和企业市场提供经济高效的轻量级替代方案
1.2 OpenVPN的特点
OpenVPN基于SSL安全模型(SSL是安全通讯行业的标准)
OpenVPN使用SSL/TLS实现OSI第二、三层的安全网络扩展(支持证书、智能卡或双因素认证等客户端身份验证方式)
OpenVPn允许结合防火墙规则对特定用户或组进行访问控制
2 最佳实践
2.1 系统环境
hostname = openvpn.cmdschool.org
interface = any
ipaddress = any
gateway = any
2.2 软件安装
2.2.1 安装常用工具
apt install -y vim wget
2.2.2 配置ntp
apt install -y chrony
另外,建议设置时区,
timedatectl set-timezone Asia/Shanghai
2.2.3 安装OpenVPN软件包
apt install -y openvpn easy-rsa
2.3 配置服务端证书
2.3.1 部署秘钥目录
cp -r /usr/share/easy-rsa/ /etc/openvpn/server/ cd /etc/openvpn/server/easy-rsa/ find /usr/ -type f -name "vars.example" -exec cp {} ./vars \;
2.3.2 创建新的PIK
./easyrsa init-pki
可见如下提示信息,
Notice ------ 'init-pki' complete; you may now create a CA or requests. Your newly created PKI dir is: * /etc/openvpn/server/easy-rsa/pki Using Easy-RSA configuration: * /etc/openvpn/server/easy-rsa/vars
2.3.3 创建CA证书
./easyrsa build-ca nopass
需根据以下向导完成配置,
#... Common Name (eg: your user, host, or server name) [Easy-RSA CA]:con.cmdschool.org #... CA creation complete. Your new CA certificate is at: * /etc/openvpn/server/easy-rsa/pki/ca.crt
2.3.4 创建服务端证书
./easyrsa gen-req server nopass
需根据以下向导完成配置,
#... Common Name (eg: your user, host, or server name) [server]:con.cmdschool.org #... Private-Key and Public-Certificate-Request files created. Your files are: * req: /etc/openvpn/server/easy-rsa/pki/reqs/server.req * key: /etc/openvpn/server/easy-rsa/pki/private/server.key
2.3.5 签署的服务端证书
./easyrsa sign server server
需根据以下向导完成配置,
#... Confirm request details: yes #... Certificate created at: * /etc/openvpn/server/easy-rsa/pki/issued/server.crt
2.3.6 创建Diffie-Hellman
./easyrsa gen-dh
需根据以下向导完成配置,
#... DH parameters of size 2048 created at: * /etc/openvpn/server/easy-rsa/pki/dh.pem
2.4 配置客户端证书环境
2.4.1 部署秘钥目录
cp -r /usr/share/easy-rsa/ /etc/openvpn/client/ cd /etc/openvpn/client/easy-rsa/ find /usr/ -type f -name "vars.example" -exec cp {} ./vars \;
2.4.2 创建新的PIK
./easyrsa init-pki
可见如下提示信息,
#.. Your newly created PKI dir is: * /etc/openvpn/client/easy-rsa/pki Using Easy-RSA configuration: * /etc/openvpn/client/easy-rsa/vars
2.5 配置服务端实例
2.5.1 部署服务端证书
cp /etc/openvpn/server/easy-rsa/pki/ca.crt /etc/openvpn/server/ cp /etc/openvpn/server/easy-rsa/pki/private/server.key /etc/openvpn/server/ cp /etc/openvpn/server/easy-rsa/pki/issued/server.crt /etc/openvpn/server/ cp /etc/openvpn/server/easy-rsa/pki/dh.pem /etc/openvpn/server/
注:由于tcp与udp两个实例使用同一份服务端证书,便于管理起见,证书没有部署到实例文件夹,而是部署到server文件夹
2.5.2 增加配置tcp服务的文件
vim /etc/openvpn/server/tcp.conf
加入如下配置:
server 10.8.1.0 255.255.255.0 dev tun proto tcp port 1194 ca /etc/openvpn/server/ca.crt cert /etc/openvpn/server/server.crt key /etc/openvpn/server/server.key dh /etc/openvpn/server/dh.pem data-ciphers AES-256-GCM:AES-128-GCM:AES-256-CBC:AES-128-CBC cipher AES-256-GCM client-config-dir /etc/openvpn/server/ccd ifconfig-pool-persist /etc/openvpn/server/ipp_tcp.txt client-to-client keepalive 10 120 max-clients 100 user root group root persist-key persist-tun mssfix 1300 status /var/log/openvpn/status_tcp.log status-version 2 suppress-timestamps log /var/log/openvpn/tcp.log verb 3 #public conf see /etc/openvpn/server/public.conf push "route 10.8.0.0 255.255.255.0" #route 192.168.0.0 255.255.255.0
以上使用需要注意,
– 参数“proto”声明OpenVPN服务端与客户端的通讯协议,可选值有“udp”和“tcp”
– 参数“dev”声明设备的类型“tun”(OSI第三层)、“tap”(OSI第二层)
– 参数“ca”声明证书颁发机构即根证书证书路径
– 参数“cert”声明服务器端公钥证书路径
– 参数“key”声明服务器端私钥证书路径
– 参数“dh”声明服务器端秘钥交换证书路径
– 参数“status”声明记录服务器端的状态文件
– 参数“server”声明使用的网段,服务器默认使用“.1”地址作为TUN/TAP的网关,其他的分配给客户端
– 参数“ifconfig-pool-persist”声明登录客户端与地址的记录文件路径
– 参数“push”声明推动到客户端操作(例如推送route、dhcp-option等)
– 参数“client-to-client”声明客户端到客户端可相互访问
– 参数“keepalive”声明服务端到客户端之间的断开超时时间
– 参数“tls-auth”声明TLS控制通道之上添加额外的HMAC身份验证层以减轻Dos攻击和TLS堆栈攻击(启用HMAC防火墙)
– 参数“max-clients”声明最大并发的客户端数量
– 参数“user”声明VPN隧道的所有者用户
– 参数“group”声明VPN隧道的所有组
– 参数“persist-key”声明不通过SIGUSR1或“ping-restart”参数重读配置文件
– 参数“persist-tun”声明不通过SIGUSR1或“ping-restart”参数重启up/down脚本
– 参数“log”声明日志文件的路径
– 参数“verb”声明日志输出的详细级别,1-4正常范围、5包含数据包读写输出、6-11包含调试
– 参数“mssfix”声明VPN隧道的TCP恢复数据包的大小限制
2.5.3 增加配置udp服务的文件
vim /etc/openvpn/server/udp.conf
加入如下配置:
server 10.8.0.0 255.255.255.0 dev tun proto udp port 1194 ca /etc/openvpn/server/ca.crt cert /etc/openvpn/server/server.crt key /etc/openvpn/server/server.key dh /etc/openvpn/server/dh.pem data-ciphers AES-256-GCM:AES-128-GCM:AES-256-CBC:AES-128-CBC cipher AES-256-GCM client-config-dir /etc/openvpn/server/ccd ifconfig-pool-persist /etc/openvpn/server/ipp_udp.txt client-to-client keepalive 10 120 max-clients 100 user root group root persist-key persist-tun mssfix 1300 status /var/log/openvpn/status_udp.log status-version 2 suppress-timestamps log /var/log/openvpn/udp.log verb 3 #public conf see /etc/openvpn/server/public.conf push "route 10.8.1.0 255.255.255.0" #route 192.168.1.0 255.255.255.0
根据以上配置,我们需要创建配置文件定义的目录,
mkdir -p /etc/openvpn/server/ccd /var/log/openvpn
2.5.4 配置TCP与UDP实例服务控制脚本
cp /usr/lib/systemd/system/openvpn-server@.service /usr/lib/systemd/system/openvpn-server@tcp.service cp /usr/lib/systemd/system/openvpn-server@.service /usr/lib/systemd/system/openvpn-server@udp.service
2.5.5 启动TCP与UDP服务并设置自启动
systemctl start openvpn-server@tcp.service systemctl start openvpn-server@udp.service systemctl enable openvpn-server@tcp.service systemctl enable openvpn-server@udp.service
如果启动服务有异常,请通过以下日志排错,
tail -f /var/log/dmesg tail -f /var/log/openvpn*.log
2.5.6 设置实例共同配置文件
2.5.7 开放服务端口
apt remove -y ufw iptables-persistent apt install -y firewalld
以上把防火墙设备换成firewalld,然后使用如下命令开放服务端口,
firewall-cmd --permanent --add-port=1194/udp --add-port=1194/tcp firewall-cmd --reload firewall-cmd --list-all
2.5.8 实现两实例间的相互通讯
2.6 配置OpenVPN客户端
2.6.1 签发客户端证书
2.6.2 Linux客户端配置
2.6.3 RouterOS客户端配置
2.6.4 Windows端的安装部署
请从以下链接下载并安装OpenVPN Windows客户端
https://openvpn.net/community-downloads/
客户端由于非本章重点,以上请自行下载安装,配置文件请
notepad C:\Program Files\OpenVPN\config\client.ovpn
配置修改如下,
client ;dev tap dev tun ;proto tcp proto udp remote openvpnser.cmdschool.org 1194 resolv-retry infinite nobind persist-key persist-tun ca ca.crt cert clientName.crt key clientName.key remote-cert-tls server #comp-lzo verb 3
以上使用需要注意,
– 参数“remote”声明远程主机名称(IP地址)、端口、协议
– 客户端证书“ca.crt”、“clientName.crt”、“clientName.key”请复制到“C:\Program Files\OpenVPN\config\”目录
2.6.5 安卓端的安装部署
请从以下链接下载并安装OpenVPN 安卓客户端
https://github.com/schwabe/ics-openvpn
参阅文档:
==================
OpenVPN参数解析
—————
https://openvpn.net/community-resources/reference-manual-for-openvpn-2-4/#scripting-and-environmental-variables
参考手册
——————
https://openvpn.net/community-resources/#articles
https://openvpn.net/community-resources/#documentation
https://community.openvpn.net/openvpn/wiki
没有评论