OpenVPN安装环境需求
设备 | IP |
---|---|
笔记本或PC (adsl上网) | 10.0.0.0/24 办公室(DHCP) |
OpenVPN Server双网卡 | eth0:10.0.0.4/24(外网) eth1:192.168.100.4(内网) |
IDC机房内部局域网服务器 | 192.168.100.0/24 IDC机房内网服务器无外网IP,又希望ADSL上网笔记本(运维人员),在不同的网络能够直接访问 |
实现需求:在远端通过VPN客户端(笔记本)拨号到VPN,然后在笔记本电脑上可以直接访问vpnserver所在局域网内的多个servers,进行维护管理 | |
环境 | VPN-Server eth0:10.0.0.4(外网IP)。GW:10.0.0.1, dns:10.0.0.1。 eth1:172.0.0.1(内网IP)。GW:不配 提示:检查是否可以ping通client eth0 IP。 App client Server:ethO:172.0.0.2。GW:路由器。 提示:检查是否可以ping通VPN-Server eth1 IP。 |
部署OpenVPN Server
Reference
安装前准备
openvpn支持的平台:
- Linux kernel 2.6+
- OpenBSD 5.1+
- Mac OS X Darwin 10.5+
- FreeBSD 7.4+
- Windows (WinXP and higher)
下载地址:
安装openvpn的依赖项:
- 0.9.8版或更高版本的OpenSSL库,对于加密是必需的
- PolarSSL库,是加密的替代版本1.1或更高版本
- LZO实时压缩库,连接压缩所需
|
|
|
|
使用rpmbuild
安装:openvpn.spec
配置OpenVPN Server
openvpn的配配置文件在下面目录中
sample/sample-config-files/client.conf
sample/sample-config-files/server.conf
|
|
建立CA证书
easy-rsa是一个基于OpenSSL命令行工具的小型RSA密钥管理包。虽然它主要关注SSL VPN应用程序空间的密钥管理,但它也可用于构建Web证书。它最初被包含在OpenVPN中,但现在是一个单独的项目。
openvpn在2.3-alpha1 -> 2.3-alpha2版本迭代是将easy-rsa分割为单独的子项目。在2.3版本之前easy-rsa包含在openvpn内,在openvpn-2.2.2/easy-rsa/2.0
目录下。
证书也可以使用openssl进行生成,easy-rsa可以简化证书生成流程。
设置并签署第一个请求
./easyrsa help [commond]
查看帮助
./easyrsa init-pki
初始化公钥基础设施,(初始化单独的PKI目录)
./easyrsa build-ca nopass
创建ca
./easyrsa gen-req {name} nopass
创建CSR,{name}只是一个名字,不代表任何。
./easyrsa import-req pki/{name}.req
将请求文件.req
,导入CA
./easyrsa sign-req {server|client} {name}
签署请求
./easyrsa revoke {name}
吊销证书
./easyrsa gen-dh
生成Diffie-Hellman
Reference
EasyRSA的配置源
在easyrsa生成证书时,需要提供证书的配置,来设置证书对应的详情。此时就需要easyrsa获取外部的配置来替换证书默认的参数。
easyrsa有四种方式获得外部配置
命令行选项
环境变量 :覆盖全局选项
env-vars列表,任何设置/覆盖它的(CLI)以及可能的简洁描述如下所示:
EASYRSA
easyrsa脚本所在的Easy-RSA顶级目录。EASYRSA_PKI
保存PKI的文件的目录,默认为$PWD/pki
。EASYRSA_DN
:设置为字符串cn_only
或org
更改要包含在请求DN中的字段EASYRSA_REQ_COUNTRY
:DN国家EASYRSA_REQ_PROVINCE
:DN状态/省EASYRSA_REQ_CITY
:DN城市/位置EASYRSA_REQ_ORG
:DN组织EASYRSA_REQ_EMAIL
:DN电子邮件EASYRSA_REQ_OU
:DN组织单位EASYRSA_KEY_SIZE
:设置密钥大小单位EASYRSA_ALGO
:设置要使用的加密算法:rsa或ecEASYRSA_CA_EXPIRE
:设置CA到期时间EASYRSA_CERT_EXPIRE
:设置已颁发证书的到期时间:单位天EASYRSA_REQ_CN
:默认CN,批量配置时可设置。
vars 文件:无扩展名的vars文件是为Easy-RSA提供配置的文件,该文件优先级低于环境变量与命令行参数。easyrsa对vars文件的检测顺序为:
--vars
参数引用的文件- 环境变量值
EASYRSA_VARS_FILE
- 环境变量设置的pki目录
EASYRSA_PKI
- 执行默认目录
$PWD/pki
内部默认值
生成服务端证书和密钥KEY文件
与上一步类似,其中“Common Name”项需要填写VPN服务器的FQDN,其他均可默认为default值。还会出现:“Sign the certificate? [y/n]”和“1 out of 1 certificate requests certified, commit? [y/n]”。都输入y然后回车,其它可参照如下。
|
|
注意:easyrsa在执行是也是通过openssl进行,需要openssl-easyrsa.cnf
与 x509-types
加强OpenVPN安全性
TLS-auth
参数增加所有 SSL/TLS
握手了额外的HMAC签名的完整性验证。任何没有正确HMAC签名的UDP数据包都被丢弃,而无需进一步处理。TLS-AUTH 可以防止:
- OpenVPN UDP端口上的DDoS攻击或Flood DDoS 。
- 端口扫描以确定哪些UDP端口处于侦听状态。
- SSL/TLS缓冲区溢出漏洞。
- 切断来自未经授权的机器的
SSL/TLS
握手。
生成随机共享密钥(仅适用于非TLS静态密钥加密模式)
|
|
在服务器配置中,添加:
|
|
在客户端配置中,添加:
|
|
Reference
调试OpenVPN服务端
取消服务器上防火墙iptables对Openvpn(默认1194)的拦截。以及允许服务进行转发。
centos7+ firewalld
bash1 2
firewall-cmd --add-port=1194/udp --permanent firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s 192.168.100.0/24 -o eth1 -j MASQUERADE
iptables
text1 2
iptables -A INPUT -i eth0 -m state --state NEW -p udp --dport 1194 -j ACCEPT iptables -t nat -A POSTROUTING -o eth1 -s 192.168.100.0/24 -j MASQUERADE
开启内核转发功能:
text1 2
sysctl net.ipv4.ip_forward |grep 1 > /dev/null && \ echo net.ipv4.ip_forward=1 >> /etc/sysctl.conf
启动OpenVPN server
text1
openvpn --config server.conf
默认情况下,openvpn客户端不能访问客户端上具相同子网的IP的主机。
服务端 server.conf参数详解
openvpn默认配置文件在 sample/sample-config-files/server.conf
目录下。
|
|
可用的服务端配置
local 10.0.0.4
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh2048.pem
# 分配给客户端的地址池,与dhcp类似
server 192.168.10255.255.255.0
ifconfig-pool-persist ipp.txt
push "route 192.168.10255.255.255.0"
client-to-client
duplicate-cn
keepalive 10 120
comp-lzo
max-clients 100
persist-key
persist-tun
log-append /var/log/openvpn.log
verb 3
mute 20
explicit-exit-notify 1
reneg-sec 360
tls-auth ta.key 0
相关证书文件说明
文件名 | 需要使用者 | 目的 | 默认是否加密 |
---|---|---|---|
ca.crt | server + all clients | Root CA certificate | NO |
ca.key | key signing machine only | Root CA key | YES |
dh{n}.pem | server only | Diffie Hellman parameters | NO |
server.crt | server only | Server Certificate | NO |
server.key | server only | Server Key | YES |
client1.crt | client1 only | Client1 Certificate | NO |
client1.key | client1 only | Client1 Key | YES |
reference explanation of the relevant files
OpenVPN客户端配置使用
下载并安装openvpn客户端
在windows上需要下载与Server版本一致的带有GUI的Windows端。下载地址:community
配置并下载客户端证书
生成客户端证书和key文件
生成client证书和key文件。若建立多个客户证书,则重复如下步骤即可.只需修改Common Name项oldboy的名称。
在OpenVPN中,这种配置方法是每一个登陆的VPN客户端需要有一个证书,每个证书在同一时刻只能供一个客户端连接(如果有两个机器安装相同证书,同时拨服务器,都能拨上,但是只有第一个拨上的才能连通网络)。所以,如果有多个人,每个人需要建立一份证书。
将ca.crt、redis.crt、redis.key复制到OpenVPN\config。(不同用户使用不同的证书,每个证书包括.crt和.key两个文件。如test.crt和test.key)
在 sample-config-files/client.conf
的基础上建立客户端配置文件,改名为client.oven,即先在服务器上建立配置文件,然后再下载改名到客户机上。
|
|
客户端远程连接OpenVPN服务
当配置文件的扩展名为.ovpn
,配置文件存放至客户端配置的目录中。ca、证书 与配置文件放置同一个文件夹内。每一组为一个用户。
连接成功后如图所示: