飞跃绝境长城之openVPN的搭建

原创 2017年09月13日 09:47:03

《冰与火之歌》中有一道绝境长成保护着七国子民。我们也有一道绝境长成,给我们打造良好健康的信息环境。

不过我们程序员想用github快一点,google查询资料全一点,怎么破?我今天将把走出绝境长成的地图交给你们。

记得收藏保存,万一被删了呢。

免费方案

用的最多的就是蓝灯,下载地址:https://github.com/getlantern/forum

另外还有个集合大全:https://github.com/bannedbook/fanqiang/wiki

下面开始我要开始进行openvpn的翻墙技术交流了,通过 openvpn 实现的穿越长城。

OpenVPN

OpenVPN 是一个用于创建虚拟专用网络加密通道的软件包,最早由James Yonan编写。OpenVPN允许创建的VPN使用公开密钥、电子证书、或者用户名/密码来进行身份验证。

它大量使用了OpenSSL加密库中的SSLv3/TLSv1协议函数库。

OpenVPN 实现翻墙的原理是它虚拟了一张网卡,客户端所有的请求通过这张网卡的包装进行重新的请求与接受。从而完成翻墙。下面来看具体的操作。

安装 OpenVPN

为了详细说明每一个软件的安装原因,我将会按照依次顺序进行,每一个可能的错误尽可能展示。

安装的环境:
- CentOS: 6.8 64位
- 1核 1G内存
- 服务器位置:香港

下载:

wget https://swupdate.openvpn.org/community/releases/openvpn-2.4.3.tar.gz

解压:

tar -zxvf openvpn-2.4.3.tar.gz && cd openvpn-2.4.3

生成Makefile,为编译做准备:

./configure --prefix=/usr/local/openvpn

第一个报错:

checking for SSL_CTX_new… no

configure: error: openssl check failed

错误原因: 没有 openssl 服务,安装: yum install openssl openssl-devel -y

第二次执行: ./configure --prefix=/usr/local/openvpn

第二个报错:

configure: error: lzo enabled but missing

因为 openvpn 会用到 lzo 压缩算法。安装:yum install lzo lzo-devel -y

第三次执行:./configure --prefix=/usr/local/openvpn

第三个报错:

configure: error: libpam required but missing

根据提示安装 yum install pam pam-devel -y

再次执行:./configure --prefix=/usr/local/openvpn

成功运行,生成了编译需要的 Makefile,进行编译安装

make && make install

备注:在安装 openall lzo pam 的时候,我们同时安装了 *-devel 包。该包是开发库,一般编译软件的时候都需要。大家也可以试试看不安装是否报错,报错的时候在装上去

加密证书生成

为了确保数据交互的安全,在客户端与服务端交互时,需要进行加密,签名等操作。在进行这一步前我们需要生成供客户端、服务端使用的相关证书。证书生成工具 easy-rsa

准备工作:

git clone https://github.com/OpenVPN/easy-rsa.git
cd /easy-rsa/easyrsa3/
cp vars.example vars

然后修改以下信息,主要是跟自己组织相关的信息,自己随意改

vim vars

// 这些组织信息,根据自己的实际情况进行修改
set_var EASYRSA_REQ_COUNTRY     "CN"
set_var EASYRSA_REQ_PROVINCE    "Beijing"
set_var EASYRSA_REQ_CITY        "Zhao Yang"
set_var EASYRSA_REQ_ORG "Ai Zhong Guo"
set_var EASYRSA_REQ_EMAIL       "foo@aiguo.com"
set_var EASYRSA_REQ_OU          "aiguo Openvpn"

创建 ca 证书

./easyrsa init-pki
./easyrsa build-ca

这个过程需要输入密码,与 ca 证书的名称; 请记住这个密码,后面签名服务端与客户端密钥的时候需要。
假设我这里是:
- 名称: aiguoca
- 密码:123456

创建服务端证书

./easyrsa gen-req server-aiguo nopass

又需要一个名字,不能跟之前的ca冲突: aiguoserver

对服务端证书签名

./easyrsa sign server server-aliguo

根据提示输入:yes 以及ca证书的密码:123456

创建Diffie-Hellman证书

该证书主要作用是确保共享KEY安全穿越不安全网络

./easyrsa gen-dh

这一步时间有点久。可以倒杯水在过来继续

创建客户端证书
有的教程这里又 init 了一个 pki环境。其实完全没有必要。直接继续在原先的基础上继续即可。

跟着我的姿势继续往下

./easyrsa gen-req client-aiguo nopass

客户端创建证书的命令是不是跟服务端创建命令很像?仅仅是取了个不同名字。当然名字还是不要跟上面用过的名字冲突就好: aiguoclient

紧接着对它签名,步骤跟服务端一样。

./easyrsa sign client client-ssl

这里需要注意呃,签名的 sign 后面 server 换成了 client 。也正是基于此,才能够知晓那个是服务端证书,那个是客户端证书。签名过程中还是需要输入 yes 以及ca证书的密码 123456

至此证书生成完毕。现在开始相关配置。

OpenVPN 服务端配置

准备工作已经搞定,现在来做服务端的配置,以及让他运行起来。

由于我们是通过编译安装的,在 /etc/ 下面并没有 openvpn 这个目录。手动创建该目录。

mkdir /etc/openvpn/

拷贝 openvpn 提供的样板配置文件进去
cp sample-config-files/server.conf /etc/openvpn/

然后把服务端需要的证书,也全部拷贝进去
cp pki/ca.crt pki/issued/server-aiguo.crt pki/private/server-aiguo.key pki/dh.pemy /etc/openvpn/
这里千万不要选错了目录。

ll /etc/openvpn/ 

# 完成后,该目录有以下文件
-rw------- 1 root root  1159 Sep  7 13:27 ca.crt
-rw-r--r-- 1 root root 10782 Sep  7 13:25 server.conf
-rw------- 1 root root  4547 Sep  7 13:27 server-aiguo.crt
-rw------- 1 root root  1708 Sep  7 13:27 server-aiguo.key

server.conf 文件的配置

该文件配置项含义中文翻译,看这里: https://my.oschina.net/liucao/blog/863112

这里只讲诉几个关键配置。其他未说明的默认即可。
首先修改协议,建议使用 tcp 协议。网络上讲 udp 在高延时的情况下会存在很多丢包现象。

配置证书路径:

ca /etc/openvpn/ca.crt
cert /etc/openvpn/server-ssl.crt
key /etc/openvpn/server-ssl.key
dh /etc/openvpn/dh.pem

这里的文件路径,自己根据实际情况调整

注释掉: ;tls-auth ta.key 0 。因为我们并没有生存该key文件。

打开 comp-lzo 压缩

日志开启到 verb 6 ,方便后续调试

;explicit-exit-notify 1 注释掉,仅有 udp 才可使用

设置dns

push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"

打开 duplicate-cn 项,默认是关闭状态。

注释 explicit-exit-notify 1 默认是关闭。

到这一步,配置全部完成。保存退出。

启动服务端

先检查一下,可以在前台运行 openvpn 服务,检查错误以及调试:

/usr/local/openvpn/sbin/openvpn --config /etc/openvpn/server.conf

以守护进行运行的命令

/usr/local/openvpn/sbin/openvpn --daemon --config /etc/openvpn/server.conf

这里两个命令的使用,是因为以下原因:
- 本教程安装路径是 /usr/local/openvpn
- 本教程配置都是放在 /etc/openvpn 中。

情况不同者,根据实际情况设置即可

防火墙与路由转发

!!!如果你用的是 CentOS7 以上的操作系统,下面部分不适合你

首先关闭SELinux:SELINUX=disabled

配置防火墙,准许 1194 端口通过,如果你修改了默认端口,这里记得修改

iptables -I INPUT -p tcp --dport 1194 -m comment --comment "openvpn" -j ACCEPT

允许vpn客户端所在网段流量转发到其它网卡

-I FORWARD -s 10.8.0.0/24 -j ACCEPT

将 vpn 流量转到eth0网卡上

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j  MASQUERADE

保存配置结果

/etc/init.d/iptables save

开启路由转发

sed -i '/net.ipv4.ip_forward/s/0/1/' /etc/sysctl.conf
sysctl -p

sysctl -p 是查看修改后的结果,如果你看到 net.ipv4.ip_forward = 1 ,说明配置正确

至此,服务器上的事情,全部搞定。下面列举一个android手机客户端的配置。其它端也是大同小异。

客户端 Android 的配置

当我们有了服务端,它已经可以进行工作了,如果再有一个客户端,那就能够天下我有了。这里就仅以android为代表说明一下客户端配置,其它端大同小异。

下载开源的android客户端

https://f-droid.org/repo/de.blinkt.openvpn_153.apk

客户端的主要作用,就是用来连接上我们的服务器。

将服务器上面的客户端证书拷贝到本地,我选用的是scp。任何能够完成该项任务的手段都可以。

scp root@192.168.11.11:/home/easy-rsa/easyrsa3/pki/private/client-aiguo.key ./
scp root@192.168.11.11:/home/easy-rsa/easyrsa3/pki/issued/client-aiguo.key ./
scp root@192.168.11.11:/home/easy-rsa/easyrsa3/pki/ca.crt ./

唯一需要注意的是,不要搞错了文件路径,这个路径根据每个人设置是不同的,不要完全进行拷贝。

在完成上面步骤后,可以通过qq或者手机助手之类的,将文件发送到自己的手机,请记得文件路径位置。下面会用到。

打开客户端app,新建一个配置文件。名字任意取(最好别用中文)。下面开始说需要配置的项目,未提到的项目默认即可,不需要设置。

BASIC 项目配置

image

注意图中标红的地方。类型一定要选择 用户名/密码 + 证书 的类型。

  • ca证书 找到刚刚拷贝到手机上的 ca.crt 文件
  • 客户端证书 找到刚刚拷贝到手机上的 client-aiguo.crt 文件
  • 客户端证书密钥 找到刚刚拷贝到手机上的 client-aiguo.crt 文件

另外,这里一定要启用 lzo 压缩算法。

在底部的用户与密钥。用户随便填写接口,密码留空(在本教程中,我们没有为用户分配用户名与密码,因此可以这样操作)

服务器列表 项目配置

image

这一比较简单,主要就是两个配置。其一是:
服务器的地址,填写你购买的服务器外网地址。端口如果没有修改过,请默认

其二是将协议修改为:tcp

AUTHENTICATION/ENCRYPTION 项目配置

该项配置很简单,将默认所有打勾的选项,全部取消即可。


至此,配置全部完成,篇幅虽然长,但是并没有什么难点。现在可以回到首页,你会看到刚配置的文件名称,点击它即可连接。

本教程的目的仅仅是技术交流,希望大家翻跃长城后技术实力更上一层楼。


如果你对我的内容感兴趣,请关注我的微信公众号:

公众号:icanfo

image

GitHub:https://github.com/helei112g

我在github开源了支付宝支付、微信支付、招商一网通支付的php sdk。希望能够帮助你提升项目开发的效率。项目地址

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

centos6.5下搭建openvpn服务,访问内网服务器

1 简介     VPN(Virtual Private Network)直译就是虚拟专用通道,是提供给企业之间或者个人与公司之间安全数据传输的隧道。     OpenVPN无疑是Linux下...
  • LLQ_200
  • LLQ_200
  • 2017年07月11日 16:16
  • 591

关于在Windows搭建OpenVPN的详细过程

OpenVPN虚拟专用网安装与部署 1、介绍    虚拟专用网VPN(virt ual private network)是在公共网络中建立的安全网络连接,这个网络连接和普通意义上的网络连接...

centos7搭建openvpn服务器

转载:http://blog.csdn.net/skykingf/article/details/50611061 这篇文章描述了如何在CentOS 7 服务器上安装与配置OpenVPN服务器,以及如...

windows下利用OpenVPN搭建VPN服务器

一、OpenVPN是一款功能强大,可跨平台(支持Win 2000/XP/2003, Linux, Mac OS X, Solaris, FreeBSD, NetBSD, 和 OpenBSD)使用的SS...

OpenVPN 安装、配置客户端和服务端,以及OpenVPN的使用 (Windows 平台)

OpenVPN 开源,好用,而且免费,感谢 OpenVPN 团队开发此产品。   简介 OpenVPN允许参与创建VPN的单点使用公开密钥、电子证书、或者用户名/密码来进行身份验证。它大量使用了Ope...
  • joyous
  • joyous
  • 2012年09月30日 15:37
  • 239272

Android系统下安装openVPN流程

Android系统下安装openVPN流程

windows下利用OpenVPN搭建VPN服务器

一、OpenVPN是一款功能强大,可跨平台(支持Win 2000/XP/2003, Linux, Mac OS X, Solaris, FreeBSD, NetBSD, 和 OpenBSD)使用的SS...
  • wangkjs
  • wangkjs
  • 2016年02月01日 16:29
  • 1446

安装OpenVPN报错:lzo enabled but missing

configure: error: lzo enabled but missing 需要手工安装lzo,yum安装的无效 # wget http://www.oberhumer.com/op...

安装OpenVPN报错:lzo enabled but missing

configure: error: lzo enabled but missing需要手工安装lzo,yum安装的无效# wget http://www.oberhumer.com/opensourc...

php获取阳历日期的农历类

/* * 农历 节气 节日 */ class Lunar { var $MIN_YEAR = 1891; var $MAX_YEAR = 2100; var $lunarInfo =...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:飞跃绝境长城之openVPN的搭建
举报原因:
原因补充:

(最多只允许输入30个字)