MENU

在Ubuntu上搭建OpenVPN

January 11, 2018 • Read: 450 • Services,Linux OS

**

该文是我撰写于老早以前了,可以看到文章的大体格式与现在完全不相同。某些地方整体也没有现在写的完善。当初因为迁移的一些原因,丢了数据库,导致这篇图特别多的文章一直没有再度发出来。这几天打算在树莓派上建个OpenVPN,想起来自己以前写过,又翻出了。抽了个空,就再将其发布出来了。

虽然格式与现在有点差距,但怎么说这也是记录从前写到现在的格式的大体的变化历程的一篇文章。可能头尾不完善,毕竟当初刚开始写的时候没有现在会废话。当时只注重了服务的安装过程,导致部分可能有点残缺感。怎么说还是有纪念意义的。

 

 

OpenVPN是一个免费开源自由度极高的VPN软件。有着多着加密方式,支持tcp,udp的数据包传输。目前能在多种Linux发行版上以及Windows、Android和IOS上运行服务端。和其他VPN软件不同的是,他它并不是一个基于Web的VPN软件,也不与IPsec及其他VPN软件包兼容。

From wikipedia (<https://zh.wikipedia.org/wiki/OpenVPN> )

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

 

 

【目录】

安装

制作证书

制作CA证书

制作Server证书

制作Client证书

配置文件

配置客户端

配置iptables NAT

 

在Ubuntu上搭建OpenVPN(16.04)

 

 *OpenVPN有着多种的加密方式,本次使用SSL(TLS)非对称加密。

 

安装

在Ubuntu上我们可以使用apt install与编译源码两种方式进行安装,此次只进行apt安装,如有其他需要可自行寻找源码编译的方式。

直接运行apt进行安装

apt install openvpn libssl-dev openssl -y

1.png/

 

安装完成后例行查看一下版本

openvpn --version

123.png/

(该版本为2.3.10)

 

OpenVPN安装完成之后,再进行安装用来制作证书的easy-rsa

apt install easy-rsa -y

2.png/

 

制作证书

CA证书

在经过几个简单的安装之后,可以开始使用easy-rsa进行制作所需要的证书了

首先/etc/openvpn/目录下创建一个easy-rsa/文件夹

3.png/

创建完成之后,我们将/usr/share/easy-rsa/目录下的所有文件copy到刚才所创建的文件夹下

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

1-1.png/

(注意权限)

 

*推荐直接使用root用户创建证书,可能会有一些其他问题

 

首先修改vars文件

export KEY_COUNTRY="CN"

export KEY_PROVINCE="HF"

export KEY_CITY="HeFei"

export KEY_ORG="xiaofeiyang"

export KEY_EMAIL="xiaofeiyang@xiao.com"

export KEY_OU="xiaofeiyang"

 

# X509 Subject Field

export KEY_NAME="vpnxiaofeiyang"

4.png/

*注意记下export KEY_NAME="vpnxiaofeiyang"的名称,制作Server证书时将会使用到

*同样vars文件可以使用默认配置,也就是不修改任何,也能够使用

修改完成之后,使用source vars命令使其生效

5.png/

*NOTE:在执行clean-all后命令将会删除当前目录下的keys文件夹。

 

生效之后,我们开始制作CA证书

.

./build-ca

6.png/

7.png/

制作时会进行确认,我们直接全部回车确认即可

确认之后,制作好的CA证书会放到当前的keys/文件夹下

8.png/

 

Server证书

我们所需要的CA证书已经制作完成,接下来就是制作Server端的证书了

直接在终端输入

*此处的vpnxiaofeiyang,就是我们在vars文件中写的export KEY_NAME

./build-key-server vpnxiaofeiyang

9.png/

和制作CA证书雷同,我们还需要确认,回车继续即可

10.png/

后续还将遇到两个请求,输入y即可

*分别为 证书的认证到期时间和证书的认证请求

全部确认之后,看到Data Base Update即制作完成

我们再次查看当前目录下的keys文件夹,Server所需要的证书已经存在于目录下

11.png/

 

制作Diffie-Hellman文件

Diffie-Hellman(https://zh.wikipedia.org/wiki/%E8%BF%AA%E8%8F%B2-%E8%B5%AB%E7%88%BE%E6%9B%BC%E5%AF%86%E9%91%B0%E4%BA%A4%E6%8F%9B)是用于双方交换公钥时的加密文件

 

同样直接输入

./build-dh

12.png/

输入过后如上图,稍微等待一会即可

 

等待完成之后,我们继续查看当前目录下的keys/文件夹

13.png/

只要出现了dh2048.pem 就证明Diffie-Hellman文件已经制作完成

到此Server端的证书已经制作完成

 

Client证书

server端的证书已经全部完成,接下来就继续为Client制作证书。

./build-key xiaofeiyang

*此处的xiaofeiyang是Client证书的名称 是可以自定义的。

14.png/

15.png/

除了名称,其他和制作Server证书几乎一样。

制作完成之后,例行查看一下keys/文件夹,Client所需要的证书也准备完毕

16.png/

 

配置Server端

到此位置,OpenVPN所需要的证书都已经制作的差不多。接下来就是配置OpenVPN了。

首先,需要将制作完成的证书放置到/etc/openvpn 目录下

我们所需要的分别是 ca.crt  dh2048.pem  vpnxiaofeiyang.crt  vpnxiaofeiyang.key  xiaofeiyang.crt  xiaofeiyang.key

17.png/

cp keys/ca.crt keys/dh2048.pem keys/vinxiaofeiyang.crt keys/vinxiaofeiyang.key keys/xiaofeiyang.crt keys/xiaofeiyang.key /etc/openvpn

18.png/

所有证书都准备完成之后,可以开始创建配置文件了。

由于配置文件较为复杂,我们直接从自带的模版里copy到/etc/openvpn目录下 进行需要的自定义修改。

cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn

19.png/

由于模版内的是.gz的归档文件,cp完成之后还需解压

*gzip -d意为解压完成之后删除源文件。

20.png/

 

解压完成之后,直接编辑server.conf

21.png/

首先修改OpenVPN监听的本地地址,修改为如下即可

22.png/

 

还可以根据自己需要修改监听的端口

23.png/

*默认为1194

 

对于协议上的选择建议使用tcp协议

24.png/

 

对于dev tap 和dev tun 的选择

dev tun会创建一个routed IP tunnel 也就是基于IP协议的通讯

dev tap会创建一个enternet tunnel 允许整个以太网的帧通过openvpn的隧道,可以提供非IP协议的支持

若是搭建一个基于互联网的openvpn,建议使用默认的dev tun。若是在以太网环境下使用,dev tap会是一个更好的选择。

25.png/

 

此处是填写上述我们生成的证书

26.png/

注意更换证书名称

27.png/

ca ca.crt

cert vpnxiaofeiyang.crt

key vpnxiaofeiyang.key  # This file should be kept secret

 

此处填写加密文件的文件名

28.png/

 

证书名称填写完成之后,再将此处去除注释,将Server端的路由与DNS推送至Client

29.png/

 

基本配置修改到此就可,配置文件中的其他内容均可不修改

与原来的配置文件相比,我们修改了:

一、监听的IP地址。

二、监听的端口。

三、使用的协议。

四、服务端使用的证书。

五、推送路由与DNS。

 

启动命令

systemctl start openvpn@server

systemctl enable openvpn@server

 

配置客户端

到此为止,Server都配置的差不多了,服务端全部启动正常无误后,便可以开始简单配置下客户端就可以使用了

OpenVpn GUI:

https://openvpn.net/index.php/download/community-downloads.html

 

本次我们使用Windows下的OpenVpn客户端

随后在自己的服务器上将刚才生成的Client证书、CA证书以及客户端配置文件模版copy到客户端下

*客户端配置文件模版:/usr/share/doc/openvpn/examples/sample-config-files/client.conf

*注意修改client.conf文件名为client.ovpn

下载并安装完成之后,打开OpenVpn的安装目录,寻找config文件夹

30.png/

将我们所copy下来的证书与配置文件放置于config文件夹内

31.png/

修改client.ovpn配置文件

#使用tcp协议

32.png/

#修改地址为自己的服务器地址与端口

33.png/

#填入所copy下来的Cenlit证书与CA证书

34.png/

将配置文件修改的差不多后,便可以启动客户端。

点击连接后,会弹出连接状态,稍等片刻;

35.png/

当托盘图标变成绿色时,就证明连接一切正常。

36.png/

随后便会弹出windows通知,提示如下

37.png/

 

配置Iptables转发

由于Openvpn是在服务器上新建个虚拟网卡(客户端同),所以连接完成之后还需要将虚拟网卡tun0与连接Internet的物理网卡eth0配置nat转发

38.png/

配置ipv4转发

echo 1 > /proc/sys/net/ipv4/ip_forward

配置tun0到eth0的源nat

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

保存iptables配置

iptables-save

全部完成之后,转发正常,客户机便可以通过openvpn连接Internet了

可以查看自己ip地址是否为服务器的Internet地址

39.png/

 

##特别鸣谢##

 

 


本文使用知识共享署名 - 非商业性使用 - 相同方式共享 4.0 国际许可协议许可
转载时请保留出处:《在Ubuntu上搭建OpenVPN》https://www.defectink.com/defect/688.html,蟹蟹∠( ᐛ 」∠)_.

Tags: None
Archives QR Code Tip
QR Code for this page
Tipping QR Code