Linux上如何通过 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 cleartextWed Oct 16 2013 TUN/TAP device tun0 openedWed Oct 16 2013 do_ifconfig, tt->ipv6=0, tt->did_ifconfig_ipv6_setup=0Wed Oct 16 2013 /sbin/ifconfig tun0 10.0.0.1 pointopoint 10.0.0.2 mtu 1500Wed Oct 16 2013 UDPv4 link local (bound): [undef]Wed Oct 16 2013 UDPv4 link remote: [AF_INET]192.168.2.125:1194Wed Oct 16 2013 Peer Connection Initiated with [AF_INET]192.168.2.125:1194Wed 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 Studiodev tunifconfig 10.0.0.1 10.0.0.2secret /etc/openvpn/keys/static.key
?
将配置文件设为只有拥有者有读写权限:
$ sudo chmod 0600 /etc/openvpn/studio.conf
?
客户端的配置文件内容类似,只是多了服务器端的 IP 地址:
# config for Shopdev tunifconfig 10.0.0.2 10.0.0.1secret /etc/openvpn/keys/static.keyremote 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 教程中最重要的一块:如何访问你的远程服务器上的资源。请看下一篇。
via: http://www.linux.com/learn/tutorials/743590-secure-remote-networking-with-openvpn-on-linux
译者:bazz2 校对:jasminepeng
原文由 LCTT 原创翻译,Linux中国 荣誉推出
原文地址:http://linux.cn/thread/11958/1/1/
?
?