via: http://linux.cn/article-2286-1.html
一直以来,我们在互联网上传输信息时,都谨慎地为这些信息加密,以防内容泄露出去,特别是在政府的干预下,为网络上每个字节都进行加密已经变得空前重要了。在这种情况下,OpenVPN 是保障网络信息安全的首选。今天我们就来学习一下如何架设 OpenVPN,使你可以在任何场所都能安全地访问家里的服务器。
VPN 小贴士:很多商业的 VPN 根本不值它们的售价,它们的安全性只比通过 SSL 保护的网站高一点点,原因是它们信任所有客户端。一个真正意义上的 VPN 用于在非可信网络上连接两个可信的终端。用户不能随便找一台 PC 机就能登录进 VPN,因为你的 VPN 如果能被一台受到病毒感染的 PC 登录进来,不管它们建立的连接有多么安全,都不是一件好事情。所以你必须在你的客户端和服务器端都要好好地配置一下 VPN 服务。
OpenVPN 快速入门
你需要两台不同子网下的计算机,比如同一网络内一台使用网线的 PC 和一台使用无线 的 PC(或者是 VitualBox 虚拟机上的多台Linux客户机),并且你要知道它们的 IP 地址。这里分别为这两台计算机命名为“Studio”和“Shop”,都给它们装上 OpenVPN。OpenVPN 支持大多数 Linux 发行版,所以你只要用你手头的安装包管理软件就行。本文的包管理器是 Debian、Ubuntu 以及它们的衍生版中使用的 apt-get,下面安装 OpenVPN:
$ sudo apt-get install openvpn openvpn-blacklist
上面的步骤安装了 OpenVPN 服务器和一个用于检查外泄密钥黑名单的程序。请务必安装这个黑名单检查器,因为有一次 Debian 发布了一个有漏洞的 OpenSSL 软件,这个软件里的随机码生成器会产生不可信任的密钥 —— 产生的这些密钥不是真正的随机数,它们可以被预测到。这件事发生在2008年,当时所有使用了这个软件的人都需要替换掉他们的弱密钥。即使5年过去了,我们还是建议使用这个黑名单检查器。
现在让我们测试下,先为两台 PC 创建一个不加密的通道。首先互 ping 一下确保它们能连通,然后让 OpenVPN 处于关闭状态(我们会在后面手动启动它):
$ ps ax|grep openvpn
如果 openvpn 这个后台进程存在,那就 kill 了它。这里假设“Studio”这台 PC 的 IP 是192.168.1.125,“Shop”的 IP 是192.168.2.125。
现在在“Studio”端开启一个未加密的连接到“Shop”端:
$ sudo openvpn --remote 192.168.2.125 --dev tun0 --ifconfig 10.0.0.1 10.0.0.2
然后再开一个从“Shop”到“Studio”的连接:
$ sudo openvpn --remote 192.168.1.125 --dev tun0 --ifconfig 10.0.0.2 10.0.0.1
连接成功的话你会看到类似下面的信息:
Wed Oct 16 2013 ******* WARNING *******: all encryption and authentication features disabled -- all data will be tunnelled as cleartext Wed Oct 16 2013 TUN/TAP device tun0 opened Wed Oct 16 2013 do_ifconfig, tt->ipv6=0, tt->did_ifconfig_ipv6_setup=0 Wed Oct 16 2013 /sbin/ifconfig tun0 10.0.0.1 pointopoint 10.0.0.2 mtu 1500 Wed Oct 16 2013 UDPv4 link local (bound): [undef] Wed Oct 16 2013 UDPv4 link remote: [AF_INET]192.168.2.125:1194 Wed Oct 16 2013 Peer Connection Initiated with [AF_INET]192.168.2.125:1194 Wed Oct 16 2013 Initialization Sequence Completed
看到“Initialization Sequence Completed”这句话时,说明你的操作成功了。这时你应该能够 ping 通两个隧道的 IP:ping 10.0.0.1 和 ping 10.0.0.2。当你建立隧道的时候,你无需在意你所在的网络,你可以为你的隧道指定任何 IP 地址。关闭隧道请按 Ctrl+c。
现在你可以利用这个隧道打开一个 SSH 会话了。图1显示了通过 VPN 隧道登录 SSH 的例子,这个图也显示了有趣的 Message of the Day(MOTD)图片,图片来自于博客《在你的 Linux 系统上放一张奶牛的 MOTD 图片》:
$ ssh carla@10.0.0.2
图1:成功通过 VPN 隧道建立 SSH 会话,并显示了有趣的 MOTD 图片
哼哼哈嘿,它运行得不错!
加密后的 VPN 隧道
目前为止,我们玩得还不赖,但是没有使用加密技术,一切都毫无意义,所以我们需要建立一个简单的静态密钥配置文件。不像公钥基础设施(PKI),有着根认证中心、可撤消认证等安全措施,我们的加密机制没有那么强悍,但是对于仅仅想远程到家里的用户来说,已经足够了。OpenVPN 有提供创建静态密钥的命令,我们可以建立目录存储密钥、创建密钥,并将文件设为对属主只读模式:
$ sudo mkdir /etc/openvpn/keys/ $ sudo openvpn --genkey --secret /etc/openvpn/keys/static.key $ sudo chmod 0400 /etc/openvpn/keys/static.key
这是个明文密钥,你可以利用文本编辑器打开密钥文件读取到它,文件名可以随意,不一定非得叫“static.key”。将这个密钥拷到需要通信的两台电脑上,呵呵,这是对称加密,而不是公钥加密。
现在我们要在两台电脑上完成基本的配置。(在非类 Ubuntu 的系统中,OpenVPN 没有提供默认的配置文件,但是在 /usr/share/doc/openvpn/ 目录下会为你提供一个配置文件的样本。)在我的实验中,“Studio”是服务器端,“Shop”是一台笔记本电脑,用于登录到“Studio”中。我的服务器端的配置文件是 /etc/openvpn/studio.conf,它的配置信息如下:
# config for Studio dev tun ifconfig 10.0.0.1 10.0.0.2 secret /etc/openvpn/keys/static.key
将配置文件设为只有拥有者有读写权限:
$ sudo chmod 0600 /etc/openvpn/studio.conf
客户端的配置文件内容类似,只是多了服务器端的 IP 地址:
# config for Shop dev tun ifconfig 10.0.0.2 10.0.0.1 secret /etc/openvpn/keys/static.key remote 192.168.1.125
注意 ifconfig 那行的 IP 地址的顺序,本地的 IP 要放在远程的 IP 之前。现在启动服务器端的 OpenVPN,指定服务器端配置文件,客户端操作雷同:
$ sudo openvpn /etc/openvpn/studio.conf $ sudo openvpn /etc/openvpn/shop.conf
成功建立连接后,你还会看到“Initialization Sequence Completed”这句话,但你不会再看到这句 WARNING(这句话会在你建立了未加密的隧道时出现):
******* WARNING *******: all encryption and authentication features disabled
防火墙和动态 IP 地址
OpenVPN 本身是比较容易配置的,最麻烦的是处理防火墙和动态 IP 地址。防火墙种类众多,对于如何配置防火墙不拦截你的隧道,我把这个话题当作家庭作业留给你自己解决:P。OpenVPN 的端口是1194,你可以在防火墙上设置一个转发规则,用于将消息转发到你的目标服务器。
接下来处理另一件麻烦事:动态 IP 地址。Dyn.com可以提供一个廉价的方法,为你管理 ISP 分配给你的动态 IP,或者你也可以向你的 ISP 支付一笔费用,从而得到一个静态 IP。
至此,你可以宣告工作完成了,接下来的任务就是手动开启服务器端的 OpenVPN,让它一直运行在那里,等待你的登录。你可以将你的笔记本拿到外面,并随时随地随心所欲地连接到服务器。然而,关于 OpenVPN 的操作,我还有一些重要的知识点要讲,比如如何为 OpenVPN 设置开机启动,如何利用 Network Manager 自动建立连接,以及这篇 OpenVPN 教程中最重要的一块:如何访问你的远程服务器上的资源。
整合到 Network Manager
Network Manager 是一个不错的 OpenVPN 客户端;你只需要安装 network-manager-openvpn 这个插件。我们继续上篇使用的配置。打开 Network Manager 配置界面,进入“新建 VPN 连接”的窗口。这个界面布局在 KDE 和 GNOME 下面看起来有点不一样,但是大体的信息是一样的。开始的时候你需要选择 OpenVPN 作为你的 VPN 连接类型,就像图1所示;如果你没看到 OpenVPN 的选项,说明你没有安装好插件。(图1是一张 GNOME 下面的图片。)
*图1:在 Network Manager 上新建 OpenVPN 客户端 *
图2显示了配置主界面。从上到下分别为:
- 连接名,随便取一个。
- 远程服务器的网关。
- 下拉菜单选择静态密钥(Static Key)。
- 然后通过文件浏览器找到静态密钥文件。
- 这个不是方向性的密钥,所以 Key Direction 这里设为 None。
- 远程 IP 和 本地 IP 是我们在上一部分已经设置好的虚拟 OpenVPN 地址,可分别通过 /etc/openvpn/studio.conf 和 /etc/openvpn/shop.conf 文件获得。
- 我们无需设置密码,所以“Show passwords”复选框为空。
- 这个VPN连接是“所有人都可用”,还是只有你可用,随你喜欢。
图2:Network Manager 配置 OpenVPN 客户端主界面
保存然后就可以使用 Network Manager 建立连接了。So easy,妈妈再也不用担心我的学习了!看见图3了么?你现在只需点击一下高亮的按钮就可以连接到你的家庭服务器,或从你的家庭服务器中断开连接。
OpenVPN 开机启动
手动开启 OpenVPN 很简单,但是你也许想要更简单,让它能够在服务器重启的时候跟着自动启动。在 Debian/Ubuntu 以及绝大部分发行版中,当你安装完 OpenVPN 的时候就被设置为开机启动的。所以你需要重启系统,或者按下面的方法启动后台进程:
$ sudo /etc/init.d/openvpn start $ sudo service openvpn start
第一个命令是比较老的启动方法,第二个命令使用了“service”命令。“service”命令第一次出现在 Red Hat 发行版中,如果你的发行版中没有安装这个命令,你需要从你的软件源里面去找到它。
Ubuntu 使用 Upstart 管理服务进程,Debain 使用的老的 SysV,而 Fedora 使用“systemd”。如果你在 /etc/openvpn 目录下配置了多个 OpenVPN 的服务,你可以通过“systemd”的命令启动你要的服务:
# systemctl start openvpn@studio.service
这里的“studio.service”与我们在上篇讲过的例子中的 /etc/openvpn/studio.conf 配置的服务相对应。用这些方法启动的后台进程,在系统重启后会失效,所以这些方法都和上篇讲的启动方式一样,仅能使 OpenVPN 运行一次。你可以将启动 OpenVPN 进程的任务交给 chkconfig:
# service openvpn start # chkconfig openvpn on
上面列出的是启动 OpenVPN 后台进程最常见的方式,这个命令启动了一整个进程,而不是对 /etc/openvpn/下面的所有 .conf 配置文件都维护一个进程。systemd 支持chkconfig 以及 service 命令,所以上面两条命令能够正常工作。然而使用 systemd 的发行版非常多,如果你的工作环境和我们的不一样,请通过发表评论的方式通知我们。
强化你的连接
OpenVPN 的健壮性足够维持一条持久的连接,即使服务宕掉。而你可以令这个连接变得更加稳定,只需要在服务器端和客户端的 .conf 文件内添加下面两条属性:
persist-tun persist-key
这两条属性对于那些笔记本电脑用户来说非常有用,他们的电脑会因为电源保护或需要移来移去而经常断开 OpenVPN 的连接。
现在,该做些什么?
你已经完成了所有设置,并且你的服务工作正常,你接下来能用这个干点什么?如果你以前一直用 OpenSSH 来远程你的服务器,你会有这样的思维定势:你可以利用 OpenVPN 登录到远程机器,然后跑上面的应用。你要是那样做,就太浪费 OpenVPN 了。你可以将 OpenVPN 想像成是一条虚拟的以太网电缆接到你的服务器上或者是你的局域网内,这条电缆还包着厚厚的加密保护。你可以在它提供的隧道上跑任何加密的或不加密的服务,并且只需要在防火墙上开一个端口。
所以你可以利用 OpenVPN 隧道来建立 SSH 连接,然后远程到服务器,然后在服务器上跑应用。你可以访问到网络资源,比如文件共享和 Web 应用。你可以强制让你的电脑通过 VPN 隧道访问到网络,但我认为你会想要同时能够使用本地网络和 VPN 网络的。
所以,在你的笔记本上你可以上网冲浪,使用 SSH,做你想做的任何事,上你想上的任何网络。当你想利用 OpenVPN 隧道做一些事情时,你只需要打开它,然后输入 IP 地址:
$ ssh carla@10.0.0.1
对于一些 Web 服务,操作也简单:让你的 Web 浏览器访问到 OpenVPN 的 IP 地址然后登录进去。举个例子,我在我家的服务器上跑了多个 Web 服务做测试,我可以通过http://10.0.0.1/drupal访问 Drupal,可以通过http://10.0.0.1/owncloud访问 OwnCloud。我电脑上有优秀的图形界面 FTP 客户端 gFTP,所以只需要填入 IP 地址、用户名、密码就能访问到 FTP 服务器,或者使用下面的命令:
$ ftp 10.0.0.1 21
你可以远程管理你的 MySQL 数据库,输入帐号密码:
$ mysql -h 10.0.0.1 -u admin -p
所以最重要的是你要知道怎么去配置一个你想要玩的功能。
很显然,当我们使用名称服务(name service)时,会比直接使用 IP 地址更方便。
相关推荐
基于openvpn的web管理系统,前后端分离设计。
Barracuda_SSL_VPN_DS_US.pdf
openvpn的几种组网方式
H3C的iNode客户端,Linux64位版本,portal 802.1X sslvpn 3种认证方式都支持,其他用户上传的几乎都缺少SSLVPN的支持,甚至只支持一项 依赖:gcc-libs ncurses5 如果你是Arch党,还可以使用PKGBUILD构建软件包:...
openvpn 2.5.10版本,通过三板斧即可安装,证书生成需要的easy-rsa3.1.5版本也在压缩包里面。
openvpn 服务端需要的文件,通过helm 3 部署
向日葵远程连接主控制是一款强大的远程控制软件,它允许用户通过互联网访问并控制远端计算机,实现远程桌面、文件传输、远程管理等多种功能。在IT行业中,远程控制技术是解决远程协作、技术支持和远程办公问题的重要...
"嵌入式Linux在ARM9(TQ)上的移植" 本文主要讲述了在ARM9(TQ)平台上移植嵌入式Linux的整个过程。首先,文章介绍了Linux操作系统的结构,包括内核、shell、文件系统和应用程序四个部分。然后,文章详细介绍了Linux...
iNode智能客户端Linux版 iNodeClient for MacOS 7.3(E0558),用于制作支持不同协议版本的定制的iNode客户端。
Java可以用来开发自己的VPNs,通过隧道技术将私有网络连接到公共网络,实现安全的远程访问。 综上所述,"Java连接实现代码"可能涵盖了上述多种网络连接技术,对于抓取Google数据这样的任务,可能使用了HTTP或HTTPS...
总之,Java远程连接Oracle数据库涉及JDBC驱动的使用、连接的建立、SQL语句的执行和资源的管理。exe4j则为Java应用程序提供了在没有Java环境的系统上运行的可能性。正确理解和运用这些知识点,对于开发和维护Java应用...
36_ssl_vpn_网络扩展及其它特性演示_补充知识 华为安全HCIE-第七门-Agile Controller(12篇) 1_aglie_controller产品亮点讲解 2_aglie_controller产品定位及部署场景 3_radius认证协议讲解 4_802.1x协议讲解 ...
AWS_VPN_Client
Configure LAN Access
目录: 网盘文件,永久连接 HCNP-Security-CISN 1_网络安全设备与组网_安全设备介绍-安全组网介绍 2_网络安全运维_安全设备管理-安全设备统一运维 3_防火墙智能选路_智能选路应用场景-智能选路故障排除 4.1_...
和官网下载的不同,也是通过厂商其他渠道获得。官网提供的下载至少目前,2024年9月,同样版本下载下来不可用,会提示无法硬件特征码。这个版本下载后,如果运行没反应,可在命令行运行,如果报错libgconf的话,可以...
支持包括企业级密码管理工具、多种连接协议和VPN在内的数百种集成技术,用于管理所有远程连接和虚拟机,通过remotedesktop中文版大家能可保存、编辑或者删除你的远程桌面连接以及方便地管理自己的web服务器、ftp...
linux企业实战运维入门到高级系列 ubuntu Centos ...自动化运维 安装kickstart文件(半自动化) ANSIBLE部署 企业级OpenVPN 安装OpenVPN 该笔记由刘森飚整理,版权归原作者所有 仅用于学习交流分享,如有争议请联系下架
以上内容仅是根据文档片段中的知识点进行了扩展,完整系统的Linux运维知识还包括很多其他方面,如网络配置、安全性加固、性能优化、自动化运维等。对于任何一个Linux运维工程师而言,都需要不断地学习和实践,才能...
利用Linux实现远程办公可以弥补VPN方式的以上两点不足:可以实现按需开机;可以直接控制和监测远程计算机,以及远程计算机的桌面。