一、openvpn原理
openvpn通过使用公开密钥(非对称密钥,加密解密使用不同的key,一个称为Publice key,另外一个是Private key)对数据进行加密的。这种方式称为TLS加密。
openvpn使用TLS加密的工作过程是,首先VPN Sevrver端和VPN Client端要有相同的CA证书,双方通过交换证书验证双方的合法性,用于决定是否建立VPN连接。然后使用对方的CA证书,把自己目前使用的数据加密方法加密后发送给对方,由于使用的是对方CA证书加密,所以只有对方CA证书对应的Private key才能解密该数据,这样就保证了此密钥的安全性,并且此密钥是定期改变的,对于窃听者来说,可能还没有破解出此密钥,VPN通信双方可能就已经更换密钥了。
二、安装openvpn和easy-rsa
1.yum安装
yum -y
install
openvpn libssl-dev openssl easy-rsa
-
下载 OpenVPN 的源码包:
# wget http://oss.aliyuncs.com/aliyunecs/openvpn-2.2.2.tar.gz
。 -
使用 rpmbuild 命令将源码包编译成 rpm 包进行安装:
# rpmbuild -tb openvpn-2.2.2.tar.gz
。执行 rpmbuild 命令后即开始编译,编译完成后,/root/rpmbuild/RPMS/x86_64
目录下会生成名为 openvpn-2.2.2-1.x86_64.rpm 的安装包。
三、初始化
1.执行命令初始化 cd /usr/share/doc/openvpn-2.2.2/easy-rsa/2.0
,然后找到 vars 证书环境文件,修改以下 5 行 export 定义的参数值:
export KEY_COUNTRY="CN" 所在的国家
export KEY_PROVINCE="BJ" 所在的省份
export KEY_CITY="Hangzhou" 所在的城市
export KEY_ORG="aliyun" 所属的组织
export KEY_EMAIL=my@test.com 邮件地址
2.生成证书、密钥和参数文件
请按照以下步骤生成所需的证书、密钥和参数文件:
- 执行以下命令,生成服务端的证书并清除
keys
目录下的所有 key:ln -s openssl-1.0.0.cnf openssl.cnf 软链接到openssl-1.0.0.cnf配置文件
source ./vars
./clean-all
-
执行以下命令生成 CA 证书。在初始化时,您已经在 vars 证书环境文件中配置了默认参数值,在本步骤中连续回车确认,完成配置即可。
./build-ca
-
执行以下命令生成服务器证书,其中
aliyuntest
是自定义的名字,连续回车确认,最后会有两次交互,输入y
确认。完成后,keys
目录下会生成aliyuntest.key
、aliyuntest.csr
和aliyuntest.crt
三个文件。./build-key-server aliyuntest
-
执行以下命令创建秘钥与证书,其中
aliyunuser
是用户名,连续回车确认,最后会有两次交互,输入y
确认。完成后,keys
目录下会生成 1024 位 RSA 服务器密钥aliyunuser.key
、aliyunuser.crt
和aliyunuser.csr
三个文件。./build-key aliyunuser(为用户开账号即如此)
-
执行以下命令,生成用于客户端验证的 Diffie Hellman 参数,完成后,
keys
目录下会生成 dh 参数文件dh1024.pem
。./build-dh
6.复制证书、密钥和参数文件
请按照以下步骤将生成的证书、密钥和参数文件复制到指定位置:
-
-
执行以下命令,将
/usr/share/doc/openvpn-2.2.2/easy-rsa/2.0/keys
目录下的所有文件复制到/etc/openvpn
目录下:cp -a /usr/share/doc/openvpn-2.2.2/easy-rsa/2.0/keys/* /etc/openvpn/
-
执行以下命令,将 OpenVPN 服务端配置文件
server.conf
复制到/etc/openvpn/
目录下:cp -a /usr/share/doc/openvpn-2.2.2/sample-config-files/server.conf /etc/openvpn/
配置完成后,
server.conf
文件的内容如下:
-
port 1194
proto tcp
dev tun
ca ca.crt
cert ceshiserver.crt
key ceshiserver.key # This file should be kept secret
dh dh1024.pem
cipher AES-256-CBC
server 10.30.xx.0 255.255.255.0 #vpn地址池
ifconfig-pool-persist ipp.txt
push "route 192.168.xx.0 255.255.255.0" #为哪个网段开VPN
client-to-client
keepalive 10 120
comp-lzo
persist-key
persist-tun
status openvpn-status.log
log openvpn.log
verb 3
crl-verify /usr/share/doc/openvpn-2.2.2/easy-rsa/2.0/keys/crl.pem #注销用户用的文件
management localhost 7505
四、设置 iptables
设置 iptables 前,请确保 iptables 已经开启且/etc/sysconfig/iptables
文件已经存在,然后按照以下步骤完成设置:
-
开启内部路由转发:
vi /etc/sysctl.conf
-
修改以下参数,启用 IPv4 转发:
net.ipv4.ip_forward = 1
-
使内核参数生效:
sysctl -p
-
添加 iptables 规则,确保服务器可以转发数据包到阿里云内网和外网:
iptables -t nat -A POSTROUTING -s 10.30.xx.0/24 -j MASQUERADE
-
保存 iptables 配置:
service iptables save
五、启动 OpenVPN
执行命令启动 OpenVPN:/etc/init.d/openvpn start
,然后执行命令:netstat -ano | grep 1194
,查看 1194 端口正在监听,确保 OpenVPN 正在运行。
六、客户端配置
1、windows客户端配置
软件下载链接:http://openvpn.ustc.edu.cn/
1、按照系统类型选择下载openvpn客户端
2、从服务器上根据用户生成认证文件,把认证文件拷贝到openvpn安装目录config下面,一般在C:\program files\openvpn\config,也可能在C:\Program Files (x86)\OpenVPN\config。
3、到openvpn的安装目录bin下(默认是C:\program files\openvpn\bin),找到openvpn-gui.exe, 在这个openvpn-gui.exe文件上单击鼠标右键,选择"以管理员身份运行"(英语是Run as Administrator)
4. 如果openvpn-gui已经启动,选择退出
5、单击openvpn-gui,在右下角openvpn-gui上单击鼠标右键,根据自己所在网络,到ustc-dianxin或其他菜单中,单击"connect"可以连接vpn
连接成功如下:
6、有用户碰到windows10下DNS查询异常,使用如下方式解决:文本编辑器打开ovpn配置文件。末尾插入一行,内容为: block-outside-dns
2、MAC客户端配置
软件下载地址:https://tunnelblick.net/
1、下载需要的版本
2、本地需要五个文件(三个用户名字开头的文件,一个ca.crt,一个认证文件.opvn)