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 ...
随机推荐
- C语言必掌握知识点
个人总结,学c的赶快看 1-.++a 和 a++ 的差别: ++a 先加在赋值 a++ 先赋值在加 后者赋给变量b的值为a而不是a+1后的值 2-.按位与 同为1时为1,其 ...
- 自动更新本地 GIT 仓库
随着开源软件的兴起,尤其是 GITHUB 的蓬勃发展,很多开源软件都通过 GIT 进行管理,在我的计算机上就一个目录是我关注并使用的开源软件 GIT 本地副本,如何定期更新这些仓库,一个个的更新太累人 ...
- OpenvSwitch自动化重新编译和安装
相信使用过OpenvSwitch的人都知道,OpenvSwitch因为要替换一部分linux内核,所以在修改OpenvSwitch源码的时候,每次都需要重新编译和安装,这个过程十分的机械和枯燥,所以写 ...
- ural1297. Palindrome
1297. Palindrome Time limit: 1.0 secondMemory limit: 64 MB The “U.S. Robots” HQ has just received a ...
- iOS 程序切换后台
1. -(void)animationFinished:(NSString*)animationid finished:(NSNumber*)finished context:(void*)conte ...
- 爬虫实战【11】Python获取豆瓣热门电影信息
之前我们从猫眼获取过电影信息,而且利用分析ajax技术,获取过今日头条的街拍图片. 今天我们在豆瓣上获取一些热门电影的信息. 页面分析 首先,我们先来看一下豆瓣里面选电影的页面,我们默认选择热门电影, ...
- textarea 换行
这个是可以多行展示的Texat也就是DW设计模式下的多行 /*华丽的分割线==================================*/ 当你点击单行时你发现此时的标签换成了value=&q ...
- java倒序输出List
先贴代码 package com.tsubasa.collection; import java.util.ArrayList; import java.util.Arrays; import jav ...
- C#中Windows通用的回车转Tab方法
标签: windowsc#textboxbuttondropdownobject 2007-03-28 09:37 2773人阅读 评论(0) 收藏 举报 分类: C#(5) 版权声明:本文为博主 ...
- XML 解析之 dom4j 解析器
dom4j 的使用需要导入 jar 包, 包括: dom4j-1.6.1 和 jaxen-1.1-beta 步骤: 在项目目录下,"Folder" 创建一个 lib 文件夹 复制 ...