虚拟专用网络(二)
2. OpenVPN介绍说明
2.1 openvpn的加密通信原理过程
OpneVPN使用TLS加密是通过使用公开密钥(非对称密钥,加密解密使用不同的key,一个称为Public key,另一个是Private key)
对数据进行加密的,对于TLS传输的工作原理,这里暂且先不介绍。
对于OpenVPN使用TLS mode
> 首先Server和Client要有相同的CA签发的证书,双方通过交换证书验证双方的合法性以决定是否建立VPN连接
> 然后使用对方CA把自己目前使用的数据加密方法(类似于密钥)加密后发送给对方
由于使用对方CA加密的,所以只有对方CA对应的Private key才能解密该字串,保证了此密钥的安全性,并且此密钥定期改变
对于窃听者来说,可能还没有破解出密钥,通信双方已经更换密钥了
2.2 openvpn的多种身份验证方式
OpenVPN提供了多种身份验证方式,用以确认参与连接双方的身份
包括:预享私钥,第三方证书以及用户名/密码组合等
预享密钥最为简单,但同时它只能用于建立点对点的VPN;
基于PKI的第三方证书提供了最完善的功能,但是需要额外的精力去维护一个PKI证书体系。
OpenVPN2.0后引入了用户名/口令组合的身份验证方式,它可以省略客户端预享密钥,但是仍有一份服务器CA证书需要被用作加
密
比较好的验证方式还是LDAP或域控制器统一验证等。
2.3 openvpn通信原理
OpenVPN所有的通信都基于一个单一的IP端口(默认为1194),默认使用UDP协议通讯,同时TCP也被支持。
OpenVPN连接能通过大多数的代理服务器,并且能够在NAT的环境中很好地工作。
OpenVPN服务器具有向客户端"推送"某些网络配置信息的功能,这些信息包括:IP地址、路由设置等。
OpenVPN提供了两种虚拟网络接口:
通过Tun/Tap驱动,可以建立三层IP隧道,或者虚拟二层以太网,后者可以传送任何类型的二层以太网数据。
传送的数据可通过LZO算法压缩。OpenVPN2.0以后版本每个进程可以同时管理数个并发的隧道
OpenVPN使用通用网络协议(TCP与UDP)的特点使它成为IPsec等协议的理想替代,尤其是在ISP(Internet service provider)
过滤某些特定VPN协议的情况下。
在选择协议时候,需要主要2个加密隧道之间的网络状况,如有高延迟或者丢包较多的情况下
请选择TCP协议作为底层协议,UDP协议由于存在无连接和重传机制,导致要隧道上层的协议进行重传,效率非常低下。建议用TCP
OpenVPN的技术核心是虚拟网卡,其次是SSL协议实现;虚拟网卡及其在OpenVPN中的工作机理进行介绍
虚拟网卡是使用网络底层编程技术实现的一个驱动软件,安装后在主机上多出一个网卡,可以像其它网卡一样进行配置。
服务程序可以在应用层打开虚拟网卡,如果应用软件(如IE)向虚拟网卡发送数据,则服务程序可以读取到该数据,
如果服务程序写合适的数据到虚拟网卡,应用软件也可以接受得到。
虚拟网卡在很多的操作系统下都有相应的实现,这也是OpenVPN能够跨平台一个很重要的理由。
在OpenVPN中,如果用户访问一个远程的虚拟地址(属于虚拟网卡配用的地址系列,区别于真实地址),则操作系统会通过路由器机
制
将数据包(TUN模式)或数据帧(TAP模式)发送到虚拟网卡上,服务程序接收该数据并进行相应的处理后,通过SOCKET从外网上发送
出
去,远程服务程序通过SOCKET从外网上接收数据,并进行相应的处理后,发送给虚拟网卡,则应用软件可以接收到,完成了一个单
向
传输的过程,反之亦然
OpenVPN使用OpenSSL库加密数据与控制信息:它使用了OpenSSL的加密以及验证功能,意味着,它能够使用任何OpenSSL支持
的算法。它提供了可选的数据包HMAC功能以提高连接的安全性。此外,OpenSSL的硬件加速也能提高它的性能
1. openvpn驱动部分实现了网卡处理和字符设备。网卡处理网络数据,字符设备完成与应用层的数据交互。
2. 使用openvpn必须修改路由表
工作过程-发送数据
1. 应用程序发送网络数据
2. 网路数据根据修改后的路由表把数据路由到虚拟网卡
3. 虚拟网卡把数据放到数据队列中
4. 字符设备从数据队列中取数据,然后送给应用层
5. 应用层把数据转发给物理网卡
6. 物理网卡发送数据
工作过程-接收过程
1. 物理网卡接受到数据,并传到应用空间
2. 应用守护程序通过字符设备,把数据传给驱动网卡
3. 数据通过虚拟网卡重新进入网络堆栈
4. 网络堆栈把数据传给上层真实的应用程序
2.4 openvpn生产环境常用场景
①. 远程拨号访问企业网络或IDC机房
即通过个人电脑远程拨号到企业办公网络
一般为企业内部员工出差、休假或特殊情况下在远离办公室的时候,又有需求访问公司的内部网络获取相关资源
就可以通过VPN拨号到公司内部。此时远程拨号的员工和办公室内的员工以及其他拨号的员工之间都相当于一个局域网内
例如:访问内部的域控制器,文件服务器,OA系统,ERP,HTTP服务,内网飞秋聊天工具等局域网服务应用
对于运维人员就是需要个人电脑远程拨号到企业网站IDC机房,远程维护服务器(无外网IP、如:数据库、存储服务器等)
此点是技术人员特别是运维人员在工作中会经常用这个方法维护大量的机房内无外网IP的服务器及网络设备
运维就业班架构图:牤牛阵法
②. 企业异地内部网络通过VPN连接成局域网
在公司的分支机构的局域网和公司总部LAN之间的VPN连接。
通过公网Internet建立VPN将公司在各地的分支机构的LAN连接到公司总部的LAN
例如:各大超市之间业务结算等
这是由于地域的原因而产生的VPN需求,通过VPN让不同的地域内的机器可以互相访问,就好像是一个局域网一样
例如:办公室互联协同办公,机房互联数据同步及业务访问等
③. 互联网公司多IDC机房之间通过VPN连接交换数据
此处是运维架构人员需要考虑的问题。不同机房之间业务管理和业务访问,数据流动
④. 企业外部VPN服务
在供应商、合作伙伴的LAN和本公司的LAN之间建立的VPN服务
从技术上讲,2 3 4的实现是一样的。
2.5 企业生产场景常用VPN工作结构图
①. 企业VPN远程拨号访问场景逻辑图(需要重点记忆★★★★★)
a 将vpn server的地址作为网关,或配置一个网段路由指向到客户端地址通过vpn server路由到达
b 在vpn server上面设置NAT映射,凡是源地址是VPN客户端获取的地址,都经过NAT映射为一个vpn server的内网地址
②. 企业或IDC机房网络互联场景逻辑路
3. OpenVPN实战部署--服务端部署
3.1 openvpn生产环境需求
环境说明:
vpnserver: eth0: 10.0.0.28(外网IP) GW: 10.0.0.254, dns 8.8.8.8 eth1: 172.16.1.28 (内网IP) GW: N/A 提示:检查是否可以ping通client eth0 ip app client Server: eth0: 172.16.1.X GW: 路由器 提示:检查是否可以ping 通vpnserver eth1 ip
逻辑拓扑图:
3.2 openvpn生产环境实际部署步骤
①. 系系统统环环境境信信息息确确认
[root@openvpn-server-01 ~]# cat /etc/redhat-release CentOS release 6.6 (Final) [root@openvpn-server-01 ~]# uname -r 2.6.32-504.el6.x86_64 [root@openvpn-server-01 ~]# uname -m x86_64
配置了性能工具
②. 配置vpn服服务务器器时时间间同同步步
[root@openvpn-server-01 ~]# /usr/sbin/ntpdate pool.ntp.org 6 Jul 09:52:59 ntpdate[1121]: adjust time server 202.112.29.82 offset 0.001589 sec [root@openvpn-server-01 ~]# cat /var/spool/cron/root #crond-id-001:time sync by hq */5 * * * * /usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1
说明:在服务端和客户端均配置好时间同步,并设置好定时任务
提示:此步很重要,如果VPN服务器和拨号的计算机客户端不一致,可能会导致VPN连接失败
③. 建立openvpn软软件件存存放放目目录录
[root@openvpn-server-01 ~]# mkdir /server/tools/ -p^C [root@openvpn-server-01 ~]# cd /server/tools/ # 进行软件的上传,上传完毕后进行检查,是否安装成功
④. openvpn相相关关软软件件安安装装
1 # openvpn涉及到lzo压缩软件安装 2 # tar zxf lzo-2.06.tar.gz 3 # cd lzo-2.06 4 # ./configure 5 # make 6 # make install 7 # openvpn软件安装(opnevpn会依赖openssl软件,如果没有安装编译的时候会报错) 8 # yum install openssl* -y 9 # rpm -aq openssl <- 确认openssl软件已经安装 10 openssl-1.0.1e-30.el6.x86_64 11 # rpm -qa openssl* 12 openssl-devel-1.0.1e-48.el6_8.1.x86_64 <- 两个重要的软件包已经存在 13 openssl-1.0.1e-48.el6_8.1.x86_64 14 openssl-static-1.0.1e-48.el6_8.1.x86_64 15 openssl098e-0.9.8e-20.el6.centos.1.x86_64 16 openssl-perl-1.0.1e-48.el6_8.1.x86_64 17 # tar zxf openvpn-2.2.2.tar.gz 18 # cd openvpn-2.2.2 19 # ./configure --with-lzo-headers=/usr/local/include/ --with-lzo-lib=/usr/local/lib 20 说明:如果openssl没有正确安装,就会出现报错信息 configure: error: OpenSSL Crypto headers not found. 21 make 22 make install 23 # which openvpn <- 如果有openvpn命令存在了,即表示openvpn安装完成 24 /usr/local/sbin/openvpn
3.3 openvpn生产环境CA证书建立步骤
1 # cd /server/tools/ 2 # cd openvpn-2.2.2/easy-rsa/2.0/ 3 # cp vars vars_bak <- 编辑vars文件前进行备份 4 # ls vars* 5 vars vars_bak 6 # vim vars <- 配置如下的内容,以便进行CA配置时,进行默认输出 7 export KEY_COUNTRY="CN" 8 export KEY_PROVINCE="BJ" 9 export KEY_CITY="Beijing" 10 export KEY_ORG="oldboy" 11 export KEY_EMAIL="330882721@qq.com" 12 export KEY_EMAIL="330882721@qq.com" 13 export KEY_CN=CN 14 export KEY_NAME=oldboy 15 export KEY_OU=oldboy 16 export PKCS11_MODULE_PATH=changeme 17 export PKCS11_PIN=1234 18 # source vars <- 使修改的配置生效 19 NOTE: If you run ./clean-all, I will be doing a rm -rf on /server/tools/openvpn-2.2.2/easy-rsa/2.0/keys 20 # ./clean-all <- 重新生成证书key信息 21 # ./build-ca 22 Generating a 1024 bit RSA private key 23 ....................................++++++ 24 .........................................................................++++++ 25 writing new private key to 'ca.key' 26 ----- 27 You are about to be asked to enter information that will be incorporated 28 into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. 29 There are quite a few fields but you can leave some blank 30 For some fields there will be a default value, 31 If you enter '.', the field will be left blank. 32 ----- 33 Country Name (2 letter code) [CN]: 34 State or Province Name (full name) [BJ]: 35 Locality Name (eg, city) [Beijing]: 36 Organization Name (eg, company) [oldboy]: 37 Organizational Unit Name (eg, section) [oldboy]: 38 Common Name (eg, your name or your server's hostname) [CN]:oldboy <- 输入vpn服务器的FQDN 39 Name [oldboy]: 40 Email Address [330882721@qq.com]: 41 提示:Common Name信息必须填写 42 # ll keys/ 43 total 12 44 -rw-r--r-- 1 root root 1314 Jul 6 11:46 ca.crt <- 通过build生成证书 45 -rw------- 1 root root 916 Jul 6 11:46 ca.key <- 通过buid生成的RSA私钥 46 -rw-r--r-- 1 root root 0 Jul 6 11:44 index.txt 47 -rw-r--r-- 1 root root 3 Jul 6 11:44 serial
3.4 openvpn生成服务器端证书和密钥key文件
1 # ./build-key-server server 2 Generating a 1024 bit RSA private key 3 ........++++++ 4 ...............++++++ 5 writing new private key to 'server.key' 6 ----- 7 You are about to be asked to enter information that will be incorporated 8 into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. 9 There are quite a few fields but you can leave some blank 10 For some fields there will be a default value, 11 If you enter '.', the field will be left blank. 12 ----- 13 Country Name (2 letter code) [CN]: 14 State or Province Name (full name) [BJ]: 15 Locality Name (eg, city) [Beijing]: 16 Organization Name (eg, company) [oldboy]: 17 Organizational Unit Name (eg, section) [oldboy]: 18 Common Name (eg, your name or your server's hostname) [server]: 19 Name [oldboy]: 20 Email Address [330882721@qq.com]: 21 Please enter the following 'extra' attributes 22 to be sent with your certificate request 23 A challenge password []:123456 24 An optional company name []:oldboy 25 Using configuration from /server/tools/openvpn-2.2.2/easy-rsa/2.0/openssl-1.0.0.cnf 26 Check that the request matches the signature 27 Signature ok 28 The Subject's Distinguished Name is as follows 29 countryName :PRINTABLE:'CN' 30 stateOrProvinceName :PRINTABLE:'BJ' 31 localityName :PRINTABLE:'Beijing' 32 organizationName :PRINTABLE:'oldboy' 33 organizationalUnitName :PRINTABLE:'oldboy' 34 commonName :PRINTABLE:'server' 35 name :PRINTABLE:'oldboy' 36 emailAddress :IA5STRING:'330882721@qq.com' 37 Certificate is to be certified until Jul 4 05:43:37 2026 GMT (3650 days) 38 Sign the certificate? [y/n]:y 39 1 out of 1 certificate requests certified, commit? [y/n]y 40 Write out database with 1 new entries 41 Data Base Updated 42 说明:只有标红色字体位置需要进行手工输入,其余默认即可,若成功创建会提示"Data Base Updated" 43 [root@openvpn-server-01 2.0]# ll keys/ 44 total 40 45 -rw-r--r-- 1 root root 4002 Jul 6 13:43 01.pem 46 -rw-r--r-- 1 root root 1314 Jul 6 11:46 ca.crt 47 -rw------- 1 root root 916 Jul 6 11:46 ca.key 48 -rw-r--r-- 1 root root 121 Jul 6 13:43 index.txt 49 -rw-r--r-- 1 root root 21 Jul 6 13:43 index.txt.attr 50 -rw-r--r-- 1 root root 0 Jul 6 11:44 index.txt.old 51 -rw-r--r-- 1 root root 3 Jul 6 13:43 serial 52 -rw-r--r-- 1 root root 3 Jul 6 11:44 serial.old 53 -rw-r--r-- 1 root root 4002 Jul 6 13:43 server.crt 54 -rw-r--r-- 1 root root 769 Jul 6 13:43 server.csr 55 -rw------- 1 root root 912 Jul 6 13:43 server.key 56 提示:红色部分表示生成的服务端证书密钥信息
3.5 openvpn生成客户端证书和密钥key文件
生成client证书和key文件,若建立多个客户证书,则重复如下步骤即可,只需修改Common Name项oldboy名称
在openvpn中,这种配置方法是一个登陆的VPN客户端需要有一个证书,每个证书在同一时刻只能供一个客户端连接
(如果有两个机器安装相同证书,同时拨号服务器,都能拨上,但是只有一个拨上的才能连通网络)
所以,如果有多个人,每个人需要建立一份证书(建立一份证书多人使用的情况在后面讲解)
下面建立2分分客客户户端端证证书书,,名名称称分分别别为为mao和dadong
1 # ./build-key oldboy <- 生成oldboy客户端证书和密钥信息 2 Generating a 1024 bit RSA private key 3 ...........................++++++ 4 ...........................................................++++++ 5 writing new private key to 'oldboy.key' 6 ----- 7 You are about to be asked to enter information that will be incorporated 8 into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. 9 There are quite a few fields but you can leave some blank 10 For some fields there will be a default value, 11 If you enter '.', the field will be left blank. 12 ----- 13 Country Name (2 letter code) [CN]: 14 State or Province Name (full name) [BJ]: 15 Locality Name (eg, city) [Beijing]: 16 Organization Name (eg, company) [oldboy]: 17 Organizational Unit Name (eg, section) [oldboy]: 18 Common Name (eg, your name or your server's hostname) [oldboy]: 19 Name [oldboy]: 20 Email Address [330882721@qq.com]: 21 Please enter the following 'extra' attributes 22 to be sent with your certificate request 23 A challenge password []:123456 24 An optional company name []:oldboy 25 Using configuration from /server/tools/openvpn-2.2.2/easy-rsa/2.0/openssl-1.0.0.cnf 26 Check that the request matches the signature 27 Signature ok 28 The Subject's Distinguished Name is as follows 29 countryName :PRINTABLE:'CN' 30 stateOrProvinceName :PRINTABLE:'BJ' 31 localityName :PRINTABLE:'Beijing' 32 organizationName :PRINTABLE:'oldboy' 33 organizationalUnitName :PRINTABLE:'oldboy' 34 commonName :PRINTABLE:'oldboy' 35 name :PRINTABLE:'oldboy' 36 emailAddress :IA5STRING:'330882721@qq.com' 37 Certificate is to be certified until Jul 4 06:14:05 2026 GMT (3650 days) 38 Sign the certificate? [y/n]:y 39 1 out of 1 certificate requests certified, commit? [y/n]y 40 Write out database with 1 new entries 41 Data Base Updated 42 [root@openvpn-server-01 2.0]# ll keys/ <- oldboy客户端证书和密钥信息已经生成 43 total 64 44 -rw-r--r-- 1 root root 4002 Jul 6 13:43 01.pem 45 -rw-r--r-- 1 root root 3884 Jul 6 14:14 02.pem 46 -rw-r--r-- 1 root root 1314 Jul 6 11:46 ca.crt 47 -rw------- 1 root root 916 Jul 6 11:46 ca.key 48 -rw-r--r-- 1 root root 242 Jul 6 14:14 index.txt 49 -rw-r--r-- 1 root root 21 Jul 6 14:14 index.txt.attr 50 -rw-r--r-- 1 root root 21 Jul 6 13:43 index.txt.attr.old 51 -rw-r--r-- 1 root root 121 Jul 6 13:43 index.txt.old 52 -rw-r--r-- 1 root root 3884 Jul 6 14:14 oldboy.crt 53 -rw-r--r-- 1 root root 769 Jul 6 14:14 oldboy.csr 54 -rw------- 1 root root 916 Jul 6 14:14 oldboy.key 55 -rw-r--r-- 1 root root 3 Jul 6 14:14 serial 56 -rw-r--r-- 1 root root 3 Jul 6 13:43 serial.old 57 -rw-r--r-- 1 root root 4002 Jul 6 13:43 server.crt 58 -rw-r--r-- 1 root root 769 Jul 6 13:43 server.csr 59 -rw------- 1 root root 912 Jul 6 13:43 server.key 60 提示:创建了客户端的证书和密钥,默认就是拨号免密码的,但是是可以加密码让客户端进行拨号登录的 61 如果想有密码保护客户端key,可以利用build-key-pass script命令 62 # 支持密码拨号的方式添加客户端证书密钥信息 63 # ./build-key-pass heqing 64 Generating a 1024 bit RSA private key 65 ....++++++ 66 .........................++++++ 67 writing new private key to 'heqing.key' 68 Enter PEM pass phrase: <- 设置拨号时需要输入的密码 123456 69 Verifying - Enter PEM pass phrase: 70 ----- 71 You are about to be asked to enter information that will be incorporated 72 into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. 73 There are quite a few fields but you can leave some blank 74 For some fields there will be a default value, 75 If you enter '.', the field will be left blank. 76 ----- 77 Country Name (2 letter code) [CN]: 78 State or Province Name (full name) [BJ]: 79 Locality Name (eg, city) [Beijing]: 80 Organization Name (eg, company) [oldboy]: 81 Organizational Unit Name (eg, section) [oldboy]: 82 Common Name (eg, your name or your server's hostname) [heqing]: 83 Name [oldboy]: 84 Email Address [330882721@qq.com]: 85 Please enter the following 'extra' attributes 86 to be sent with your certificate request 87 A challenge password []:123456 88 An optional company name []:oldboy 89 Using configuration from /server/tools/openvpn-2.2.2/easy-rsa/2.0/openssl-1.0.0.cnf 90 Check that the request matches the signature 91 Signature ok 92 The Subject's Distinguished Name is as follows 93 countryName :PRINTABLE:'CN' 94 stateOrProvinceName :PRINTABLE:'BJ' 95 localityName :PRINTABLE:'Beijing' 96 organizationName :PRINTABLE:'oldboy' 97 organizationalUnitName :PRINTABLE:'oldboy' 98 commonName :PRINTABLE:'heqing' 99 name :PRINTABLE:'oldboy' 100 emailAddress :IA5STRING:'330882721@qq.com' 101 Certificate is to be certified until Jul 4 06:47:19 2026 GMT (3650 days) 102 Sign the certificate? [y/n]:y 103 1 out of 1 certificate requests certified, commit? [y/n]y 104 Write out database with 1 new entries 105 Data Base Updated 106 # ll keys/ 107 total 80 108 -rw-r--r-- 1 root root 4002 Jul 6 13:43 01.pem 109 -rw-r--r-- 1 root root 3884 Jul 6 14:14 02.pem 110 -rw-r--r-- 1 root root 3884 Jul 6 14:47 03.pem 111 -rw-r--r-- 1 root root 1314 Jul 6 11:46 ca.crt 112 -rw------- 1 root root 916 Jul 6 11:46 ca.key 113 -rw-r--r-- 1 root root 3884 Jul 6 14:47 heqing.crt 114 -rw-r--r-- 1 root root 769 Jul 6 14:47 heqing.csr 115 -rw------- 1 root root 1041 Jul 6 14:47 heqing.key 116 -rw-r--r-- 1 root root 363 Jul 6 14:47 index.txt 117 -rw-r--r-- 1 root root 21 Jul 6 14:47 index.txt.attr 118 -rw-r--r-- 1 root root 21 Jul 6 14:14 index.txt.attr.old 119 -rw-r--r-- 1 root root 242 Jul 6 14:14 index.txt.old 120 -rw-r--r-- 1 root root 3884 Jul 6 14:14 oldboy.crt 121 -rw-r--r-- 1 root root 769 Jul 6 14:14 oldboy.csr 122 -rw------- 1 root root 916 Jul 6 14:14 oldboy.key 123 -rw-r--r-- 1 root root 3 Jul 6 14:47 serial 124 -rw-r--r-- 1 root root 3 Jul 6 14:14 serial.old 125 -rw-r--r-- 1 root root 4002 Jul 6 13:43 server.crt 126 -rw-r--r-- 1 root root 769 Jul 6 13:43 server.csr 127 -rw------- 1 root root 912 Jul 6 13:43 server.key
3.6 openvpn利用算法(hellman)生成协议文件
提示:diffe hellman parameters must be generated for the OpenVPN server
生成传输进行密钥交换时用到的交换密钥协议文件
[root@openvpn-server-01 2.0]# ./build-dh Generating DH parameters, 1024 bit long safe prime, generator 2 This is going to take a long time [root@openvpn-server-01 2.0]# ll keys/dh1024.pem -rw-r--r-- 1 root root 245 Jul 6 15:12 keys/dh1024.pem <- 查看是否生成了相应的文件
3.7 openvpn利用算法(hellman)生成协议文件
3.8 openvpn防止恶意攻击文件(如 DOS UDP port flooding)/和整数吊销文件
防止恶意攻击,生成一个HMAC firewall
[root@openvpn-server-01 2.0]# openvpn --genkey --secret keys/ta.key [root@openvpn-server-01 2.0]# ll -l keys/ta.key -rw------- 1 root root 636 Jul 6 15:31 keys/ta.key
生成证书吊销文件,防止日后有人丢失证书,被非法用户接入VPN
先略
以上步骤完成后,大部分服务端的工作已完成,接下来的操作就是把证书拷贝到指定地点了
①创建CA证书
②创建服务端证书和文件
③创建客户端证书和文件
④创建密钥交换文件
3.9 openvpn服务端的重要命令说明
3.10 openvpn详细服务器端VPN server.conf重要参数
①. 拷贝keys及配置
把所有的keys和配置拷贝到/etc/openvpn目录中
1 [root@openvpn-server-01 2.0]# mkdir /etc/openvpn 2 [root@openvpn-server-01 2.0]# cd /server/tools/openvpn-2.2.2/easy-rsa/2.0/ 3 [root@openvpn-server-01 2.0]# cp -ap keys /etc/openvpn/ 4 [root@openvpn-server-01 2.0]# cd /server/tools/openvpn-2.2.2/sample-config-files/ 5 [root@openvpn-server-01 sample-config-files]# cp client.conf server.conf /etc/openvpn/ 6 [root@openvpn-server-01 sample-config-files]# tree /etc/openvpn/ 7 /etc/openvpn/ 8 ├── client.conf 9 ├── keys 10 └── server.conf 11 1 directory, 24 files 12 [root@openvpn-server-01 sample-config-files]# cd /etc/openvpn/ 13 [root@openvpn-server-01 openvpn]# cp server.conf server.conf.ori 14 [root@openvpn-server-01 openvpn]# grep -vE ";|#|^$"server.conf <- 查看服务端配置文件信息 15 port 1194 16 proto udp 17 dev tun 18 ca ca.crt 19 cert server.crt 20 dh dh1024.pem 21 server 10.8.0.0 255.255.255.0 22 ifconfig-pool-persist ipp.txt 23 keepalive 10 120 24 comp-lzo 25 persist-key 26 persist-tun 27 status openvpn-status.log 28 verb 3
企业生产环境server.conf配置案例
3.11 openvpn实际服务器端VPN配置文件server.conf配置
和默认样例配置相比,企业生产环境的配置改动如下
1 # grep -vE ";|#|^$"server.conf.ori >server.conf 2 # vim server.conf 3 local 10.0.0.1 4 port 52115 5 proto tcp 6 dev tun 7 ca /etc/openvpn/keys/ca.crt 8 cert /etc/openvpn/keys/server.crt 9 key /etc/openvpn/keys/server.key 10 dh /etc/openvpn/keys/dh1024.pem 11 server 10.8.0.0 255.255.255.0 12 push "route 172.16.1.0 255.255.255.0" 13 ifconfig-pool-persist ipp.txt 14 keepalive 10 120 15 comp-lzo 16 persist-key 17 persist-tun 18 status openvpn-status.log 19 verb 3 20 client-to-client 21 duplicate-cn 22 log /var/log/openvpn.log
3.12 openvpn调试服务端VPN服务启动环境
a. 取消服务器上防火墙iptables对openvpn(默认1194,本例52115)的拦截,以及允许服务进行转发
1 # vim /etc/sysconfig/iptables 2 # Firewall configuration written by system-config-firewall 3 # Manual customization of this file is not recommended. 4 *filter 5 :INPUT ACCEPT [0:0] 6 :FORWARD ACCEPT [0:0] 7 :OUTPUT ACCEPT [0:0] 8 -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 9 -A INPUT -p icmp -j ACCEPT 10 -A INPUT -i lo -j ACCEPT 11 -A INPUT -p tcp --dport 52115 -j ACCEPT 12 -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT 13 -A INPUT -j REJECT --reject-with icmp-host-prohibited 14 -A FORWARD -j REJECT --reject-with icmp-host-prohibited 15 COMMIT 16 # iptables -A INPUT -p tcp --dport 52115 -j ACCEPT 17 [root@openvpn-server-01 openvpn]# iptables -L -n 18 Chain INPUT (policy ACCEPT) 19 target prot opt source destination 20 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:52115 21 # /etc/init.d/iptables stop <- 最好还是先关闭防火墙,调试好VPN后再进行开启
b. 开启内核转发功能
1 [root@openvpn-server-01 openvpn]# sed -i 's#net.ipv4.ip_forward = 0#net.ipv4.ip_forward = 1#g' /etc/sysctl.conf 2 [root@openvpn-server-01 openvpn]# sysctl -p 3 net.ipv4.ip_forward = 1 4 [root@openvpn-server-01 openvpn]# iptables -L -n 5 Chain FORWARD (policy ACCEPT) 6 target prot opt source destination <- 如果开启了防火墙,防火墙的转发功能也要允许
3.13 openvpn启动服务端的VPN服务并检查
1 /usr/local/sbin/openvpn --config /etc/openvpn/server.conf & <- 启动vpn程序并进行检查 2 # netstat -lntup|grep vpn 3 tcp 0 0 10.0.0.1:52115 0.0.0.0:* LISTEN 7038/openvpn 4 # echo "#startup openvpn service by oldboy" >>/etc/rc.local <- 设置openvpn开启自启动 5 # echo '/usr/local/sbin/openvpn --config /etc/openvpn/server.conf &' >>/etc/rc.local 6 # cat /etc/rc.local 7 #startup openvpn service by oldboy 8 /usr/local/sbin/openvpn --config /etc/openvpn/server.conf & 9 # 自带vpn启动脚本中的启动vpn方法: 10 /usr/local/sbin/openvpn --daemon --writepid /var/run/openvpn/server.pid --config server.conf --cd /etc/openvpn 11 # 查看openvpn的日志信息: 12 # tail -5 /var/log/openvpn.log 13 Wed Jul 6 19:54:12 2016 MULTI: multi_init called, r=256 v=256 14 Wed Jul 6 19:54:12 2016 IFCONFIG POOL: base=10.8.0.4 size=62 15 Wed Jul 6 19:54:12 2016 IFCONFIG POOL LIST 16 Wed Jul 6 19:54:12 2016 MULTI: TCP INIT maxclients=1024 maxevents=1028 17 Wed Jul 6 19:54:12 2016 Initialization Sequence Completed 18 说明:可以根据日志信息,来判断vpn服务是否正确启动 19 # openvpn服务启动后,本地会多出一个虚拟网卡 20 [root@openvpn-server-01 ~]# ifconfig 21 tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 22 inet addr:10.8.0.1 P-t-P:10.8.0.2 Mask:255.255.255.255 23 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1 24 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 25 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 26 collisions:0 txqueuelen:100 27 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
3.14 openvpn配置常规方式启动openvpn服务
1 [root@openvpn-server-01 ~]# cp /server/tools/openvpn-2.2.2/sample-scripts/openvpn.init /etc/init.d/openvpn 2 [root@openvpn-server-01 ~]# chmod 700 /etc/init.d/openvpn 3 [root@openvpn-server-01 ~]# chkconfig --add openvpn 4 [root@openvpn-server-01 ~]# chkconfig --list openvpn 5 openvpn 0:off 1:off 2:off 3:on 4:on 5:on 6:off 6 [root@openvpn-server-01 ~]# pkill openvpn 7 [root@openvpn-server-01 ~]# /etc/init.d/openvpn start <- 启动失败,由于启动文件配置问题 8 Starting openvpn: [FAILED] 9 [root@openvpn-server-01 ~]# vim /etc/init.d/openvpn 10 148 for cin `/bin/ls *.conf 2>/dev/null`; do <- 修改原有148行配置为下面的配置信息 11 148 for cin `/bin/ls server.conf 2>/dev/null`; do 12 # /etc/init.d/openvpn start 13 Starting openvpn: [ OK ] 14 说明:依据openvpn server的脚本中信息,如果openvpn程序目录下,*.conf文件过程会导致启动问题
以上总结自老男孩,感谢。
您的资助是我最大的动力!
金额随意,欢迎来赏!