Linux.中国 - 开源社区

 找回密码
 骑士注册

QQ登录

微博登录


十步搭建 OpenVPN,享受你的隐私生活

2014-8-28 17:16    评论: 28 收藏: 7 分享: 14    

第六步 -- OpenVPN服务器设置

等会我们的OpenVPN服务器就要启动并运行了。但是开始的时候,我们需要更改一些设置。在/usr/share/doc/openvpn/examples/sample-config-files中有一个示例配置文件,它很适合我们的教程,这个文件叫server.conf.gz:

root@delta:/etc/openvpn/easy-rsa# cd /etc/openvpn
root@delta:/etc/openvpn# cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz .
root@delta:/etc/openvpn# gunzip -d server.conf.gz
root@delta:/etc/openvpn# mv server.conf delta.conf
root@delta:/etc/openvpn#

如你所见,我们把server.conf.gz拷贝到/etc/openvpn,解压并重命名到delta.conf。你可以按个人喜好给OpenVPN服务器配置文件取名字,但是它必须有".conf"扩展名。我们现在用nano打开配置文件:

root@delta:/etc/openvpn# nano delta.conf

下面是我们应该做出的更改。

  • 首先,定位到这一行

    cert server.crt key server.key

确认OpenVPN服务器证书和私钥的位置和名称,在我们的例子中,这两行要改成

cert delta.crt
key delta.key
  • 然后定位到这一行

    dh dh1024.pem

用"2048"代替"1024":

dh dh2048.pem
  • 在配置文件的末尾,我们添加下面这两行:

    push "redirect-gateway def1" push "dhcp-option DNS 10.8.0.1"

最后这两行指示客户端用OpenVPN作为默认的网关,并用10.8.0.1作为DNS服务器。注意10.8.0.1是OpenVPN启动时自动创建的隧道接口的IP。如果客户用别的域名解析服务,那么我们就得提防不安全的DNS服务器。为了避免这种泄露,我们建议所有OpenVPN客户端使用10.8.0.1作为DNS服务器。

我们以这种方式来开始运行OpenVPN服务器:

root@delta:/etc/openvpn# service openvpn start

默认的,OpenVPN服务器监听1194/UDP端口。一种查看的方法是使用netstat工具:

root@delta:/etc/openvpn# netstat -anup
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
udp        0      0 0.0.0.0:54149           0.0.0.0:*                           555/dhclient
udp        0      0 0.0.0.0:1194            0.0.0.0:*                           3024/openvpn
udp        0      0 0.0.0.0:53              0.0.0.0:*                           2756/dnsmasq
udp        0      0 0.0.0.0:68              0.0.0.0:*                           555/dhclient
udp6       0      0 :::60622                :::*                                555/dhclient
udp6       0      0 :::53                   :::*                                2756/dnsmasq

看起来一切运行的不错,但是我们还没设置DNS服务器呢。

第七步 为OpenVPN客户端搭建DNS

这就是为什么我们要安装dnsmasq的原因,打开它的配置文件。

root@delta:/etc/openvpn# nano /etc/dnsmasq.conf

定位到这行:

#listen-address=

把它换成下面这样:

listen-address=127.0.0.1, 10.8.0.1

然后定位到这行:

#bind-interfaces

把"#"删了:

bind-interfaces

为了让dnsmasq应用这些更改,我们重启它:

root@delta:/etc/openvpn# service dnsmasq restart
 * Restarting DNS forwarder and DHCP server dnsmasq [ OK ]
root@delta:/etc/openvpn#

现在,dnamasq在本地回环(lo)和隧道(tun0)接口监听DNS请求。netstat的输出看起来是这个样子的:

root@delta:/etc/openvpn# netstat -anup
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
udp        0      0 0.0.0.0:57219           0.0.0.0:*                           638/dhclient
udp        0      0 0.0.0.0:1194            0.0.0.0:*                           911/openvpn
udp        0      0 127.0.0.1:53            0.0.0.0:*                           1385/dnsmasq
udp        0      0 10.8.0.1:53             0.0.0.0:*                           1385/dnsmasq
udp        0      0 0.0.0.0:68              0.0.0.0:*                           638/dhclient
udp6       0      0 :::39148                :::*                                638/dhclient

第八步 路由功能

我们希望在一些机器或虚拟机上运行的OpneVPN有路由的功能,这意味着要开启IP转发。为了打开它,我们用root账户键入:

root@delta:/etc/openvpn# echo "1" > /proc/sys/net/ipv4/ip_forward

为了让这个设置重启也好用,我们编辑 /etc/sysctl.conf:

root@delta:/etc/openvpn# nano /etc/sysctl.conf

编辑这行:

#net.ipv4.ip_forward=1

把"#"删了:

net.ipv4.ip_forward=1

还需要激活一些iptables相关的规则:

root@delta:/etc/openvpn# iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
root@delta:/etc/openvpn# iptables -A FORWARD -s 10.8.0.0/24 -j ACCEPT
root@delta:/etc/openvpn# iptables -A FORWARD -j REJECT
root@delta:/etc/openvpn# iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
root@delta:/etc/openvpn#

当然了,我们希望每次Ubuntu启动的时候,这些规则都好用。所以我们得把它们加到/etc/rc.local里:

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -s 10.8.0.0/24 -j ACCEPT
iptables -A FORWARD -j REJECT
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

service dnsmasq restart

exit 0

请注意倒数第二行:

service dnsmasq restart

这非常重要:在系统启动时,dnsmasq会尝试在OpenVPN之前启动。但是OpenVPN启动之前是没有隧道(tun0)接口的,所以dnsmasq自然就挂了。过了一阵,当/etc/rc.local读到隧道(tun0)接口出现时,它会在这时重启dnsmasq然后就一切如你所愿了。

第九步 客户端设置

在第五步,我们在用户的home目录里我们建立了ovpn-client文件夹(在我们的例子里是/home/sub0)。在哪里有CA的证书和客户端证书和私钥。现在只缺客户端配置文件了,在/usr/share/doc/openvpn/examples/sample-config-files有一个示例配置文件:

root@delta:/etc/openvpn# exit
exit
sub0@delta:~$ cd ~/ovpn-client
sub0@delta:~/ovpn-client$ cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf .
sub0@delta:~/ovpn-client$

我们需要编辑client.conf,定位到这一行:

remote my-server-1 1194

"my-server-1"是一个占位符,现在我们要把它换成我们自己服务器的公网域名或IP。如果我们已经给服务器分配域名了,那只要把它填到my-server-1的位置。如果没有域名,那么得获取公网IP。如何获取呢?一种方式是键入下列命令:

sub0@delta:~/ovpn-client$ curl ipecho.net/plain ; echo

(如果不是一个数字的IP地址, 或是发生错误,那就等会再试。)所以我们现在知道我们的服务器公网IP了,但是它是动态的还是静态的呢?当我们把服务器架设在家或者办公室的时候,极有可能就是动态IP。如果是动态IP的话,可以用免费的动态域名服务(DDNS),比如No-IP的服务。如果使用No-IP,假设我们选择了免费的域名dnsalias.net,那么这一行应该像这样填写:

remote ovpn.dnsalias.net 1194

"ovpn"是我们给服务器起的主机名。如果我们的服务器在云上,那么它可能有一个静态IP。如果有静态IP的话,那么这一行应该是这样的:

remote 1.2.3.4 1194

还要修改两行:

cert client.crt
key client.key

在我们的例子里,客户端的证书和密钥的名字分别是laptop.crt和laptop.key所以我们的client.conf要包含下面这两行:

cert laptop.crt
key laptop.key

在确认保存client.conf的修改之后,我们需要安全的把整个ovpn-client文件夹传输到客户端。一种方式是使用scp命令(安全拷贝或在SSH上拷贝)。另一种方式由优秀而免费的软件FileZilla提供,使用在SSH上运行的FTP(SFTP)。

第十步 连接并测试

所以我们到底怎么样才能链接到远程的OpenVPN服务器的呢?它完全取决于我们手中现有的设备类型,当然也取决于所运行的操作系统。我们将在四种不同类别的操作系统上运行,Linux, Windows, OS X和iOS/Android。注意,无论在什么设备和系统上,我们都得在OpenVPN服务器的本地网络外才能连接成功。此外,如果在服务器前有防火墙,我们需要增加一条这样的规则:

把所有从1194/UDP端口收到的包转发到服务器公网接口的1194/UDP端口。

这是一个简单的防火墙规则。事不宜迟,让我们与我们难以置信的OpenVPN服务器建立第一个连接吧。

Linux: 我们只需安装openvpn包。一种连接远程OpenVPN服务器的方式是新建一个终端,切换到ovpn-client文件夹并以root身份或使用sudo来键入下列命令:

/usr/sbin/openvpn --config client.conf

任何时候如果我们需要终止OpenVPN,按[CTRL+C]就行了。

Windows: 有一个免费的OpenVPN客户端软件叫做OpenVPN Desktop Client。 配置文件client.conf需要重命名成client.ovpn,这就是我们需要提供给OpenVPN Desktop Client的文件。程序会读取client.ovpn并给OpenVPN服务器生成一个新的连接配置。

OS X: tunnelblick是一款可以连接OpenVPN的免费开源OS X软件。Viscosity也可以但它是商业软件,不过我们喜欢。Viscosity会读取client.conf并给OpenVPN服务器生成一个新的连接配置。

iOS/Android: OpenVPN connect是绝佳的选择。它是免费的且可以从App StoreGoogle Play store获得

不管是什么平台,有时我们想检验我们是否真的使用OpenVPN连接了。一种检验方法是完成下面这简单的4步:

在连接到OpenVPN服务器前我们需要…

  • 打开whatip.com记录我们的公网IP
  • 打开[dnsleaktest.com][10],运行标准测试(standard test),记录我们的域名解析服务器

在连接到OpenVPN服务器后重复这两部。如果我们获取到两个不同的公网IP,这意味着我们的网络出口已在远端OpenVPN服务器那。此外,如果获取了两个不同的域名解析服务器,那么就不存在DNS泄露的问题了。

感言

我用了三个不同的OpenVPN服务器,都是定制的。 一个运行在希腊Thessaloniki的家庭办公室的pfSense路由。当我不在办公室时,我用这个服务器安全的连接到局域网。剩下的两个服务器在两个不同的VPS上,一个在冰岛雷克雅未克,另一个在美国纽泽西州。当我在外面且需要任意用一个WiFi热点的时候,我不必考虑安全问题:我只需简单的连接到雷克雅未克的服务器然后正常上网。有时我想看看那些限制用户地理位置在美国的服务。在这种不太常见的情况下,新泽西的服务器就派上用场了,当我连接时,我就获得了美国的一个公网IP,这样就可以访问有地理位置限制的服务了。值得注意的是,一些服务会把一些知名的VPN公司的IP列入黑名单。这是在你选的VPS提供商建立自己的OpenVPN十分重要的一个优点:这不大可能被列入黑名单。

无论你的物理位置在哪, OpenVPN确保客户端和服务器之间的数据流是高度加密的。没有OpenVPN的数据则是另一种情况。 取决于不同的应用层协议,它可能仍然是加密的,但它也可能是未加密的。所以除非你对OpenVPN服务器和它的本地网络有绝对的控制权,你不能完全相信另一端的管理员。这种精神是显而易见的:如果你真的在乎你自己的隐私,那么你需要注意你的行为可能在破坏它。

一个例子是我们希望点对点传输。我们有一个在云上配置好的OpenVPN服务器。当需要任意用一个WiFi热点的时候,你没有丝毫的担心,因为你连在OpenVPN服务器上。然后你打开你最喜欢的电子邮件客户端从一个依然使用SMTP的老服务器收信。你猜会发生什么?你的用户名和密码以未加密的纯文本格式离开OpenVPN服务器。与此同时一个在你OpenVPN服务器附近的鬼鬼祟祟的管理员很容易就嗅探出你的证书并记录到他们越来越长的名叫"random happy people.txt"的列表。

所以你该做什么?很简单。你应该继续使用OpenVPN服务器,但不要使用应用了旧的或不安全的协议的应用程序。

享受你的OpenVPN服务器吧!


via: http://parabing.com/2014/06/openvpn-on-ubuntu/

译者:2q1w2007 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

12
查看其它分页:

发表评论


最新评论

我也要发表评论

linux [Chrome 50.0|Mac 10.11] 2016-7-20 20:22
1
来自上海的 Safari 8.0|Mac 10.10 用户 发表于 2016-7-20 19:21 的评论:
dnsmasq报错怎么解决啊

root@vps:/etc/openvpn# service dnsmasq restart
* Restarting DNS forwarder and DHCP server dnsmasq
dnsmasq: failed to create listening socket for 10.8.0.1: Cannot assign requested address
这里不是说了,不是使用该地址吗,你看看你设置 IP 对吗?
回复
来自上海的 Safari 8.0|Mac 10.10 用户 2016-7-20 19:21
dnsmasq报错怎么解决啊

root@vps:/etc/openvpn# service dnsmasq restart
* Restarting DNS forwarder and DHCP server dnsmasq
dnsmasq: failed to create listening socket for 10.8.0.1: Cannot assign requested address
回复
pya [Liebao|Windows 7] 2016-4-24 20:46
有没有debian openvpn客户端安装配置、使用视频教程啊?请发到2029337707@qq.com。谢谢!
回复
来自吉林长春的 Chrome 48.0|Mac 10.11 用户 2016-2-23 13:20
在使用dnsmasq做dns后,服务端无法进行正常的dns解析,客户端连接上以后出现相同状况,我用的是腾讯云的美国服务器,客户端用的是mac+tunnelblick,求教
2 回复
RRFMonkey 2015-2-28 17:22
在确认保存client.conf的修改之后,我们需要安全的把整个ovpn-client文件夹传输到客户端,如果客户端是win8的系统,是传输到那个文件夹下面?
回复
linux 2014-9-11 16:08
1
winter 发表于 2014-9-10 19:30 的评论:
您好,我在启动服务的时候,出现:
root@cxsoft:/etc/openvpn# service openvpn start
openvpn: unrecognized service

使用 /etc/init.d/openvpn start 启动,出现
bash: /etc/init.d/openvpn: No such file or directory
查看 /etc/init.d/路径,发现下面并没有openvpn文件。
请问有什么解决方法吗?
2
linux 发表于 2014-9-10 22:26 的评论:
那是因为你的第一步都没完成啊,你没有安装 openvpn 这个包。
3
winter 发表于 2014-9-11 15:38 的评论:
sudo apt-get -y install openvpn easy-rsa dnsmasq 安装过了。
root@cxsoft:/etc# whereis openvpn
openvpn: /usr/sbin/openvpn /etc/openvpn /usr/lib/openvpn /usr/include/openvpn /usr/share/openvpn /usr/share/man/man8/openvpn.8.gz

service openvpn start 启动不了,提示openvpn: unrecognized service
/etc/init.d/ 下面也没有openvpn
find / -name openvpn.init 也没有找到

是安装有什么问题吗?
看起来是你的openvpn没安装成功。安装过程说什么了么?另外,本站还有几篇更简单的类似文章,你可以参考:
http://linux.cn/article-3409-1.html
http://linux.cn/article-3376-1.html
http://linux.cn/article-2286-1.html
1 回复
winter 2014-9-11 15:38
1
winter 发表于 2014-9-10 19:30 的评论:
您好,我在启动服务的时候,出现:
root@cxsoft:/etc/openvpn# service openvpn start
openvpn: unrecognized service

使用 /etc/init.d/openvpn start 启动,出现
bash: /etc/init.d/openvpn: No such file or directory
查看 /etc/init.d/路径,发现下面并没有openvpn文件。
请问有什么解决方法吗?
2
linux 发表于 2014-9-10 22:26 的评论:
那是因为你的第一步都没完成啊,你没有安装 openvpn 这个包。
sudo apt-get -y install openvpn easy-rsa dnsmasq 安装过了。
root@cxsoft:/etc# whereis openvpn
openvpn: /usr/sbin/openvpn /etc/openvpn /usr/lib/openvpn /usr/include/openvpn /usr/share/openvpn /usr/share/man/man8/openvpn.8.gz

service openvpn start 启动不了,提示openvpn: unrecognized service
/etc/init.d/ 下面也没有openvpn
find / -name openvpn.init 也没有找到

是安装有什么问题吗?
1 回复
linux 2014-9-10 22:26
1
winter 发表于 2014-9-10 19:30 的评论:
您好,我在启动服务的时候,出现:
root@cxsoft:/etc/openvpn# service openvpn start
openvpn: unrecognized service

使用 /etc/init.d/openvpn start 启动,出现
bash: /etc/init.d/openvpn: No such file or directory
查看 /etc/init.d/路径,发现下面并没有openvpn文件。
请问有什么解决方法吗?
那是因为你的第一步都没完成啊,你没有安装 openvpn 这个包。
1 回复
winter 2014-9-10 19:30
您好,我在启动服务的时候,出现:
root@cxsoft:/etc/openvpn# service openvpn start
openvpn: unrecognized service

使用 /etc/init.d/openvpn start 启动,出现
bash: /etc/init.d/openvpn: No such file or directory
查看 /etc/init.d/路径,发现下面并没有openvpn文件。
请问有什么解决方法吗?
回复
北肙 2014-9-1 15:03  新浪微博网友评论
留着买VPS了试试。
回复
linux 2014-8-29 15:42
1
arhool 发表于 2014-8-29 00:16 的评论:
很不错呢,我也来学学
2
arhool 发表于 2014-8-29 12:00 的评论:
暴汗,闲的那么慌,又支持,又反对的
哈哈哈
5 回复
linux 2014-8-29 15:41
1
发表于 2014-8-29 13:29 的评论:
有没有架构图?这样看着有点晕
一步步照着做就行啊
6 回复
游客 2014-8-29 13:29
有没有架构图?这样看着有点晕
6 回复
arhool 2014-8-29 12:00
1
arhool 发表于 2014-8-29 00:16 的评论:
很不错呢,我也来学学
暴汗,闲的那么慌,又支持,又反对的
8 回复
PleaseCallMe二锅 2014-8-29 08:03  新浪微博网友评论
Mark
1 回复
manual_page 2014-8-29 07:33  新浪微博网友评论
Repost
1 回复
evilxr 2014-8-29 01:33  新浪微博网友评论
转发微博。
1 回复
arhool 2014-8-29 00:16
很不错呢,我也来学学
9 回复
辛木王 2014-8-28 23:06
@有道云笔记收藏
7 回复
快乐2012幸福 2014-8-28 22:03  新浪微博网友评论
搭建OpenVPN
1 回复
12下一页

热点评论

arhool 2014-8-29 00:16
很不错呢,我也来学学
9
arhool 2014-8-29 12:00
暴汗,闲的那么慌,又支持,又反对的
8
辛木王 2014-8-28 23:06
@有道云笔记收藏
7
游客 2014-8-29 13:29
有没有架构图?这样看着有点晕
6
linux 2014-8-29 15:41
一步步照着做就行啊
6
返回顶部

分享到微信朋友圈

打开微信,点击底部的“发现”,
使用“扫一扫”将网页分享至朋友圈。