背景

学校宿舍端口可以配置静态IP连校内网,也可以连到实验室的服务器;实验室的服务器可以连外网;但宿舍要连外网就要花钱买PPPoE账号了。作为壮哉我大计院的一员,本着发扬专(neng)业(sheng)精(jiu)神(sheng)的原则,决定自己动手“引网入室”,省钱且网速又快,岂不美哉?

准备工作

1. EasyRSA 2.x  用于生成密钥。注意3.x与2.x差异极大,不适用本文,下载时请认准2.x。

2. OpenVPN  Windows/Linux上的VPN软件,既可做服务器端又可做客户端。

3. Tunnelblick MacOS客户端,官方网站下载最新稳定版。

4. OpenVPN for Android  Android客户端。选择latest stable即可。

iOS不了解,相信有更好的VPN客户端可供选择。

总体流程

安装OpenVPN => 生成密钥 => 配置server-conf => 配置路由转发规则 => 配置客户端=> 愉快地上网!

具体步骤

Step 1  安装OpenVPN

服务器端(Ubuntu14.04):sudo apt-get openvpn 走起!虽然版本可能不是最新,但是能用就行,比自己下载编译安装省事多了。

Windows、Android、MacOS客户端的安装,就不消说了吧,常规安装包……

Step 2  生成密钥

将下载的EasyRSA包解压,cd进入,然后输入

vi vars

按自己的喜好修改如下部分:

set KEY_COUNTRY=CN 【国家】
set KEY_PROVINCE=SiChuan 【省份】
set KEY_CITY=ChengDu 【城市】
set KEY_ORG=University 【组织名】
set KEY_EMAIL=xxxxxxx@gmail.com 【邮箱】

随后输入命令

source ./vars

提示执行./clean-all将删除keys下的文件,也就是旧的证书、密钥等。执行之:

./clean-all

接下来生成一系列证书和密钥,都在keys/目录下。

1.执行

./build-ca

生成ca.crt证书文件

2.执行

./build-key-server server

生成server.crt、server.csr、server.key三个文件,是服务器端的证书和密钥。

3. 执行
./build-dh

生成一个dh1024.pem或dh2048.pem文件。

4. 执行

./build-key client

生成client.crt、client.csr、client.key三个文件,是客户端的证书和密钥。

[5]. 为了进一步加强传输加密,建议开启TSL扩展,因此输入

openvpn --genkey --secret keys/ta.key

生成一个ta.key文件。

最后,在/etc目录下创建一个名为openvpn的目录,把ca.crt三个server.*文件dh1024.pem(或2048)ta.key这6个文件复制到/etc/openvpn目录下。

Step 3  配置server-conf

客户端的安装目录下,有一个sample子目录,把里面的server.conf(不同版本的目录结构略有区别,但肯定能找到这个文件)复制到服务器上/etc/openvpn目录下,然后sudo vi打开,将如下选项行首的分号去掉,并根据实际情况作相应修改,其他选项保持默认即可:

local 192.168.4.112 #填写本地IP地址

port 1194 #监听端口号

proto udp #采用UDP协议;根据代理服务器的协议而定,若HTTP proxy,则使用TCP协议

;dev tap #基于桥接的隧道

dev tun #基于路由的隧道

ca ca.crt&nbsp#证书文件路径

cert server.crt#服务器证书路径

server.key #服务器私有密钥路径

dh dh1024.pem #加密文件路径

push "route 0.0.0.0 0.0.0.0" #作用不详,就这样设置吧

push "redirect-gateway def1 bypass-dhcp" # 允许客户端重定向穿越VPN到外网

push "dhcp-option DNS 202.120.222.1" # 配置主要和备用DNS地址

push "dhcp-option DNS 8.8.8.8"

duplicate-cn #允许同一个证书和密钥在多个客户端登录,以便手机电脑能同时上网

tls-auth ta.key 0 #TLS密钥文件

server 10.8.0.0 255.255.255.0 #指定VPN子网段,10.8.0.1为服务端IP,其余分配给客户端

配置完成后,就可以启动服务了,输入命令

openvpn --daemon --config /etc/openvpn/server.conf

检测服务端是否已开启:
netstat –ln

若检测未开启服务,则说明服务端配置参数有误,去掉–daemon运行参数,执行:
openvpn –config /etc/openvpn/server.conf

即可看到运行的错误提示信息,根据信息更改server.conf文件
若成功运行,执行ifconfig命令会多出一个tun0,即VPN的虚拟网卡。

Step 4  配置路由转发规则

这一步比较简单,新建一个iptables-init.sh文件,将下列代码粘贴进去并保存:

iptables -t nat -A POSTROUTING -s  -o eth0 -j MASQUERADE
iptables -A INPUT -i lo -p all -j ACCEPT
iptables -A INPUT -p all -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i tun+ -j ACCEPT
iptables -A FORWARD -i tun+ -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport  -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport  -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport  -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport  -j ACCEPT
iptables -A INPUT -p udp --dport  -j ACCEPT
iptables -A INPUT -s  -p all -j ACCEPT
iptables -A FORWARD -d  -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport  -j ACCEPT

然后执行之即可。这里要注意一下第一行,博主的服务器上主网卡名不叫eth0,而是em1,因此做了相应的修改。输入ifconfig即可看到本机的情况。

Step 5  配置客户端

这一步需要把ca.crtclient.crtclient.key以及ta.key这四个文件复制到客户端。

Windows

首先,把上述四个文件复制到OpenVPN安装目录的config子目录下;

随后,把sample里的client.ovpn复制到config子目录下,然后设置下列项:

client #指明这是客户端

dev tun #基于路由的隧道

proto udp #采用UDP协议

remote 192.168.4.112 1194 #服务端IP及端口号

ca ca.crt #证书及密钥们

cert client.crt

key client.key

nobind #客户端不绑定特定端口

remote-cert-tls server #TLS加密

tls-auth ta.key 1 #TLS密钥,1表示客户端

redirect-gateway def1 #使客户端中所有流量经过VPN

就算大功告成了,打开OpenVPN,右击任务栏的小图标,点connect即可连服务器。

Mac OS端

Mac电脑上使用的客户端是Tunnelblick,配置方式也很简单。

首先,去官方网站下载最新稳定版并安装(笔者所用的版本是 3.7.0_build_4790);

随后,创建一个文件夹,譬如命名为VPNconfig,把.ovpn文件连同四个证书/密钥文件都放进去,.ovpn配置内容与Windows一样;

接下来,把文件夹重命名为以.tblk结尾,形如VPNconfig.tblk,于是文件夹变成了一个单一文件(包)。双击之,便导入了Tunnelblick中;

最后在Tunnelblick的小图标上右击点击“连接VPNconfig”(或者进入程序主界面点击“连接”),这样就可以连接服务器上网啦!

Android客户端

安卓上用的客户端是OpenVPN for Android,要稍微麻烦些,因为可能是程序的bug,无法直接导入ovpn或conf配置文件,所以要自己创建一个。笔者版本号是0.6.65,不同版本界面略有差别,但大同小异。

首先,把客户端需要的证书、密钥都拷贝到手机上任意一个好找的文件夹下。

随后,在OpenVPN界面,点击圆圈里一个+号的符号,输入client.conf,点击“确定”,开始创建配置文件。

接下来你会看到几个选项卡,依次说明:

BASIC

是否启用了LZO压缩算法根据实际情况设置,按本文是没有启用的,所以不要勾选。

Type选择“证书”,CA Certificate选择ca.crt,Client Certificate选择client.crt,Client Certificate Key……你猜对了,client.key。

服务器列表

当然是填服务器的IP地址和端口号(本文为1194)。

IP AND DNS

把“无本地绑定”和“Override DNS Settings by Server"勾上,下面清空searchDomain,并自己填写DNS服务器地址。

AUTHENTICATION/ENCRYPTION

勾选“需要TLS服务器证书”,去掉“证书主机名检查”,打开"Use TLS Authentication",下面的TLS Auth File选择ta.key文件,加密算法写“AES-256-CBC"

其他选项卡保持默认配置。

Done。点一下返回键,你会看到首页多了一个client.ovpn栏,点击就开始连接服务器了~

开始愉快的上网吧!

在Ubuntu14.04上搭建自己的OpenVPN服务器并通过它上网的更多相关文章

  1. 在ubuntu14.04上搭建OpenVPN服务

    简介 在连接了不可信的网络环境后,让手机或者计算机安全的访问互联网,使用虚拟专用网络(Virtual Private Network,VPN)是一个解决办法.OpenVPN是一个SSL VPN完整解决 ...

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

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

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

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

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

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

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

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

  6. ubuntu14.04上实现faster rcnn_TF的demo程序及训练过程

    安装环境:Ubuntu14.04.显卡Tesla K40C+GeForce GT 705.tensorflow1.0.0.pycharm5.0 说明:原文见博客园,有问题原文下留言,不定期回复.本文作 ...

  7. ubuntu14.04下搭建python+mysql环境

    简略记录ubuntu14.04下搭建python操作的mysql服务器的过程和其中遇到的问题及解决方法. 第一部分: 安装mysql 安装步骤:1. sudo apt-get install mysq ...

  8. [译]How to Install Node.js on Ubuntu 14.04 如何在ubuntu14.04上安装node.js

    原文链接为 http://www.hostingadvice.com/how-to/install-nodejs-ubuntu-14-04/ 由作者Jacob Nicholson 发表于October ...

  9. Ubuntu14.04上安装pip的方法

    在Ubuntu14.04上,建议通过下面的方法安装,这是一种通用的方法,也适用于Windows,当然在Windows下 手动下载下来就行了 wget https://bootstrap.pypa.io ...

随机推荐

  1. 使用Dagger2做静态注入, 对比Guice.

    Dagger 依赖注入的诉求, 这边就不重复描述了, 在上文Spring以及Guice的IOC文档中都有提及, 既然有了Guice, Google为啥还要搞个Dagger2出来重复造轮子呢? 因为使用 ...

  2. python glob fnmatch 用于文件查找操作

    參考: http://python.jobbole.com/81552/:Python模块学习:glob文件路径查找 http://blog.csdn.net/suiyunonghen/article ...

  3. Property list types and their various representations

    iOS下Property list能够存储的数据类型  Property list types and their various representations  Abstract type XML ...

  4. String 经常用法最优算法实现总结 (二)

    1. String getOrderedString(boolean isDuplicated, String - str) 说明: Orders all characters in the inpu ...

  5. NYOJ15-括号匹配(二)-区间DP

    pid=15">http://acm.nyist.net/JudgeOnline/problem.php? pid=15 dp[i][j]表示从i到j至少须要加入多少个括号才干满足匹配 ...

  6. 为 NativeScript 项目添加 iOS / Android 平台 API 的智能感知

    使用 NativeScript ,我们可以很容易的调用平台的原生 API,在开发过程中,我们可以添加这些 API 的 d.ts 文件来提供智能感知,帮助我们更方便的构建媲美原生的 APP. 首先通过 ...

  7. 【SqlServer系列】语法定义符号解析

    1   概述 在数据库函数定义中,经常用到这些符号:<>,::=,[],{},|,..,(),!!   .这篇文章简要概述这些符号. 2   具体内容 2.1  <> < ...

  8. ME01:猎场中猎头的内核

    前几天追了下<猎场>,只看了前面10多集,觉得下面的对话有点意思. 是关于猎头是干什么的? 猎头具备的素质. 对我们普通人是不是也有启发意义呢? 如何看人, 找到靠谱的合作人?找打好的老板 ...

  9. 解决 ASP.NET Core MySql varchar 字符串截取(长度 255)

    ASP.NET Core 中使用 MySql,如果字段类型为varchar,不管设置多少长度,插入或更新数据的时候,会自动截断(截取 255 长度的字符). 出现问题的原因,就是使用了MySql.Da ...

  10. 《程序设计语言——实践之路【PDF】下载

    <程序设计语言--实践之路[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382240 内容简介 <程序设计语言--实践之路(第3版 ...