简介

  在连接了不可信的网络环境后,让手机或者计算机安全的访问互联网,使用虚拟专用网络(Virtual Private Network,VPN)是一个解决办法。OpenVPN是一个SSL VPN完整解决方案,本教程将在ubuntu14.04上搭建OpenVPN,再在计算机、手机上连接。

材料

  ubuntu14.04系统,在root权限下操作。

第一步:安装配置OpenVPN服务

  这是在服务器端的完整操作。

OpenVPN配置: 

apt-get update

  安装OpenVPN 和 Easy-RSA:

apt-get install openvpn easy-rsa

  在/etc/openvpn目录中存放VPN服务器配置文件:

gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz > /etc/openvpn/server.conf

  编辑配置文件:

vim /etc/openvpn/server.conf

  做几处修改,文件打开是这样的:

 # Diffie hellman parameters.
 # Generate your own with:
 #   openssl dhparam -out dh1024.pem
 # Substitute   if you are using
 #  bit keys.
 dh dh1024.pem

  编辑第六行,将RSA秘钥的长度加倍:

dh dh2048.pem

  继续修改这个地方:

 # If enabled, this directive will configure
 # all clients to redirect their default
 # network gateway through the VPN, causing
 # all IP traffic such as web browsing and
 # and DNS lookups to go through the VPN
 # (The OpenVPN server machine may need to NAT
 # or bridge the TUN/TAP interface to the internet
 # in order for this to work properly).
 ;push "redirect-gateway def1 bypass-dhcp"

  将第九行的注释分号去掉:

push "redirect-gateway def1 bypass-dhcp"

  继续修改:

 # Certain Windows-specific network settings
 # can be pushed to clients, such as DNS
 # or WINS server addresses.  CAVEAT:
 # http://openvpn.net/faq.html#dhcpcaveats
 # The addresses below refer to the public
 # DNS servers provided by opendns.com.
 ;push "dhcp-option DNS 208.67.222.222"
 ;push "dhcp-option DNS 208.67.220.220"

  去掉7、8行的注释分号,服务器将此DNS推送给客户端:

 push "dhcp-option DNS 208.67.222.222"
 push "dhcp-option DNS 208.67.220.220"

  最后一处修改:

 # You can uncomment this out on
 # non-Windows systems.
 ;user nobody
 ;group nogroup

  将3、4行的注释分号去掉,将OpenVPN限制在nobody和nogroup中:

 user nobody
 group nogroup

  保存并退出:wq

转发:

  使能转发:

 > /proc/sys/net/ipv4/ip_forward

  编辑文件:

vim /etc/sysctl.conf

  看到:

 # Uncomment the next line to enable packet forwarding for IPv4
 #net.ipv4.ip_forward=

  取消2行注释:

 # Uncomment the next line to enable packet forwarding for IPv4
 net.ipv4.ip_forward=

  保存并退出:wq

简单防火墙(Uncomplicated Firewall,ufw)设置:

  ufw在ubuntu14.04中自带,首先放行SSH协议:

ufw allow ssh

  本教程使用OpenVPN的UDP模式,并且使用1194端口:

ufw allow /udp

  编辑转发策略:

vim /etc/default/ufw

  修改:

DEFAULT_FORWARD_POLICY="DROP"

  为:

DEFAULT_FORWARD_POLICY="ACCEPT"

  保存退出。接着在ufw转发中添加网络地址转换规则,编辑:

vim /etc/ufw/before.rules

  添加红色字体内容:

 #
 # rules.before
 #
 # Rules that should be run before the ufw command line added rules. Custom
 # rules should be added to one of these chains:
 #   ufw-before-input
 #   ufw-before-output
 #   ufw-before-forward
 #

11 # START OPENVPN RULES
12 # NAT table rules
13 *nat
14 :POSTROUTING ACCEPT [0:0]
15 # Allow traffic from OpenVPN client to eth0
16 -A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE
17 COMMIT
18 # END OPENVPN RULES

 # Don't delete these required lines, otherwise there will be errors
 *filter

  确定使能修改:

ufw enable

  成功后输出下面这条:

Firewall is active and enabled on system startup

  查看一下防火墙规则:

ufw status

  应该输出下面这些内容:

 Status: active

 To                         Action      From
 --                         ------      ----
                          ALLOW       Anywhere
 /udp                   ALLOW       Anywhere
  (v6)                    ALLOW       Anywhere (v6)
 /udp (v6)              ALLOW       Anywhere (v6)

第二步:生成certificate authority(CA)、服务器端证书、秘钥

  OpenVPN使用证书加密通信。

配置、生成CA:

  为OpenVPN建立CA、生成证书和秘钥。OpenVPN通过证书可支持双向认证,意味着在建立可信通信之前客户端必须验证服务器证书服务器必须验证客户端证书。使用Easy RSA:

cp -r /usr/share/easy-rsa/ /etc/openvpn

  新建一个保存秘钥的目录:

mkdir /etc/openvpn/easy-rsa/keys

  设置参数:

vim /etc/openvpn/easy-rsa/vars

  修改如下红色参数,变为自己的:

 export KEY_COUNTRY="US"
 export KEY_PROVINCE="TX"
 export KEY_CITY="Dallas"
 export KEY_ORG="My Company Name"
 export KEY_EMAIL="sammy@example.com"
 export KEY_OU="MYOrganizationalUnit"

  以及,将这个变量统一设置为server:

export KEY_NAME="server"

  生成迪菲赫尔曼(Diffie-Hellman)参数,需要花费一些时间:

openssl dhparam -out /etc/openvpn/dh2048.pem 

  进入Easy-RSA的目录:

cd /etc/openvpn/easy-rsa

  初始化PKI(Public Key Infrastructure)。注意第一个“.”,“./vars”之间有空格,第一个“.”代表本目录:

. ./vars

  有可能输出如下,不必在意,这是因为/keys中没有任何文件:

NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/keys

  现在清除工作空间目录,以及任何旧的秘钥或者示例秘钥:

./clean-all

  最后一个命令是建立CA,按回车跳过确认参数的步骤即可:

./build-ca

为服务器生成证书和秘钥:

  依然在/etc/openvpn/easy-rsa中,按回车跳过确认步骤:

./build-key-server server

  这次多了两个选项,依然按回车保持空即可:

 Please enter the following 'extra' attributes
 to be sent with your certificate request
 A challenge password []:
 An optional company name []:

  另外两个询问输入y:

 Sign the certificate? [y/n]
  out of  certificate requests certified, commit? [y/n]

  最后输出:

 Write out database with  new entries
 Data Base Updated

使用服务器端证书和秘钥:

  OpenVPN需要在目录/etc/openvpn中使用服务器的CA、证书、以及秘钥,复制过去即可:

cp /etc/openvpn/easy-rsa/keys/{server.crt,server.key,ca.crt} /etc/openvpn

  这时,OpenVPN服务器已经配置完成,开启并查看:

 service openvpn start
 service openvpn status

  状态输出:

VPN 'server' is running

第三步:生成客户端证书和秘钥

  到目前为止已经安装和配置好OpenVPN服务器,创建了CA,服务器证书和秘钥。在此,使用服务器CA来生成客户端证书秘钥,以保证客户端可以通过服务器的验证。这些客户端文件之后需要放置到客户端机器内。

创建秘钥和证书:

  连接到VPN的每个客户端都最好有其自己独特的证书和秘钥。不过所有客户端都公用一个证书和秘钥有时候也是可以的。

默认:OpenVPN不允许客户端使用相同的证书和秘钥同时连接服务器。(参见“/etc/openvpn/server.conf”中的“duplicate-cn”)

  为使得不同的设备同时连接VPN服务器,此步骤必须为所有的客户端都执行一遍。取不同的名字,例如client2,mi2,iPhoneX。为client1建立秘钥证书:

./build-key client1

  按回车执行参数确认,确认问题y。输出:

 Write out database with  new entries
 Data Base Updated

  client配置文件也需要复制到Easy-RSA目录中,在下载到不同客户端编辑配置文件时,这个可以当做模板。在客户端中,此文件后缀名需要由“client.conf”变为“client.ovpn”:

cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/easy-rsa/keys/client.ovpn

  为不同的客户端重复执行以上步骤,但是要将“client1”改为不同的名字。

将证书和秘钥复制到客户端设备:

  之前我们将客户端的证书和秘钥存在了OpenVPN服务器端的/etc/openvpn/easy-rsa/keys目录中,对于每一个客户端,我们需要将客户端证书秘钥配置文件模板下载到客户端机器中。例如client1设备需要证书和秘钥:

 /etc/openvpn/easy-rsa/keys/client1.crt
 /etc/openvpn/easy-rsa/keys/client1.key

  “ca.crt”和“client.ovpn”在每个客户端中使用相同的备份。注意“ca.crt”在不同的目录中:

 /etc/openvpn/easy-rsa/keys/client.ovpn
 /etc/openvpn/ca.crt

  至此下载如下四个文件到客户端机器中:

 client1.crt
 client1.key
 client.ovpn
 ca.crt

第四步:为客户端设备创建一个公用的OpenVPN配置文件

  管理客户端文件最简单的方式是使用统一配置文件(unified profile),由“client.ovpn”修改而成。我们将服务器搭载在腾讯云上,我们将“client.ovpn”名字修改为“qcloud.ovpn”,打开并修改为服务器ip:

 # The hostname/IP and port of the server.
 # You can have multiple remote entries
 # to load balance between the servers.
 remote my-server- 

  取消注释:

 # Downgrade privileges after initialization (non-Windows only)
 user nobody
 group nogroup

  注释:

 # SSL/TLS parms.
 # . . .
 #ca ca.crt
 #cert client.crt
 #key client.key

  粘贴ca.crt client1.crt client1.key的内容到qcloud.ovpn中,形成统一配置文档,使用了类基础XML语法风格:

 <ca>
 (insert ca.crt here)
 </ca>
 <cert>
 (insert client1.crt here)
 </cert>
 <key>
 (insert client1.key here)
 </key>

  粘贴之后:

 <ca>
 -----BEGIN CERTIFICATE-----
 . . .
 -----END CERTIFICATE-----
 </ca>

 <cert>
 Certificate:
 . . .
 -----END CERTIFICATE-----
 . . .
 -----END CERTIFICATE-----
 </cert>

 <key>
 -----BEGIN PRIVATE KEY-----
 . . .
 -----END PRIVATE KEY-----
 </key>

  保存并退出,现在client1设备的统一OpenVPN客户端配置文件就做好了。

第五步:安装客户配置文件

  现在我们可以利用qcloud.ovpn文件来登陆VPN服务器了。客户端支持Windows,Mac,Android,Linux。

  在Linux中

乔思祎 未完待续 2017年9月18日23:57:20

在ubuntu14.04上搭建OpenVPN服务的更多相关文章

  1. 在Ubuntu14.04上搭建自己的OpenVPN服务器并通过它上网

    背景 学校宿舍端口可以配置静态IP连校内网,也可以连到实验室的服务器:实验室的服务器可以连外网:但宿舍要连外网就要花钱买PPPoE账号了.作为壮哉我大计院的一员,本着发扬专(neng)业(sheng) ...

  2. ubuntu14.04上搭建android开发环境

    这几天心血来潮,想在ubuntu上写写android软件.所以就上网找些资料在ubuntu上搭建android环境.结果要么时不完整的,要么就是过时的. 所以我把我搭建android环境的过程写下了, ...

  3. Ubuntu14.04下搭建VPN服务 -pptp

    在Ubantu下采用PPTP搭建VPN,优点是配置简单快捷.本教程亲自测试,熟练了在新机器上5分钟搞定VPN. - - - - - - - - - - - - - - - - - - - - - - ...

  4. AWS ec2的ubuntu14.04上安装git服务

    http://imerc.xyz/2015/11/13/Ubuntu-14-04%E4%B8%8AGit%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%9A%84%E6%90%AD%E5 ...

  5. Ubuntu14.04下搭建VPN服务

    直接上步骤: 1.第一步需要安装PPTP,以用来提供VPN服务. sudo apt-get install pptpd 如果有问题的话比如提示找不到之类的,apt-get update 一下应该就可以 ...

  6. Ubuntu14.04上搭建FTP服务器

    Ubuntu上常用的Ftp服务器是vsFTPd.安装前检查下是否已经装好了.用 sudo service vsftpd restart,如果提示重启成功之类的信息,说明此服务器已经安装好了vsFTPd ...

  7. Ubuntu14.04上安装tftpd服务

    首先sudo apt-get install tftpd-hpa,  tftp-hpa 然后sudo vim /etc/default/tftpd-hpa 配置文件如下 TFTP_USERNAME=& ...

  8. 在 Ubuntu14.04 上搭建 Spark 2.3.1(latest version)

    搭建最新的 Spark 2.3.1 . 首先需要下载最新版 jdk .目前 2.3.1 需要 8.0 及其以上 jdk 才可以允许. 所以如果你没有 8.0  jdk 安装好了之后会报错.不要尝试安装 ...

  9. 【转】Linux(ubuntu14.04)上编译Android4.4源码的环境搭建及编译全过程

    原文网址:http://jileniao.net/linux-android-building.html sublime text让我伤心.本来很信任sublime text的自动保存功能,之前使用一 ...

随机推荐

  1. IntelliJ IDEA自定义类和方法注解模板

    现在Java开发主流工具应该是Intelij Idea 方便快捷. 本文将主要介绍如何用Intelij Idea配置类及方法的注释模板提高代码注释效率 1. 配置类注解模板 找到配置页面 File - ...

  2. Android中Tablayout设置下划线宽度 和 dp和px之间进行相互转换

    开发中遇到了一个问题,Tablayout设置下换线长度,看了点资料,分享给大家. 效果图:               直接贴代码(要在tabLayout添加完所有的tab后调用) public vo ...

  3. Java网络编程和NIO详解1:JAVA 中原生的 socket 通信机制

    Java网络编程和NIO详解1:JAVA 中原生的 socket 通信机制 JAVA 中原生的 socket 通信机制 摘要:本文属于原创,欢迎转载,转载请保留出处:https://github.co ...

  4. UVA-129 Krypton Factor(回溯)

    题目大意:由字母A到Z组成的字符串,其中有两个子串完全相同的叫做容易的串,反之叫困难的串.找出由前L个字母组成的第n个困难的串. 题目分析:简单回溯,不过要判断是否存在重复子串比较棘手.<入门经 ...

  5. IOS-网络(小文件下载)

    // // ViewController.m // IOS_0131_小文件下载 // // Created by ma c on 16/1/31. // Copyright © 2016年 博文科技 ...

  6. xtrabackup备份之增量备份(二)

    测试了差不多一周的xtrabackup,本篇主要聊一下xtrabackup的增量备份.我一开始不是很了解,为什么每周都需要做全备份,每天都需要做增量备份,现在想想这个和技术无关.但是有一个新问题,如果 ...

  7. BZOJ1228 [SDOI2009]E&D

    蒟蒻不会= = 话说写题解的巨巨也只会打表233 反正先A掉再说 /************************************************************** Pro ...

  8. 利用Sonar定制自定义JS扫描规则(三)——SSLR JavaScript Toolkit 使用说明

    在上一篇blog中讲了在sonar中如何新增自定义的JS规则,这里面比较难的地方是XPath语句的编写,而要编写正确的XPath语句,首先要拿到语法的AST,下面我们就来介绍如何使用SSLR Java ...

  9. 移动端rem布局雪碧图解决方案 以及分享腾讯团队的在线雪碧图工具

    先分享一下地址:http://alloyteam.github.io/gopng/ 使用的方法也很简单,将需要的小图标拖进去,全部拖进去后再调位置(每拖一个进去都会帮你排列好,但是没有间隔,所以全部拖 ...

  10. Qt flash_eraseall nandwrite 进度条显示擦除、烧录

    /***************************************************************************** * Qt flash_eraseall n ...