在ubuntu14.04上搭建OpenVPN服务
简介
在连接了不可信的网络环境后,让手机或者计算机安全的访问互联网,使用虚拟专用网络(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服务的更多相关文章
- 在Ubuntu14.04上搭建自己的OpenVPN服务器并通过它上网
背景 学校宿舍端口可以配置静态IP连校内网,也可以连到实验室的服务器:实验室的服务器可以连外网:但宿舍要连外网就要花钱买PPPoE账号了.作为壮哉我大计院的一员,本着发扬专(neng)业(sheng) ...
- ubuntu14.04上搭建android开发环境
这几天心血来潮,想在ubuntu上写写android软件.所以就上网找些资料在ubuntu上搭建android环境.结果要么时不完整的,要么就是过时的. 所以我把我搭建android环境的过程写下了, ...
- Ubuntu14.04下搭建VPN服务 -pptp
在Ubantu下采用PPTP搭建VPN,优点是配置简单快捷.本教程亲自测试,熟练了在新机器上5分钟搞定VPN. - - - - - - - - - - - - - - - - - - - - - - ...
- 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 ...
- Ubuntu14.04下搭建VPN服务
直接上步骤: 1.第一步需要安装PPTP,以用来提供VPN服务. sudo apt-get install pptpd 如果有问题的话比如提示找不到之类的,apt-get update 一下应该就可以 ...
- Ubuntu14.04上搭建FTP服务器
Ubuntu上常用的Ftp服务器是vsFTPd.安装前检查下是否已经装好了.用 sudo service vsftpd restart,如果提示重启成功之类的信息,说明此服务器已经安装好了vsFTPd ...
- Ubuntu14.04上安装tftpd服务
首先sudo apt-get install tftpd-hpa, tftp-hpa 然后sudo vim /etc/default/tftpd-hpa 配置文件如下 TFTP_USERNAME=& ...
- 在 Ubuntu14.04 上搭建 Spark 2.3.1(latest version)
搭建最新的 Spark 2.3.1 . 首先需要下载最新版 jdk .目前 2.3.1 需要 8.0 及其以上 jdk 才可以允许. 所以如果你没有 8.0 jdk 安装好了之后会报错.不要尝试安装 ...
- 【转】Linux(ubuntu14.04)上编译Android4.4源码的环境搭建及编译全过程
原文网址:http://jileniao.net/linux-android-building.html sublime text让我伤心.本来很信任sublime text的自动保存功能,之前使用一 ...
随机推荐
- Java实现时钟小程序【代码】
哎,好久没上博客园发东西了,上一次还是两个月前的五一写的一篇计算器博客,不过意外的是那个程序成了这学期的Java大作业,所以后来稍微改了一下那个程序就交了上去,这还是美滋滋.然后五月中旬的时候写了一个 ...
- [转]Linux下彻底卸载mysql详解
http://www.jb51.net/article/97516.htm 一.使用以下命令查看当前安装mysql情况,查找以前是否装有mysql 1 rpm -qa|grep -i mysql 可以 ...
- 一起玩转mysql
mysql安装 一起玩转mysql linux命令
- keras_基本网络层结构(1)_常用层
参考文献: https://blog.csdn.net/sinat_26917383/article/details/72857454 http://keras-cn.readthedocs.io/e ...
- 一台 linux 主机装两个mysql
启动 3306 nohup /usr/local/mysql5.1.7/bin/mysqld_safe & 启动 3307/usr/local/mysql/bin/mysqld --defau ...
- free命令学习 输出理解
命令 [root@localhost ~]# free -m total used free shared buffers cached Mem: 7869 7651 218 1 191 5081 - ...
- socket编程---UDP
头文件 #include <sys/types.h> #include <sys/socket.h> 函数原型 int sendto (int s, const void *b ...
- UDP的connect
UDP的connect没有三次握手过程,内核只是检测是否存在立即可知的错误(如一个显然不可达的目的地), 记录对端的的IP地址和端口号,然后立即返回调用进程. 未连接UDP套接字(unconnecte ...
- Mplayer1.0rc2移植到am335x开发板
因项目需要媒体播放器,所以准备使用QT+Mplayer来做,但遇到了屏幕闪烁的问题,无法满足需求. 1.参考<mplayer 移植到 arm 心得> ,http://blog.csdn.n ...
- CentOS6.6安装(转)
2015-3-6CentOS6.6安装 环境:工控机 1.选择安装software development workstation,其他参考以下文档过程 一.安装CentOS 6.6,安装结束重新启动 ...