OpenVpn部署使用easy-rsa-3.0
OpenVpn简介
OpenVPN是一个用于创建虚拟专用网络(Virtual Private Network加密通道的免费开源软件。使用OpenVPN可以方便地在家庭、办公场所、住宿酒店等不同网络访问场所之间搭建类似于局域网的专用网络通道。
支持系统
Solaris、Linux 2.2+(Linux 2.2+表示Linux 2.2及以上版本,下同)、OpenBSD 3.0+、FreeBSD、NetBSD、Mac OS X、Android和Windows 2000+的操作系统
特性
OpenVPN允许参与创建VPN的单点使用公开密钥、电子证书、或者用户名/密码来进行身份验证。它大量使用了OpenSSL加密库中的SSLv3/TLSv1协议函数库
1、加密
OpenVPN使用OpenSSL库加密数据与控制信息:它使用了OpenSSL的加密以及验证功能,意味着,它能够使用任何OpenSSL支持的算法。它提供了可选的数据包HMAC功能以提高连接的安全性。此外,OpenSSL的硬件加速也能提高它的性能。
2、验证
OpenVPN提供了多种身份验证方式,用以确认参与连接双方的身份,包括:预享私钥,第三方证书以及用户名/密码组合。预享密钥最为简单,但同时它只能用于创建点对点的VPN;基于PKI的第三方证书提供了最完善的功能,但是需要额外的精力去维护一个PKI证书体系。OpenVPN2.0后引入了用户名/口令组合的身份验证方式,它可以省略客户端证书,但是仍有一份服务器证书需要被用作加密。
3、网络
OpenVPN所有的通信都基于一个单一的IP端口,默认且推荐使用UDP协议通讯,同时TCP也被支持。OpenVPN连接能通过大多数的代理服务器,并且能够在NAT的环境中很好地工作。服务端具有向客户端“推送”某些网络配置信息的功能,这些信息包括:IP地址、路由设置等。OpenVPN提供了两种虚拟网络接口:通用Tun/Tap驱动,通过它们,可以创建三层IP隧道,或者虚拟二层以太网,后者可以传送任何类型的二层以太网络数据。传送数据可通过LZO算法压缩。IANA指定给OpenVPN的官方端口为1194。OpenVPN 2.0以后版本每个进程可以同时管理数个并发的隧道。
OpenVPN使用通用网络协议(TCP与UDP)的特点使它成为IPsec等协议的理想替代,尤其是在ISP(Internet service provider)过滤某些特定VPN协议的情况下。
4、安全
OpenVPN与生俱来便具备了许多安全特性:它在用户空间运行,无须对内核及网络协议栈作修改;初始完毕后以chroot方式运行,放弃root权限;使用mlockall以防止敏感数据交换到磁盘;OpenVPN通过PKCS#11支持硬件加密标识,如智能卡。
环境说明
[root@check1 ~]# ip a | grep "scope global" | awk -F'[ /]+' '{print $3}' | head -1 172.16.227.43 [root@check1 ~]# curl ifconfig.me 47.97.14.62 [root@check1 ~]# cat /etc/redhat-release CentOS release 6.9 (Final) [root@check1 ~]# uname -a Linux check1 2.6.32-696.16.1.el6.x86_64 #1 SMP Wed Nov 15 16:51:15 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
1、一台Centos机器
2、有外网IP
3、可以连接外网(如果可以上网则使用yum安装,否则自行下载RPM包安装)
安装
[root@check1 ~]# yum -y install openvpn easy-rsa 离线安装RPM包: pkcs11-helper-1.11-3.el6.x86_64.rpm openvpn-2.4.6-1.el6.x86_64.rpm easy-rsa-3.0.3-1.el6.noarch.rpm
配置
[root@check1 ~]# cp -r /usr/share/easy-rsa/ /etc/openvpn/ [root@check1 ~]# cd /etc/openvpn/easy-rsa/ [root@check1 easy-rsa]# ls 3 3.0 3.0.3 [root@check1 easy-rsa]# \rm 3 3.0 [root@check1 easy-rsa]# cd 3.0.3/ [root@check1 3.0.3]# find / -type f -name "vars.example" | xargs -i cp {} . && mv vars.example vars [root@check1 3.0.3]# ls easyrsa openssl-1.0.cnf vars x509-types
生成证书
创建一个新的PKI和CA
[root@check1 3.0.3]# pwd /etc/openvpn/easy-rsa/3.0.3 [root@check1 3.0.3]# ./easyrsa init-pki Note: using Easy-RSA configuration from: ./vars init-pki complete; you may now create a CA or requests. Your newly created PKI dir is: /etc/openvpn/easy-rsa/3.0.3/pki [root@check1 3.0.3]# ./easyrsa build-ca Note: using Easy-RSA configuration from: ./vars Generating a 2048 bit RSA private key .............................+++ ........................................................................................................+++ writing new private key to '/etc/openvpn/easy-rsa/3.0.3/pki/private/ca.key.IEMW9gptmK' Enter PEM pass phrase: #设置一个密码(用于ca对之后生成的server和client证书签名时使用) Verifying - Enter PEM pass phrase: #重复一遍 ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Common Name (eg: your user, host, or server name) [Easy-RSA CA]: #回车(可以键入回车使用默认的,也可以手动更改 ) CA creation complete and you may now import and sign cert requests. Your new CA certificate file for publishing is at: /etc/openvpn/easy-rsa/3.0.3/pki/ca.crt 创建时nopass表示不加密 就不会提示Enter PEM pass phrase 例:[root@check1 3.0.3]# ./easyrsa build-ca nopass
创建服务端证书
[root@check1 3.0.3]# ./easyrsa gen-req server nopass Note: using Easy-RSA configuration from: ./vars Generating a 2048 bit RSA private key ....................................................................................+++ ...................................+++ writing new private key to '/etc/openvpn/easy-rsa/3.0.3/pki/private/server.key.7O6iK8N5ie' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Common Name (eg: your user, host, or server name) [server]: #回车 Keypair and certificate request completed. Your files are: req: /etc/openvpn/easy-rsa/3.0.3/pki/reqs/server.req key: /etc/openvpn/easy-rsa/3.0.3/pki/private/server.key
签约服务端证书
给server端证书做签名,首先是对一些信息的确认,可以输入yes,然后输入build-ca时设置的那个密码
[root@check1 3.0.3]# ./easyrsa sign server server Note: using Easy-RSA configuration from: ./vars You are about to sign the following certificate. Please check over the details shown below for accuracy. Note that this request has not been cryptographically verified. Please be sure it came from a trusted source or that you have verified the request checksum with the sender. Request subject, to be signed as a server certificate for 3650 days: subject= commonName = server Type the word 'yes' to continue, or any other input to abort. Confirm request details: yes #输入yes确认信息 Using configuration from ./openssl-1.0.cnf Enter pass phrase for /etc/openvpn/easy-rsa/3.0.3/pki/private/ca.key: #输入创建CA时设置的密码 Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows commonName :PRINTABLE:'server' Certificate is to be certified until Oct 9 09:39:51 2028 GMT (3650 days) Write out database with 1 new entries Data Base Updated Certificate created at: /etc/openvpn/easy-rsa/3.0.3/pki/issued/server.crt
创建 Diffie-Hellman
时间会有点长,耐心等待
[root@check1 3.0.3]# ./easyrsa gen-dh Note: using Easy-RSA configuration from: ./vars Generating DH parameters, 2048 bit long safe prime, generator 2 This is going to take a long time ................................................... DH parameters of size 2048 created at /etc/openvpn/easy-rsa/3.0.3/pki/dh.pem
创建客户端证书
复制文件
[root@check1 ~]# mkdir /etc/openvpn/client [root@check1 ~]# cp -r /usr/share/easy-rsa/ /etc/openvpn/client/easy-rsa [root@check1 ~]# cd /etc/openvpn/client/easy-rsa/ [root@check1 easy-rsa]# \rm 3 3.0 [root@check1 easy-rsa]# cd 3.0.3/ [root@check1 3.0.3]# find / -type f -name "vars.example" | xargs -i cp {} . && mv vars.example vars
初始化,会在当前目录创建PKI目录,用于存储一些中间变量及最终生成的证书
[root@check1 3.0.3]# pwd /etc/openvpn/client/easy-rsa/3.0.3 [root@check1 3.0.3]# ./easyrsa init-pki Note: using Easy-RSA configuration from: ./vars init-pki complete; you may now create a CA or requests. Your newly created PKI dir is: /etc/openvpn/client/easy-rsa/3.0.3/pki
生成证书
再添加用户,从这里开始就OK
[root@check1 3.0.3]# ./easyrsa gen-req wang nopass #客户证书名为wang,nopass表示不加密private key Note: using Easy-RSA configuration from: ./vars Generating a 2048 bit RSA private key .....................+++ ..................................................................................+++ writing new private key to '/etc/openvpn/client/easy-rsa/3.0.3/pki/private/wang.key.uNCOFOPeuf' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Common Name (eg: your user, host, or server name) [wang]: #回车(可以键入回车使用默认的,也可以手动更改 ) Keypair and certificate request completed. Your files are: req: /etc/openvpn/client/easy-rsa/3.0.3/pki/reqs/wang.req key: /etc/openvpn/client/easy-rsa/3.0.3/pki/private/wang.key
切换到生成server证书的目录
[root@check1 3.0.3]# pwd /etc/openvpn/easy-rsa/3.0.3
签约客户端证书
[root@check1 3.0.3]# ./easyrsa import-req /etc/openvpn/client/easy-rsa/3.0.3/pki/reqs/wang.req wang Note: using Easy-RSA configuration from: ./vars The request has been successfully imported with a short name of: wang You may now use this name to perform signing operations on this request. [root@check1 3.0.3]# ./easyrsa sign client wang Note: using Easy-RSA configuration from: ./vars You are about to sign the following certificate. Please check over the details shown below for accuracy. Note that this request has not been cryptographically verified. Please be sure it came from a trusted source or that you have verified the request checksum with the sender. Request subject, to be signed as a client certificate for 3650 days: subject= commonName = wang Type the word 'yes' to continue, or any other input to abort. Confirm request details: yes #输入yes 确认信息 Using configuration from ./openssl-1.0.cnf Enter pass phrase for /etc/openvpn/easy-rsa/3.0.3/pki/private/ca.key: #输入build-ca时设置的那个密码 Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows commonName :PRINTABLE:'wang' Certificate is to be certified until Oct 9 09:54:40 2028 GMT (3650 days) Write out database with 1 new entries Data Base Updated Certificate created at: /etc/openvpn/easy-rsa/3.0.3/pki/issued/wang.crt
注意:ca、server和client的Common Name最好不要设置为一样,我没有验证,不过网上有人说设置一样后,openvpn连接时会有问题
整理所需文件
服务端所需文件
[root@check1 ~]# mkdir /etc/openvpn/certs [root@check1 ~]# cd /etc/openvpn/certs/ [root@check1 certs]# cp /etc/openvpn/easy-rsa/3.0.3/pki/dh.pem ./ [root@check1 certs]# cp /etc/openvpn/easy-rsa/3.0.3/pki/ca.crt ./ [root@check1 certs]# cp /etc/openvpn/easy-rsa/3.0.3/pki/issued/server.crt ./ [root@check1 certs]# cp /etc/openvpn/easy-rsa/3.0.3/pki/private/server.key ./ [root@check1 certs]# ls ca.crt dh.pem server.crt server.key
客户端所需文件
[root@check1 certs]# mkdir /etc/openvpn/client/wang [root@check1 certs]# cp /etc/openvpn/easy-rsa/3.0.3/pki/ca.crt /etc/openvpn/client/wang/ [root@check1 certs]# cp /etc/openvpn/easy-rsa/3.0.3/pki/issued/wang.crt /etc/openvpn/client/wang/ [root@check1 certs]# cp /etc/openvpn/client/easy-rsa/3.0.3/pki/private/wang.key /etc/openvpn/client/wang/ [root@check1 certs]# ls ca.crt dh.pem server.crt server.key
更多./easyrsa参数使用 --help查看 参考:
https://github.com/OpenVPN/easy-rsa/blob/v3.0.5/README.quickstart.md
server配置文件
编辑服务器配置文件
[root@check1 ~]# vim /etc/openvpn/server.conf local 172.16.227.43 #定义openvpn监听的IP地址,如果是服务器单网卡的也可以不注明,但是服务器是多网卡的建议注明。 port 6666 #定义openvpn监听的的端口,默认为1194端口。 proto tcp #定义openvpn使用的协议,默认使用UDP。如果是生产环境的话,建议使用TCP协议。 dev tun #定义openvpn运行时使用哪一种模式,openvpn有两种运行模式一种是tap模式,一种是tun模式。 #tap模式也就是桥接模式,通过软件在系统中模拟出一个tap设备,该设备是一个二层设备,同时支持链路层协议。 ca /etc/openvpn/certs/ca.crt #定义openvpn使用的CA证书文件,该文件通过build-ca命令生成,CA证书主要用于验证客户证书的合法性。 cert /etc/openvpn/certs/server.crt #定义openvpn服务器端使用的证书文件。 key /etc/openvpn/certs/server.key #定义openvpn服务器端使用的秘钥文件,该文件必须严格控制其安全性。 dh /etc/openvpn/certs/dh.pem #定义Diffie hellman文件。 ifconfig-pool-persist /etc/openvpn/ipp.txt #定义客户端和虚拟ip地址之间的关系。特别是在openvpn重启时,再次连接的客户端将依然被分配和断开之前的IP地址。 server 10.8.0.2 255.255.255.0 #定义openvpn在使用tun路由模式时,分配给client端分配的IP地址段。 push "route 192.168.10.0 255.255.255.0" #向客户端推送的路由信息,假如客户端的IP地址为10.8.0.2,要访问192.168.10.0网段的话,使用这条命令就可以了。 client-config-dir /etc/openvpn/ccd #这条命令可以指定客户端IP地址。 #使用方法是在/etc/openvpn/创建ccd目录,然后创建在ccd目录下创建以客户端命名的文件。比如要设置客户端 wang为10.8.0.100这个IP地址,只要在 /etc/openvpn/ccd/wang文件中包含如下行即可: #ifconfig-push 10.8.0.100 10.8.0.101 前面的IP是给客户端的,后面的IP是服务端保留的,分配的地址都是30位掩码 push "redirect-gateway def1 bypass-dhcp" #此条开启后VPN将代理所有流量,建议不开,此条不开 以下两条也不用开 push "dhcp-option DNS 223.5.5.5" #向客户端推送DNS信息 push "dhcp-option DNS 223.6.6.6" client-to-client #使客户端之间能相互访问,默认设置下客户端间是不能相互访问的。 keepalive 20 120 #定义活动连接保时期限 comp-lzo #启用允许数据压缩,客户端配置文件也需要有这项。 #duplicate-cn #定义openvpn一个证书在同一时刻是否允许多个客户端接入,默认没有启用。 user openvpn #运行用户 group openvpn #运行组 persist-key #通过keepalive检测超时后,重新启动VPN,不重新读取keys,保留第一次使用的keys。 persist-tun #通过keepalive检测超时后,重新启动VPN,一直保持tun或者tap设备是linkup的。否则网络连接,会先linkdown然后再linkup。 status openvpn-status.log #把openvpn的一些状态信息写到文件中,比如客户端获得的IP地址。 log-append openvpn.log #记录日志,每次重新启动openvpn后追加原有的log信息。 verb 1 #设置日志记录冗长级别,日志级别0-9,等级越高,记录越多 mute 20 #重复日志记录限额
配置文件拷贝点这里
#自行更改10.10.10.10的IP local 10.10.10.10 port proto tcp dev tun ca /etc/openvpn/certs/ca.crt cert /etc/openvpn/certs/server.crt key /etc/openvpn/certs/server.key dh /etc/openvpn/certs/dh.pem ifconfig-pool-persist /etc/openvpn/ipp.txt server 10.10.10.10 255.255.255.0 push "route 10.10.10.10 255.255.255.0" # push "redirect-gateway def1 bypass-dhcp" # push "dhcp-option DNS 223.5.5.5" # push "dhcp-option DNS 223.6.6.6" client-to-client client-config-dir /etc/openvpn/ccd keepalive comp-lzo max-clients #duplicate-cn user openvpn group openvpn persist-key persist-tun status openvpn-status.log log-append openvpn.log verb mute
启动VPN
[root@check1 ~]# /etc/init.d/openvpn start Starting openvpn: [ OK ] [root@check1 ~]# netstat -anpt | grep openvpn tcp 0 0 172.16.227.43:6666 0.0.0.0:* LISTEN 9077/openvpn
开启内核数据包转发功能
echo 1 >/proc/sys/net/ipv4/ip_forward [root@Check3 certs]# head -1 /etc/sysctl.conf net.ipv4.ip_forward = 1 [root@Check3 certs]# sysctl -p [root@Check3 certs]# sysctl -a | grep ip_forward net.ipv4.ip_forward = 1 net.ipv4.ip_forward_use_pmtu = 0
配置iptables数据包转发
一般配置完成后客户端连接后和内网不通,因为没有配置iptables数据包NAT转发
一般先清空iptables策略,配置数据包转发后再添加其他策略(端口限制、IP限制等)
允许客户端ip 10.8.0.0/24网段的和内网通信
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
限制指定客户端IP只能访问指定服务器或服务(上面那条不存在的情况下配置此条策略)
限制客户端IP 10.8.0.6 只能访问内网172.16.206.78服务器
iptables -t nat -A POSTROUTING -s 10.8.0.6/30 -o eth0 -d 172.16.206.78 -j MASQUERADE
允许VPN客户端的IP访问指定IP指定端口
iptables -t nat -A POSTROUTING -s 192.168.60.204/30 -o eth0 -p tcp --dport 8080 -d 172.16.203.120 -j MASQUERADE -s 指定客户端IP ccd文件配置的静态IP -p 指定协议 --dport 指定访问目标端口 -d 指定访问IP地址
查看iptables规则以序号形式显示
iptables -t nat -L -n --line-number
删除序号为几的策略
iptables -t nat -D POSTROUTING 1
客户端配置
windows版
下载地址:https://www.techspot.com/downloads/5182-openvpn.html
我的客户端是windows 10
安装openvpn-install-2.4.6-I601 主程序 安装过程不多少,全部默认
安装后,将下面三个文件,拷贝到上面安装路径下的config目录中
[root@check1 wang]# ls ca.crt wang.crt wang.key [root@check1 wang]# pwd /etc/openvpn/client/wang
在config文件夹中创建sample.ovpn主配置文件
写入
client #指定这是一个客户端,我们将从服务器获取某些配置文件指令 dev tun #定义openvpn运行时使用哪一种模式,openvpn有两种运行模式一种是tap模式,一种是tun模式。这里和服务端一样 proto tcp #和服务端配置相同协议 # remote 服务端外网IP VPN端口 #如果有多个VPN服务器,为了实现负载均衡,你可以设置多个remote指令。 remote 47.97.14.62 6666 resolv-retry infinite #启用该指令,与服务器连接中断后将自动重新连接,这在网络不稳定的情况下(例如:笔记本电脑无线网络)非常有用。 nobind #大多数客户端不需要绑定本机特定的端口号 persist-key # 持久化选项可以尽量避免访问在重启时由于用户权限降低而无法访问的某些资源。 persist-tun ca ca.crt #服务器生成的三个客户端文件 cert wang.crt key wang.key ns-cert-type server # 指定通过检查证书的nsCertType字段是否为"server"来验证服务器端证书。 # 这是预防潜在攻击的一种重要措施。 # 为了使用该功能,你需要在生成服务器端证书时,将其中的nsCertType字段设为"server" # easy-rsa文件夹中的build-key-server脚本文件可以达到该目的。 comp-lzo # 在VPN连接中启用压缩。 # 该指令的启用/禁用应该与服务器端保持一致。 verb 3 # 设置日志文件冗余级别(0~9)。 # 0 表示静默运行,只记录致命错误。 # 4 表示合理的常规用法。 # 5 和 6 可以帮助调试连接错误。 # 9 表示极度冗余,输出非常详细的日志信息。
快捷复制:
client dev tun proto tcp remote resolv-retry infinite nobind persist-key persist-tun ca ca.crt cert wang.crt key wang.key ns-cert-type server comp-lzo verb
双击桌面图标OpenVPN GUI
connect连接即可
Linux版
安装:
yum -y install openvpn
将下面的三个文件拷贝到客户端/etc/openvpn目录中
[root@check1 wang]# ls ca.crt wang.crt wang.key [root@check1 wang]# pwd /etc/openvpn/client/wang
客户端配置如下:
[root@wcy openvpn]# pwd /etc/openvpn [root@wcy openvpn]# ls ca.crt wang.crt wang.key [root@wcy openvpn]# vim sample.conf client dev tun proto tcp remote 47.97.14.62 6666 resolv-retry infinite nobind persist-key persist-tun ca /etc/openvpn/ca.crt cert /etc/openvpn/wang.crt key /etc/openvpn/wang.key ns-cert-type server comp-lzo verb 3
启动VPN客户端 openvpn --config /etc/openvpn/client.conf
[root@wcy openvpn]# openvpn --config /etc/openvpn/sample.conf [root@wcy ~]# ps -ef | grep openvpn root 6260 6194 0 23:00 pts/0 00:00:00 openvpn --config /etc/openvpn/sample.conf root 6307 6291 0 23:02 pts/1 00:00:00 grep openvpn [root@wcy ~]# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:79:1b:0f brd ff:ff:ff:ff:ff:ff inet 192.168.233.10/24 brd 192.168.233.255 scope global eth0 inet6 fe80::20c:29ff:fe79:1b0f/64 scope link valid_lft forever preferred_lft forever 3: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 100 link/[65534] inet 192.168.10.6 peer 192.168.10.5/32 scope global tun0
OpenVpn部署使用easy-rsa-3.0的更多相关文章
- 基于daridus认证的openvpn部署
基于daridus认证的openvpn部署 安装openvpn 1.安装openvpn依赖包 #yum -y install gcc gcc-c++ #yum -y install openssl o ...
- openvpn部署
原文发表于cu:2016-03-29 参考文档: 安装:http://qicheng0211.blog.51cto.com/3958621/1575273 安装:http://www.ipython. ...
- _00024 尼娜抹微笑伊拉克_云计算ClouderaManager以及CHD5.1.0群集部署安装文档V1.0
笔者博文:妳那伊抹微笑 itdog8 地址链接 : http://www.itdog8.com(个人链接) 博客地址:http://blog.csdn.net/u012185296 博文标题:_000 ...
- 使用Advanced Installer 自动部署 Arcgis Engine Runtime 10.0
原文:使用Advanced Installer 自动部署 Arcgis Engine Runtime 10.0 目前采用Arcgis9.2 + c#(vs2008)作为程序开发平台,是一个不错的搭配. ...
- 在Ubuntu中部署并测试Fabric 1.0 Beta
[更新:1.0Beta已经是过去式了,现在出了1.0.0的正式版,请大家参照 http://www.cnblogs.com/studyzy/p/7437157.html 安装Fabric 1.0.0 ...
- 使用Linux、Nginx和Github Actions托管部署ASP.NET Core 6.0应用
使用Linux.Nginx和Github Actions托管部署ASP.NET Core 6.0应用 前言 本文主要参考微软这篇文档而来 Host ASP.NET Core on Linux with ...
- OpenVPN部署,实现访问云服务器的内网
本教程不描述如何FQ 一.OpenVPN服务端部署 $ yum -y install net-tools lzo lzo-devel openssl-devel pam-devel gcc gcc-c ...
- OpenVPN 部署
https://blog.frognew.com/2017/09/installing-openvpn.html#21-%E5%AE%89%E8%A3%85%E4%BE%9D%E8%B5%96 为了方 ...
- rails创建项目,部署,测试流程(rails5.0+ruby2.3.1)
rails new test_app --skip-test-unit 不生成默认的test,稍后用rspeccd test_app 修改Gemfile(大部分为自动生成) source 'https ...
随机推荐
- NYOJ 821 简单求值【简单题】
/* 解题人:lingnichong 解题时间:2014.10.18 00:46 解题体会:简单题 */ 简单求值 时间限制:1000 ms | 内存限制:65535 KB 难度:1 描写叙述 ...
- JVM难学?那是因为你没认真看完这篇文章(转)
一:虚拟机内存图解 JAVA程序运行与虚拟机之上,运行时需要内存空间.虚拟机执行JAVA程序的过程中会把它管理的内存划分为不同的数据区域方便管理. 虚拟机管理内存数据区域划分如下图: 数据区域分类: ...
- CentOS 7安装与配置jdk-8u162
一.下载jdk-8u162版本 jdk-8u162-linux-x64.rpm 二.上传jdk到centos下 上传完后的文件如下,文件只有读写权限,没有执行权限 使用如下命令授权,如果文件已经有了执 ...
- Spring配置dataSource的三种方式 数据库连接池
1.使用org.springframework.jdbc.dataSource.DriverManagerDataSource 说明:DriverManagerDataSource建立连接是只要有连接 ...
- 学习-go语言坑之for range
引用自 http://studygolang.com/articles/9701 go只提供了一种循环方式,即for循环,在使用时可以像c那样使用,也可以通过for range方式遍历容器类型如数组. ...
- 软件设计模式(Design pattern)(待续)
软件设计模式是在面向对象的系统设计过程中反复出现的问题解决方案. 设计模式通常描述了一组相互紧密作用的类与对象. 设计模式提供一种讨论软件设计的公共语言,使得熟练设计者的设计经验可以被初学者和其他设计 ...
- HDU3533(Escape)
不愧是kuangbin的搜索进阶,这题没灵感写起来好心酸 思路是预处理所有炮台射出的子弹,以此构造一个三维图(其中一维是时间) 预处理过程就相当于在图中增加了很多不可到达的墙,然后就是一个简单的bfs ...
- 解决----------“win10,不能打字了,已禁用IME”
登录Windows 10系统桌面后,右键点击左下角的开始菜单图标,然后在弹出菜单中选择“计算机管理”菜单项在打开的“计算机管理”窗口中,找到左侧系统工具下的“任务计划程序”菜单项点击任务计划程序前面的 ...
- Vulkan Tutorial 06 逻辑设备与队列
操作系统:Windows8.1 显卡:Nivida GTX965M 开发工具:Visual Studio 2017 Introduction 在选择要使用的物理设备之后,我们需要设置一个逻辑设备用于交 ...
- 基于minikube的kubernetes集群部署及Vitess最佳实践
简介 minikube是一个可以很容易在本地运行Kubernetes集群的工具, minikube在电脑上的虚拟机内运行单节点Kubernetes集群,可以很方便的供Kubernetes日常开发使用: ...