openVPN安装与配置
OpenVPN是一个非常简单易用的开源VPN,可在Windows、Linux/BSD等各大平台下运行,其核心技术包括虚拟网卡和SSL协议。
虚拟网卡是使用网络底层编程技术实现的一个驱动软件,安装后在主机上多出现一个网卡,可以像其它网卡一样进行配置。OpenSSL库的作用是加密数据与控制信息,并且提供了多种身份验证方式,用以确认参与连接双方的身份,包括:预享私钥,第三方证书以及用户名/密码组合。
安装与配置
安装openvpn+easyrsa
yum -y install epel-release
yum install -y automake lzo-devel openssl-devel pam-devel openssl lzo pam pkgconfig makecache
yum -y install openvpn easy-rsa
复制配置文件
cp -R /usr/share/easy-rsa/ /etc/openvpn/
# 修注意路径中的版本号
cp /usr/share/doc/openvpn-2.5.0/sample/sample-config-files/server.conf /etc/openvpn/
cp -r /usr/share/doc/easy-rsa-3.0.3/vars.example /etc/openvpn/easy-rsa/3.0/vars
配置openvpn-server
修改配置文件/etc/openvpn/server.conf:
port 1194
proto udp
dev tun
ca /etc/openvpn/easy-rsa/3.0/pki/ca.crt
cert /etc/openvpn/easy-rsa/3.0.3/pki/issued/vpnserver.crt
key /etc/openvpn/easy-rsa/3.0.3/pki/private/vpnserver.key
dh /etc/openvpn/easy-rsa/3.0/pki/dh.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 114.114.114.114"
push "dhcp-option DNS 8.8.8.8"
keepalive 10 120
tls-auth ta.key 0
cipher AES-256-CBC
comp-lzo
max-clients 100
user openvpn
group openvpn
persist-key
persist-tun
status openvpn-status.log
log-append openvpn.log
verb 3
mute 20
配置easy-rsa
修改配置文件/etc/openvpn/easy-rsa/3.0/vars:
set_var EASYRSA "$PWD"
set_var EASYRSA_PKI "$EASYRSA/pki"
set_var EASYRSA_DN "cn_only"
set_var EASYRSA_REQ_COUNTRY "CN"
set_var EASYRSA_REQ_PROVINCE "BEIJING"
set_var EASYRSA_REQ_CITY "BEIJING"
set_var EASYRSA_REQ_ORG "ANDYLOUSE.NET"
set_var EASYRSA_REQ_EMAIL "ANDY@ANDYLOUSE.NET"
set_var EASYRSA_REQ_OU "ANDY"
set_var EASYRSA_KEY_SIZE 2048
set_var EASYRSA_ALGO rsa
set_var EASYRSA_CA_EXPIRE 3650
set_var EASYRSA_CERT_EXPIRE 3650
set_var EASYRSA_NS_SUPPORT "no"
set_var EASYRSA_NS_COMMENT "ANDY"
set_var EASYRSA_EXT_DIR "$EASYRSA/x509-types"
set_var EASYRSA_SSL_CONF "$EASYRSA/openssl-1.0.cnf"
set_var EASYRSA_DIGEST "sha256"
生成服务端证书与密钥
cd /etc/openvpn/easy-rsa/3.0
# 初始化pki
./easyrsa init-pki
# 创建ca
./easyrsa build-ca
设置password和comman name后 ,创建迪菲·赫尔曼参数
./easyrsa gen-dh
openvpn --genkey --secret ta.key
cp -r ta.key /etc/openvpn/
创建服务端证书
./easyrsa gen-req server [nopass]
输入password和common name后,继续签约服务端证书:
./easyrsa sign-req server server
输入“yes”确认并接着输入password后,完成。
生成客户端证书与密钥
在服务端操作,为Windows/Linux客户端生成证书与密钥。
Windows
./easyrsa build-client-full client
输入password后继续,然后集中保存证书:
mkdir -p /etc/openvpn/client
cp -r /etc/openvpn/easy-rsa/3.0/pki/ca.crt /etc/openvpn/client/
cp -r /etc/openvpn/easy-rsa/3.0.3/pki/issued/client.crt /etc/openvpn/client/
cp -r /etc/openvpn/easy-rsa/3.0.3/pki/private/client.key /etc/openvpn/client/
cp -r /etc/openvpn/ta.key /etc/openvpn/client/
将以上文件复制到客户端。
Linux
Linux客户端不需要从服务端复制证书,但是需要配置网络:
# 修改网络配置
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
# 使配置生效
sysctl -p
启动openvpn
# 配置防火墙(以firewalld为例)
firewall-cmd --add-service=openvpn --permanent
firewall-cmd --add-port=1194/udp --permanent
firewall-cmd --add-source=10.8.0.0 --permanent
firewall-cmd --query-source=10.8.0.0 --permanent
firewall-cmd --add-masquerade --permanent
firewall-cmd --query-masquerade --permanent
firewall-cmd --reload
# 启动OpenVPN Server
systemctl start openvpn@server
第一次启动时有提示,回车后再次执行启动命令,随后输入此前设置的密码。
安装客户端
下载客户端安装包:
Windows
安装完毕后,将之前复制的客户端证书及密钥文件等,复制至安装目录的config文件夹中,随后修改配置文件。
Linux
Linux的OpenVPN客户端的安装方法和服务端安装方法相同,其配置文件和Windows的相同,只是文件扩展名有区别而已,Windows是“.ovpn”,Linux是“.conf”。
OpenVPN-server配置
# 默认情况下监听本服务器上所有IP
;local 10.10.200.30
# 默认监控端口,注意防火墙设置
port 1194
# 网络协议
;proto tcp
proto udp
# tap为以太网通道,桥接模式
# tun为路由IP通道,容易控制
dev tap
;dev tun
# 通常只在Windows下设置,配置多个隧道时指定适配器名称,如:MyTap
;dev-node MyTap
# 服务端和客户端都将使用相同的CA证书
# 服务端和客户端指定各自的证书和密钥
# 服务端和客户端的证书必须使用相同的 Common Name
# 可以使用以配置文件开始为根的相对路径,也可以使用绝对路径
ca /etc/openvpn/easy-rsa/3.0/pki/ca.crt
cert /etc/openvpn/easy-rsa/3.0.3/pki/issued/server.crt
key /etc/openvpn/easy-rsa/3.0.3/pki/private/server.key
# 指定迪菲·赫尔曼参数
# 参数生成命令:openssl dhparam -out dh2048.pem 2048
dh dh2048.pem
# 子网网络拓扑
# Windows客户端且版本低于2.0.9才需要设置
;topology subnet
# 为客户端分配IP地址的VPN的网段,不能和双方的内网网段重复
server 10.8.0.0 255.255.255.0
# 客户端和VIP的对应表,当客户端重连时仍然分配原IP
ifconfig-pool-persist ipp.txt
# 仅针对以太网桥接模式
# 首先,将以太网网卡和TAP进行桥接
# 然后,设置桥接接口的IP地址、子网掩码
# 最后,指定用于分配给客户端的子网的IP范围
;server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100
# 仅针对使用DHCP代理的以太网桥接模式
# 仅用于客户端,并且该客户端的TAP适配器需要绑定到一个DHCP客户端上
# 首先,将以太网网卡和TAP进行桥接
;server-bridge
# 推送路由信息到客户端,使客户端能够连接到服务器背后的其他私有子网
;push "route 192.168.10.0 255.255.255.0"
;push "route 192.168.20.0 255.255.255.0"
# 为特定的客户端指定IP,或使客户端背后子网也可以连接到VPN
# 举例,首先取消如下注释:
;client-config-dir ccd
;ifconfig-push 10.9.0.1 10.9.0.2
# 然后在ccd目录中添加以 Common Name 命名的文件,其内容是:
;route 192.168.40.128 255.255.255.248
# 为不同群组的客户端启用不同的防火墙访问策略
# 关于learn-address脚本的更多信息请参考官方手册页面
;learn-address ./script
# 使客户端所有的流量都通过VPN传输,请注意服务端的DHCP设置
push "redirect-gateway def1 bypass-dhcp"
# 用OpenVPN的DHCP功能为客户端提供指定的DNS
push "dhcp-option DNS 114.114.114.114"
push "dhcp-option DNS 8.8.8.8"
# 允许客户端之间互相访问
;client-to-client
# 使具有相同 Common Name 的客户端都可以登陆
# 建议每个客户端都有独立的证书和私钥
;duplicate-cn
# 每10秒ping一次,如果120秒没有回应则认为远程连接已关闭
keepalive 10 120
# 服务端和客户端都需要有该密钥的一个拷贝
# 第二个参数在服务器端应该为'0',在客户端应该为'1'
tls-auth ta.key 0
# 加密算法
cipher AES-256-CBC
# 在VPN连接上启用压缩并推送至客户端
# 仅2.4以上版本
;compress lz4-v2
;push "compress lz4-v2"
# 在VPN连接上启用压缩,服务端和客户端都必须采用相同配置
comp-lzo
# 最大客户端连接数
max-clients 100
# 降低OpenVPN守护进程的权限
user nobody
group nobody
# 保障重启时仍能保留一些状态
persist-key
persist-tun
# 输出短日志,每分钟刷新一次,以显示当前的客户端
status openvpn-status.log
# 记录日志,重启openvpn后覆盖原log文件
;log openvpn.log
# 记录日志,新日志信息追加到文件最后
log-append openvpn.log
# 日志要记录的级别,值越大日志越详细:
# 0 只记录错误信息
# 4 能记录普通的信息
# 5/6 在连接出现问题时能帮助调试
# 9 显示所有信息,包括包头信息等
verb 3
# 相同信息的记录次数,连续出现20条后不再记录到日志中
mute 20
# 当服务端重启后,使客户端能自动重连
explicit-exit-notify 1
OpenVPN-client配置
配置中未作注释部分,是在服务端有相应的配置,与其统一即可。
# 指定为客户端
client
;dev tap
dev tun
;dev-node MyTap
;proto tcp
proto udp
# 指定服务器(主机名或IP)以及端口号,可设置多个VPN服务器
remote vpnserver 1194
;remote 10.10.200.32 1194
# 设置多个VPN服务器时,采用随机连接模式,否则按先后顺序(非轮询)
;remote-random
# 启用自动重连,适合不稳定的网络环境
resolv-retry infinite
# 客户端默认不需要绑定本机特定的端口号
nobind
;user nobody
;group nobody
persist-key
persist-tun
# 通过HTTP代理来连接VPN服务器
# 连接失败时自动重试
# 指定代理服务器的IP和端口
;http-proxy-retry
;http-proxy [proxy server] [proxy port]
# 适用于无线网络,忽略重复数据包的警告信息
;mute-replay-warnings
ca ca.crt
cert client.crt
key client.key
# 通过检查证书的nsCertType字段是否与服务端相同,默认为server
# 这是预防潜在攻击的一种重要措施
# 可以通过./easyrsa build-key-server 脚本实现
ns-cert-type server
;tls-auth ta.key 1
;cipher AES-256-CBC
comp-lzo
# 可不与服务端相同
verb 3
;mute 20
附加知识·删除证书
先删除以下文件:
rm -rf /etc/openvpn/easy-rsa/3.0/pki/reqs/vpnserver.req
rm -rf /etc/openvpn/easy-rsa/3.0/pki/private/vpnserver.key
随后撤消证书:
cd /etc/openvpn/easy-rsa/3.0
./easyrsa revoke server
./easyrsa gen-crl
最后重启openvpn即可。
2、本站文章部分来源注册用户发布或互联网收集而来,若有侵权,请邮件联系作者。
邮箱地址:wtao219@qq.com