1 简介
×××(Virtual Private Network) 直译就是虚拟专用通道, 是提供给企业之间或者个人与公司之间安全数据传输的隧道. ? ? Open××× 无疑是 Linux 下开源 ××× 的先锋, 提供了良好的性能和友好的用户 GUI. 该软件最早由 James Yonan 编写. Open××× 允许参与建立 ××× 的单点使用预设的私钥, 第三方证书, 或者用户名 / 密码来进行身份验证. 它大量使用了 OpenSSL 加密库, 以及 SSLv3/TLSv1 协议. Open××× 能在 Linux,xBSD,Mac OS X 与 Windows 上运行.
2 环境准备
公网 ip: ? ? 内网 ip:? ?
open***:10.8.0.0 ? 操作系统: centos6.5
3? 安装 open*** 及 easy-rsa ? open***-2.4.6 easy-rsa-3.0 open***-install-2.4.6
安装 open*** 及 easy-rsa ? ? 其中 easy-rsa 为 open*** 证书制作工具.
首先要有 epel 的 yum 源
- yum install epel-release
- lsb_release -a
- yum install -y openssl openssl-devel lzo lzo-devel pam pam-devel automake pkgconfig makecache
- yum install -y open***
- yum install -y easy-rsa
- # 启动 open*** 的用户
- groupadd open***
- useradd -g open*** -M -s /sbin/nologin open***
4. 然后 将配置文件复制到相应位置
- mkdir /etc/open***/
- cp -R /usr/share/easy-rsa//etc/open***/
- cp /usr/share/doc/open***-2.4.6/sample/sample-config-files/server.conf /etc/open***/
- cp -r /usr/share/doc/easy-rsa-3.0.3/vars.example /etc/open***/easy-rsa/3.0/vars
- (1.)vim /etc/open***/server.conf(配置文件如下:)
- port 1194 #监听端口
- proto udp #监听协议
- dev tun #采用路由隧道模式
- ca /etc/open***/easy-rsa/3.0/pki/ca.crt #ca 证书路径
- cert /etc/open***/easy-rsa/3.0/pki/issued/wwwserver.crt #服务器证书路径
- key /etc/open***/easy-rsa/3.0/pki/private/wwwserver.key #服务器秘钥路径
- dh /etc/open***/easy-rsa/3.0/pki/dh.pem # 秘钥交换协议
- tls-auth /etc/open***/ta.key 0
- server 10.8.0.0 255.255.255.0 # 给客服端分配的地址池 (注: 不能和服务器内网 ip 一个网段)
- ifconfig-pool-persist ipp.txt
- push "redirect-gateway def1 bypass-dhcp"
- push "dhcp-option DNS 223.5.5.5" #dhcp 分配 dns
- push "dhcp-option DNS 114.114.114.114"
- keepalive 10 120 #存活时间, 10 秒 ping 延迟, 120 秒没收到回应则视为断线
- cipher AES-256-CBC
- comp-lzo # 传输数据压缩
- max-clients 50
- user open***
- group open***
- persist-key
- persist-tun
- status open***-status.log
- log-append open***.log
- verb 3
- mute 20
(2.) 主要修改配置文件 vars :vim /etc/open***/easy-rsa/3.0/vars
修改第 45,65,76,84-89,97,105,113,117,134,139,171,180,192 行:
- 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 "Company"
- set_var EASYRSA_REQ_EMAIL "个人邮箱 @163.com"
- set_var EASYRSA_REQ_OU "Open××× EASY CA"
- set_var EASYRSA_KEY_SIZE 2048
- set_var EASYRSA_ALGO rsa
- set_var EASYRSA_CA_EXPIRE 7000
- set_var EASYRSA_CERT_EXPIRE 3650
- set_var EASYRSA_NS_SUPPORT "no"
- set_var EASYRSA_NS_COMMENT "Open××× CERTIFICATE AUTHORITY"
- set_var EASYRSA_EXT_DIR "$EASYRSA/x509-types"
- set_var EASYRSA_SSL_CONF "$EASYRSA/openssl-1.0.cnf"
- set_var EASYRSA_DIGEST "sha256"
5. 生成证书:
生成各种证书 ? 生成 ca 证书 ? ? ca 证书, 用于签发 Server 和 Client 证书
(1) 生成 ca 证书
- cd /etc/open***/easy-rsa/3.0
- ./easyrsa init-pki #初始化
- ./easyrsa build-ca #生成根证书 创建 CA, 密码 ca.com
设置 ca 密码 (输入两次):ca.com
(2) 创建服务端证书
生成 ta.key, 是为了防止恶意 ×××(如 DoS,UDP port flooding) 而生成的一个 "HMAC firewall".
- ./easyrsa gen-dh
- open*** --genkey --secret ta.key
- cp -r ta.key /etc/open***/
创建服务端证书, 生成请求, 使用 gen-req 来生成 req
./easyrsa gen-req wwwserver
设置 server 密码 (输入两次):openserver
签发证书, 签约服务端证书
- ./easyrsa sign-req server wwwserver
- #输入 yes 签发证书, 输入 ca 密码: ca.com
(3) 生成 windows 客户端用户:(多用户的话 依次步骤添加)
- ./easyrsa build-client-full zhangxx
- # 注意: 生成客户端用户的时候会提示设置密码
- # 可以直按回车密码为空, 也可以设置输入密码 (如设置密码, 客户端连接时需输入密码)
查看客户端证书存放路径:
- ls -l /etc/open***/easy-rsa/3.0/pki/issued/zhangxx.crt
- -rw-------. 1 root root 4517 Apr 16 00:30 /etc/open***/easy-rsa/3.0/pki/issued/zhangxx.crt
- ls -l /etc/open***/easy-rsa/3.0/pki/private/zhangxx.key
- -rw-------. 1 root root 1834 Apr 16 00:30 /etc/open***/easy-rsa/3.0/pki/private/zhangxx.key
6. 配置防火墙及路由
(1) 关闭 selinux
- [root@iZ23vn3rqxnZ ~]# setenforce 0
- setenforce: SELinux is disabled
- [root@iZ23vn3rqxnZ ~]# vi /etc/sysconfig/selinux
- # This file controls the state of SELinux on the system.
- # SELINUX= can take one of these three values:
- # enforcing - SELinux security policy is enforced.
- # permissive - SELinux prints warnings instead of enforcing.
- # disabled - SELinux is fully disabled.
- SELINUX=disabled
- # SELINUXTYPE= type of policy in use. Possible values are:
- # targeted - Only targeted network daemons are protected.
- # strict - Full SELinux protection.
- SELINUXTYPE=targeted
(2) 开启服务器路由转发功能
vim /etc/sysctl.conf
修改: net.ipv4.ip_forward = 1
sysctl -p
```
(3) 设置防火墙 nat 转发
- iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
- iptables -I INPUT -p udp --dport 1194 -m comment --comment "open***" -j ACCEPT
- iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
- iptables -A INPUT -p icmp -j ACCEPT
- iptables -A INPUT -i lo -j ACCEPT
- iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
- iptables -A INPUT -p udp -m udp --dport 1194 -j ACCEPT
- iptables -A INPUT -j REJECT --reject-with icmp-host-prohibited
- iptables -A FORWARD -d 10.8.0.0/24 -j ACCEPT
- iptables -A FORWARD -i tun+ -j ACCEPT
- iptables -A FORWARD -j REJECT --reject-with icmp-host-prohibited
启动 open***
方式一:
- /usr/sbin/open***?--config?/etc/open***/server.conf
- # 启动时输入服务端证书密码: openserver
方式二:
- [root@iZ23vn3rqxnZ open***]# /etc/init.d/open*** start
- Starting open***: [ OK ]
- [2]+ Killed /usr/sbin/open*** --config /etc/open***/server.conf
- [root@iZ23vn3rqxnZ open***]# /etc/init.d/open*** status
- Status written to /var/log/messages
- [root@iZ23vn3rqxnZ open***]# ps -ef | grep open***
- nobody 4277 1 0 22:06 ? 00:00:00 /usr/sbin/open*** --daemon --writepid /var/run/open***/server.pid --cd /etc/open*** --config server.conf
- root 4336 32542 0 22:07 pts/0 00:00:00 grep open***
哦, 不幸的是出现服务开始失败!!!
但是当你运行:
Open***/etc/open***/server.conf
又可以运行, 解决办法:
删除 / etc / open***/ 下的 ipp.txt open***-status.log
然后就可以启动服务了. 如果你还不能解决, 那就去无功 / 日志中找消息慢慢分析原因
客户端 open*** 版本为 2.4.6
客户端需要的证书: zhnagxx.crt,zhangxx.key,ca.crt,ta.key
存放到一个文件夹, 然后将里边的文件夹拷贝到本地电脑
- mkdir -p /etc/open***/client
- cp -r /etc/open***/easy-rsa/3.0/pki/issued/www001.crt /etc/open***/client/
- cp -r /etc/open***/easy-rsa/3.0/pki/private/www001.key /etc/open***/client/
- cp -r /etc/open***/easy-rsa/3.0/pki/ca.crt /etc/open***/client/
- cp -r /etc/open***/ta.key /etc/open***/client/
客户端配置文件 zhangxx.o***(ip 换为 open*** 服务器外网 ip)
- client
- dev tun
- proto udp
- resolv-retry infinite
- nobind
remote 服务器公网 ip 1194
- ns-cert-type server
- comp-lzo
- ca ca.crt
- cert zhangxx.crt
- key zhangxx.key
- tls-auth ta.key 1
- keepalive 10 120
- persist-key
- persist-tun
- verb 5
windows 默认安装路径是 C:\Program Files (x86)\Open×××\bin 如果你手动修改安装路径也可以. 前提是你必须知道你的安装路径在哪里.
将证书文件拷贝到 C:\Program Files (x86)\Open×××\config 下面 . 在这个目录下面默认是有证书文件的, 但是那不是我们所需要的, 我们要覆盖原来的证书文件.
将 zhangxx.crt,zhangxx.key,ca.crt,ta.key,zhangxx001.o*** 放入 config 中
配置完毕之后. 进入到 C:\Program Files (x86)\Open×××\bin? ? 下面. 找到客户端的启动文件, 使用管理员权限启动. 如果不是管理员权限启动软件, 会导致 open*** client 不能配置电脑网络, 导致连接不上 open*** 服务器
右键点击, 连接: connect. 连接成功颜色会变为绿色. 正在连接中颜色是 ×××. 空闲时颜色是白色!
当不能长时间连接的时候你需要查看出错误日志, 我第一链接时候出错了, tls 的某个错但是我已经解决了就是注释掉客户端配置文件中的 #ns-cert-type server, 这样就不会出错了. 我提供给你的配置选项一修复问题.
如生成证书时输错密码了 (如再次添加用户), 报错误导致生成证书失败:
删除以下文件即可
- rm -rf /etc/open***/easy-rsa/3.0/pki/reqs/www002.req
- rm -rf /etc/open***/easy-rsa/3.0/pki/private/www002.key
撤销证书 (www002 为例)
撤销命令 revoke
- cd /etc/open***/easy-rsa/3.0
- ./easyrsa revoke www002
生成 CRL 文件 (撤销证书的列表)
./easyrsa gen-crl
重启 open*** 服务生效
来源: http://www.bubuko.com/infodetail-2743815.html