Linux 搭建OpenVPN服务器和客户端
Linux 搭建OpenVPN服务器和客户端
ZhangCurryLinux 搭建OpenVPN服务器和客户端
项目需要能够远程控制树莓派。说到远程控制,肯定想到ssh。但是呢,树莓派是用3G流量上网的,分配到的是内网IP地址。那么如何让另一个设备能够连接到处于内网的设备呢?我想到了VPN。在VPN中,所有设备都好像在一个局域网中,如果服务器适当配置一下,那么VPN客户端之间就能互相访问。
VPN有很多种,包括PPTP、IPSec、OpenVPN等等。PPTP的数据包特征太明显,在国内的网络环境中很可能直接被拦截掉了。另外,由于树莓派使用的是3G流量,其链路可能功能有限,IPSec使用的是Cisco自己设计的协议,可能会被丢弃(未考证)。综合考虑,还是OpenVPN功能最强大,因为它是基于TCP或者UDP的,而且数据包特征不太明显,另外可配置项也很多。
OpenVPN的配置还是比较复杂的,尤其是对于新手而言,如果一开始上来就是什么创建证书、公钥、密钥,会很打击信心。所以我决定先来一个最最简单的版本,然后循序渐进。
=================阶段一:服务器端最简配置===============
一、下载OpenVPN:
1 | sudo apt-get install openvpn |
二、证书、公钥、密钥和Diffie-Hellman参数 :
OpenVPN服务器需要四个文件ca.crt、server.crt、server.key和dh1024.pem。这四个文件都与加密有关,具体含义我至今不太清楚。。。OpenVPN自带了示例文件。这四个文件分别可以如下获得:
ca.crt:
1 | sudo cp /usr/share/doc/openvpn/examples/sample-keys/ca.crt /etc/openvpn |
server.crt:
1 | sudo gunzip -c /usr/share/doc/openvpn/examples/sample-keys/server.crt.gz > /tmp/server.crt |
server.key:
1 | sudo cp /usr/share/doc/openvpn/examples/sample-keys/server.key /etc/openvpn/ |
dh1024.pem:
1 | sudo cp /usr/share/doc/openvpn/examples/sample-keys/dh1024.pem /etc/openvpn |
于是/etc/openvpn目录下就有这四个文件了。
三、编写服务器配置文件:
编写服务器端配置文件/etc/openvpn/server.conf,内容如下:
1 | port 1194 |
其实该文件也可以由/usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz解压得到。每一行具体的意思可以查看其中的注释。
四、启动OpenVPN服务器:
现在,/etc/openvpn目录下有5个文件:ca.crt、server.crt、server.key、dh1024.pem和server.conf。
1 | cd /etc/openvpn |
执行该命令的窗口不能关闭(至少openvpn进程不能结束)。
此时,如果执行
1 | ifconfig |
可以看到一个tun0网络接口,IP地址是10.8.0.1:
这说明服务器启动成功。
=================阶段二:客户端最简配置================
一、下载OpenVPN:
1 | sudo apt-get install openvpn |
二、证书与密钥:
OpenVPN客户端需要3个文件:ca.crt、client.crt和client.key。为了保证一致性,最好从服务器上复制过来。这三个文件在服务器上可以如下获得:
ca.crt:
1 | sudo cp /usr/share/doc/openvpn/examples/sample-keys/ca.crt ~ |
必须与服务器的ca.crt保持一致。
client.crt:
1 | sudo gunzip -c /usr/share/doc/openvpn/examples/sample-keys/client.crt.gz > ~/client.crt |
client.key:
1 | sudo cp /usr/share/doc/openvpn/examples/sample-keys/client.key ~ |
把这三个文件拷贝到客户端的/etc/openvpn目录下。
三、编写客户端配置文件:
在客户端的/etc/openvpn下创建文件client.conf,编写内容如下:
1 | client |
其中第4行的IP地址需要根据改为你的服务器的IP地址。
其实该文件也可以由/usr/share/doc/openvpn/examples/sample-config-files/client.conf得到。每一行具体的意思可以查看其中的注释。
现在,/etc/openvpn目录下有4个文件:ca.crt、client.crt、client.key和client.conf。
1 | cd /etc/openvpn |
执行该命令的窗口不能关闭(至少openvpn进程不能结束)。
如果输出“Initialization Sequence Completed”字样,说明OpenVPN成功连接:
此时,如果执行
1 | ifconfig |
可以看到一个tun0网络接口,IP地址是10.8.0.6(也可能是别的):
如果执行命令:
1 | ping 10.8.0.1 |
能够ping通的话,那么说明OpenVPN连接成功了~
这么一来,“OpenVPN配置很复杂“的传说就被破除啦!!






