VPN就是虚拟专用通道,是提供给企业之间或者公司个人与公司之间安全数据传输的隧道,OpenVPN是Linux下开源VPN的先锋,提供了良好的性能和友好的用户GUI(图形用户界面)。本篇文章包含OpenVPN应用场景,OpenVPN服务端搭建,OpenVPN客户端搭建(windows+linux),OpenVPN密码认证,手把手教大家搭建OpenVPN!
大家在操作的时候一定要小心谨慎,稍有不慎,尤其是windows客户端配置密码认证,稍有不慎就会出很多问题,大家耐心的修改配置文件,再重新尝试即可,希望大家都能做出来。
OpenVPN应用场景
1、个人出差需要访问公司只有内网的服务器
2、公司不同地区之间建立服务通信(IDC与IDC之间)
OpenVPN服务端搭建部署
一、安装配置证书软件
1. [root@Web01 ~]# yum -y install easy-rsa 2. [root@Web01 ~]# mkdir /opt/easy-rsa 3. [root@Web01 easy-rsa]# rpm -ql easy-rsa #查看已安装的RPM包中名为 easy-rsa 的文件列表 4. [root@Web01 easy-rsa]# cp -a /usr/share/easy-rsa/3.0.8/* . 5. [root@Web01 easy-rsa]# cp -a /usr/share/doc/easy-rsa-3.0.8/vars.example ./vars 6. [root@Web01 easy-rsa]# > vars 7. [root@Web01 easy-rsa]# cat vars 8. if [ -z "$EASYRSA_CALLER" ]; then 9. echo "You appear to be sourcing an Easy-RSA 10. 'vars' file." >&2 11. echo "This is no longer necessary and is 12. disallowed. See the section called" >&2 13. echo "'How to use this file' near the top 14. comments for more details." >&2 15. return 1 16. fi 17. set_var EASYRSA_DN "cn_only" 18. set_var EASYRSA_REQ_COUNTRY "CN" 19. set_var EASYRSA_REQ_PROVINCE "Beijing" 20. set_var EASYRSA_REQ_CITY "Shanghai" 21. set_var EASYRSA_REQ_ORG "koten" 22. set_var EASYRSA_REQ_EMAIL "888888@qq.comm" 23. set_var EASYRSA_NS_SUPPORT "yes"
二、创建证书
1. [root@Web01 easy-rsa]# ./easyrsa init-pki #1、初始化,在当前目录创建PKI目录,用于存储整数 2. [root@Web01 easy-rsa]# ./easyrsa build-ca #2、创建根证书,会提示设置密码,用于ca对之后生成的server和client证书签名时使用,其他提示内容直接回车即可 3. Enter New CA Key Passphrase: #注意密码不能太短,我这边设置的是123456 4. Re-Enter New CA Key Passphrase: 5. [root@Web01 easy-rsa]# ./easyrsa gen-req server nopass #3、创建server端证书和私钥文件,nopass表示不加密私钥文件,提示内容直接回车即可 6. [root@Web01 easy-rsa]# ./easyrsa sign server server #4、给server端证书签名,提示内容需要输入yes和创建ca根证书时候的密码 7. [root@Web01 easy-rsa]# ./easyrsa gen-dh #5、创建Diffie-Hellman文件,密钥交换时的Diffie-Hellman算法 8. [root@Web01 easy-rsa]# ./easyrsa gen-req client nopass #6、创建client端的证书和私钥文件,nopass表示不加密私钥文件,提示内容直接回车即可 9. [root@Web01 easy-rsa]# ./easyrsa sign client client #7、给client端证书前面,提示内容输入yes和创建ca根证书时候的密码 10. [root@Web01 easy-rsa]# tree #检查是否有ca根证书、客户端服务端证书、客户端服务端私钥 11. . 12. ├── easyrsa #管理命令 13. ├── openssl-easyrsa.cnf 14. ├── pki 15. │ ├── ca.crt #ca根证书,服务端与客户端都需要用 16. │ ├── certs_by_serial 17. │ │ ├── 633C217979C7B5F1D0A9ECA971006F96.pem 18. │ │ └── 857F9B2E3F6C3D35934672212343B42D.pem 19. │ ├── dh.pem #认证算法 服务端 20. │ ├── index.txt 21. │ ├── index.txt.attr 22. │ ├── index.txt.attr.old 23. │ ├── index.txt.old 24. │ ├── issued 25. │ │ ├── client.crt #客户端证书 26. │ │ └── server.crt #服务端证书 27. │ ├── openssl-easyrsa.cnf 28. │ ├── private 29. │ │ ├── ca.key 30. │ │ ├── client.key #客户端私钥 31. │ │ └── server.key #服务端私钥 32. ......
三、安装openvpn并写入服务端配置文件
1. [root@Web01 easy-rsa]# yum -y install openvpn 2. [root@Web01 easy-rsa]# cat /etc/openvpn/server.conf 3. port 1194 #端口 4. proto udp #协议 5. dev tun #采用路由隧道模式 6. ca /opt/easy-rsa/pki/ca.crt #ca证书的位置 7. cert /opt/easy-rsa/pki/issued/server.crt #服务端公钥的位置 8. key /opt/easy-rsa/pki/private/server.key #服务端私钥的位置 9. dh /opt/easy-rsa/pki/dh.pem #证书校验算法 10. server 10.8.0.0 255.255.255.0 #给客户端分配的地址池 11. push "route 172.16.1.0 255.255.255.0" #允许客户端访问的内网网段 12. ifconfig-pool-persist ipp.txt #地址池记录文件位置,未来让openvpn客户端固定ip地址使用的 13. keepalive 10 120 #存活时间,10秒ping一次,120秒如果未收到响应则视为短线 14. max-clients 100 #最多允许100个客户端连接 15. status openvpn-status.log #日志位置,记录openvpn状态 16. log /var/log/openvpn.log #openvpn日志记录位置 17. verb 3 #openvpn版本 18. client-to-client #允许客户端与客户端之间通信 19. persist-key #通过keepalive检测超时后,重新启动VPN,不重新读取 20. persist-tun #检测超时后,重新启动VPN,一直保持tun是linkup的,否则网络会先linkdown然后再linkup 21. duplicate-cn #客户端密钥(证书和私钥)是否可以重复 22. comp-lzo #启动lzo数据压缩格式
四、启动并检查端口
1. [root@Web01 easy-rsa]# systemctl start openvpn@server 2. [root@Web01 easy-rsa]# systemctl enable openvpn@server 3. Created symlink from /etc/systemd/system/multi-user.target.wants/openvpn@server.service to /usr/lib/systemd/system/openvpn@.service. 4. [root@Web01 easy-rsa]# ip a s tun0 #查看网段 5. 4: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100 6. link/none 7. inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0 8. valid_lft forever preferred_lft forever 9. inet6 fe80::b1:7ea6:1178:8a1a/64 scope link flags 800 10. valid_lft forever preferred_lft forever 11. [root@Web01 easy-rsa]# ss -lntup|grep 1194 #检查端口 12. udp UNCONN 0 0 *:1194 *:* users:(("openvpn",pid=47104,fd=6)) 13. [root@Web01 easy-rsa]# ps -ef|grep openvpn #检查pid 14. root 47104 1 0 10:59 ? 00:00:00 /usr/sbin/openvpn --cd /etc/openvpn/ --config server.conf 15. root 47202 40565 0 11:01 pts/0 00:00:00 grep --color=auto openvpn
OpenVPN客户端配置(linux端)
一、配置openvpn
1. [root@Web02 ~]# yum -y install openvpn 2. [root@Web02 ~]# cat /etc/openvpn/client.conf 3. client 4. dev tun 5. proto udp 6. remote 10.0.0.7 1194 7. resolv-retry infinite 8. nobind 9. ca ca.crt 10. cert client.crt 11. key client.key 12. verb 3 13. persist-key 14. comp-lzo 15. 16. [root@Web01 pki]# scp private/client.key 172.16.1.8:/etc/openvpn/ 17. [root@Web01 pki]# scp issued/client.crt 172.16.1.8:/etc/openvpn/ 18. [root@Web01 pki]# scp ca.crt 172.16.1.8:/etc/openvpn/ 19. 20. [root@Web02 ~]# systemctl start openvpn@client 21. [root@Web02 ~]# systemctl enable openvpn@client 22. Created symlink from /etc/systemd/system/multi-user.target.wants/openvpn@client.service to /usr/lib/systemd/system/openvpn@.service.
二、测试连接
1. [root@Web02 ~]# ifdown eth1 #关闭内网IP 2. [root@Web02 ~]# ip a 3. 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 4. link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 5. inet 127.0.0.1/8 scope host lo 6. valid_lft forever preferred_lft forever 7. inet6 ::1/128 scope host 8. valid_lft forever preferred_lft forever 9. 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 10. link/ether 00:0c:29:36:19:29 brd ff:ff:ff:ff:ff:ff 11. inet 10.0.0.8/24 brd 10.0.0.255 scope global eth0 12. valid_lft forever preferred_lft forever 13. inet6 fe80::20c:29ff:fe36:1929/64 scope link 14. valid_lft forever preferred_lft forever 15. 3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000 16. link/ether 00:0c:29:36:19:33 brd ff:ff:ff:ff:ff:ff 17. 4: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100 18. link/none 19. inet 10.8.0.6 peer 10.8.0.5/32 scope global tun0 20. valid_lft forever preferred_lft forever 21. inet6 fe80::b198:27bb:5967:356b/64 scope link flags 800 22. valid_lft forever preferred_lft forever 23. [root@Web02 ~]# ping 172.16.1.7 #成功通过openvpn ping通 24. PING 172.16.1.7 (172.16.1.7) 56(84) bytes of data. 25. 64 bytes from 172.16.1.7: icmp_seq=1 ttl=64 time=0.686 ms 26. 64 bytes from 172.16.1.7: icmp_seq=2 ttl=64 time=1.13 ms 27. ^C 28. --- 172.16.1.7 ping statistics --- 29. 2 packets transmitted, 2 received, 0% packet loss, time 1001ms 30. rtt min/avg/max/mdev = 0.686/0.908/1.130/0.222 ms
OpenVPN客户端搭建部署(windows端)
一、安装OpenVPN软件
这个东西没法放到网盘里,需要可以私信联系
二、配置OpenVPN
将ca根证书、client.key、client.crt放入config目录
1. [root@Web01 easy-rsa]# sz pki/ca.crt 2. [root@Web01 easy-rsa]# sz pki/private/client.key 3. [root@Web01 easy-rsa]# sz pki/issued/client.crt
再创建client.ovpn,写入如下内容
1. client 2. dev tun 3. proto udp 4. remote 10.0.0.7 1194 #注意此处更改为openvpn服务端代码 5. resolv-retry infinite 6. nobind 7. ca ca.crt 8. cert client.crt 9. key client.key 10. verb 3 11. persist-key 12. comp-lzo
目录最终状态