在 网络1.0 指南中,我们在青云中创建了两个私有网络, 并使用了一台路由器来连接和管理它们。 本篇指南旨在介绍如何远程拨入青云中您的私有网络。如果您希望将您自己的数据中心或办公、家庭网络与青云中您的私有网络连接在一起,建议您使用 GRE隧道指南 。 形成公私兼顾的混合云(hybrid cloud)。
目前青云支持 OpenVPN / PPTP / L2TP-IPsec 协议。
在前面( 网络1.0 )指南中,我们创建两个私有网络, 分别是开发环境网络 192.168.100.0/24 、生产环境网络 192.168.200.0/24 , 并使用了一台路由器将它们彼此互联,并且将该路由器连接到了 Internet 上(即,分配了一个公网 IP 地址)。
假设您当前位于办公网络,本地网络地址是 192.168.1.0/24 , 下面我们的任务是将青云中的两个网络与您的本地网络连接。
注解
因为涉及到网络间互联,所以各个网络必须使用不同的网络地址, 否则地址就冲突了。如果存在地址冲突,您可以将青云私有网络与路由器断开、再重新连接至路由器, 在对话框中重新指定一个网络地址给予您的青云私有网络。
登录 WEB 控制台,点击左边导航条中的“网络”,在右边主显示区域 “路由器” 项下点击您的路由器,进入其详情页,切换至“VPN 服务”页签, 然后点击“打开此服务”。
在弹出的对话框里,多数情况下,直接使用缺省配置即可, 不过建议您点开高级选项复查一下各项配置,尤其是 VPN 网络地址不能跟您的本地网络存在冲突。
另外, OpenVPN 提供了多种验证方式,除了默认的 “证书验证” 方式,还提供 “用户名/密码” 和 “证书+用户名/密码” 验证方式。 如果启用了包含 “用户名/密码” 的验证方式,您还需要添加对应的可授权账户列表。
确认无误后,点击“提交”,然后点击页面上方的“应用修改”(有个黄色箭头在闪烁), 以更新路由器的配置。
另外,还需要去该路由器使用的防火墙规则中打开 OpenVPN 服务器的运行端口, 以上图为例,需要打开 UDP 下行 1194 端口。并记得 应用更改 。
在上一节启用了 OpenVPN 隧道服务后,您会看到一个名为“下载证书”的按钮, 点击该按钮,即可得到一个文件名类似 rtr-xxxxxxxx-certs.zip 的 zip 包, 里面有配置 OpenVPN 客户端的必备证书,密钥文件和客户端配置文件样例:
注解
上面四个文件是必需的配置文件,此外我们还在 zip 包中准备了不同操作系统下的配置文件样例,可作为参考。
第一步,下载 OpenVPN Windows 安装包,并安装它。缺省情况下,OpenVPN 将被安装到 C:\Program Files\OpenVPN 目录中。(按照默认选项安装即可。如非必要,请勿自主勾选选项) 推荐使用OpenVPN官方客户端2.3.6和以上版本. 下载地址在: http://openvpn.ustc.edu.cn/ 安装程序包括服务器和客户端。安装时选择”OpenVPN GUI”模块即可安装客户端。
第二步,将前面 zip 包中的配置文件放入 C:\Program Files\OpenVPN\config 目录中。
第三步,将以下内容保存到 C:\Program Files\OpenVPN\config 目录中,文件名任意, 扩展名为 .ovpn ,比如可以叫做 rtr-xxxxxxxx.ovpn
client
dev tun
proto <udp>
remote <your-router-eip> 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca yunify-ca.crt
cert <rtr-xxxxxxxx.crt>
key <rtr-xxxxxxxx.key>
tls-auth <rtr-xxxxxxxx.takey> 1
cipher AES-256-CBC
comp-lzo
mssfix 1400
注解
可以参考 zip 包里带的 windows sample 配置样例。
第四步,您可以连接了。
以 Ubuntu Linux 为例子来描述,其他的 Linux 分发版都是类似的做法。
第一步,安装:
$ sudo apt-get install openvpn
第二步,将前面 zip 包中的配置文件放入 /etc/openvpn 目录中。
第三步,将以下配置保存到 /etc/openvpn 目录中,文件名任意,扩展名为 .conf , 比如可以叫做 rtr-xxxxxxxx.conf
client
dev tun
proto <udp>
remote <your-router-eip> 1194
resolv-retry infinite
nobind
user <nobody>
group <nogroup>
persist-key
persist-tun
ca yunify-ca.crt
cert <rtr-xxxxxxxx.crt>
key <rtr-xxxxxxxx.key>
tls-auth <rtr-xxxxxxxx.takey> 1
cipher AES-256-CBC
comp-lzo
mssfix 1400
注解
可以参考 zip 包里带的 linux sample 配置样例。
其中 user / group 请分别查询您本地 Linux 系统的 /etc/password 和 /etc/group 文件。
第四步,您可以连接了:
$ sudo service openvpn start
客户端以 Tunnelblick 为例, 先下载安装 Tunnelblick 。
将前面 zip 包中的配置文件解压到同一目录中,其中 .ovpn 是 VPN 配置文件, 可根据需要做调整,样例如下
client
dev tun
proto <udp>
remote <your-router-eip> 1194
resolv-retry infinite
nobind
user nobody
group nogroup
persist-key
persist-tun
ca yunify-ca.crt
cert <rtr-xxxxxxxx.crt>
key <rtr-xxxxxxxx.key>
tls-auth <rtr-xxxxxxxx.takey.key> 1
cipher AES-256-CBC
comp-lzo
mssfix 1400
其中 user / group 可查询您本地系统的 /etc/passwd 和 /etc/group 文件。
注解
之后在 Tunnelblick 面板中添加配置,或双击 .ovpn 文件便可将配置添加到 Tunnelblick,然后就可以连接了。
如果您的 OpenVPN 开启了 “用户名/密码” 登录方式,你需要在连接的时候提供用户名和密码输入,如果希望通过配置文件来解决, 您可以修改客户端的配置文件中的 “auth-user-pass password.txt” ,通过一个独立的文件,例如 “password.txt” 来保持用户名/密码信息。
注解
如果是 Mac 系统,不需要 password.txt 文件,配置中 auth-user-pass 后面也不需要写文件名,只保留 “auth-user-pass” 。会在连接 VPN 时提示输入账号密码,并支持保存到 Mac 系统的 Keychain 中。
样例如下:
client
dev tun
proto <udp>
remote <your-router-eip> 1194
resolv-retry infinite
nobind
user nobody
group nogroup
persist-key
persist-tun
ca yunify-ca.crt
cert <rtr-xxxxxxxx.crt>
key <rtr-xxxxxxxx.key>
tls-auth <rtr-xxxxxxxx.takey.key> 1
auth-user-pass password.txt
cipher AES-256-CBC
comp-lzo
mssfix 1400
password.txt 文件样例如下,用户名和密码分为两行存放。
<user_name>
<password>
登录 WEB 控制台,点击左边导航条中的“网络”,在右边主显示区域 “路由器” 项下点击您的路由器,进入其详情页,切换至“VPN 服务”页签, 然后点击“打开 PPTP 服务”。
在弹出的对话框里,你需要配置 VPN 用户名和密码, 您也可以点开高级选项复查一下各项配置,尤其是 VPN 网络地址不能跟您的本地网络存在冲突。
确认无误后,点击“提交”,然后点击页面上方的“应用修改”(有个黄色箭头在闪烁), 以更新路由器的配置。
另外,还需要配置路由器对应防火墙规则,允许 PPTP 服务器运行端口通过, 即 TCP 下行 1723 端口; 同时还需要允许 GRE 协议。并记得 应用更改 。
对于初次连接的用户,可以先通过以下步骤创建新的网络连接:
VPN 网络连接已经创建的情况下,只需要在桌面上点击该网络连接,在界面上输入 VPN 连接的用户名和密码, 然后点击 “连接” 就可以了。
注意:连接 VPN 之后,默认情况下本地默认网关会指向 VPN 服务器,即所有流量都会通过 VPN 服务器。 如果这不是你想要的,那么禁用的方法是:
禁用之后,你需要手动配置路由规则才能访问私有网络里的主机,具体操作是:
对于初次连接的用户,可以先通过以下步骤创建新的网络连接:
VPN 网络连接已经创建的情况下,只需要点击桌面右下角的网络连接处,选择并点击相应的网络连接,在界面上输入 VPN 连接的用户名和密码, 然后点击 “连接” 就可以了。
注意:连接 VPN 之后,默认情况下你本地默认网关会指向 VPN 服务器,即所有流量都会通过 VPN 服务器。 如果这不是你想要的,那么禁用的方法是:
禁用之后,你需要手动配置路由规则才能访问私有网络里的主机,具体操作是:
以 Mac 10.9 Mavericks 为例来描述,其他的 Mac 版本都是类似的做法。
首先要配置 PPTP 连接,具体做法为:
如果你希望通过 VPN 来访问路由器内部私有网络里的机器,你还需要手动配置路由规则,具体做法为:
如果你希望在每次启动客户端之后能自动配置路由规则,则你可以将你需要的指令写成脚本,放置在 /etc/ppp/ip-up 文件中。 例如,创建脚本文件 /etc/ppp/ip-up,内容为:
#!/bin/sh
sudo /sbin/route -n add -net 192.168.1.0/24 $4
保存并更改文件权限:
$ sudo chmod a+x /etc/ppp/ip-up
如果你不想配置路由,还可以把本地的所有流量通过 VPN 连接来发送,但我们并不推荐这么做。具体做法是: 在 VPN 配置界面里,点击 “高级选项”,勾选 “通过VPN连接发送所有流量”,并点击确定。
以 Ubuntu Linux 为例子来描述,其他的 Linux 分发版都是类似的做法。
第一步,安装 PPTP 客户端:
$ sudo apt-get install pptp-linux
第二步,修改 /etc/ppp/chap-secrets 文件,配置验证所需的用户名和密码,字符串之间用 “\t” 分隔:
<user_name> pptpd <password> *
注解
第三步,新建 /etc/ppp/peers/<tunnel> 文件,<tunnel> 是由你定义的一个隧道名称, 例如我们可以叫做 vpn,即这个文件为 /etc/ppp/peers/vpn:
pty "pptp <vpn_server_ip> --nolaunchpppd --nobuffer --loglevel 0"
name <user_name>
remotename pptpd
require-mppe-128
file /etc/ppp/options.pptp
ipparam <tunnel>
注解
第四步,启动 VPN 客户端:
$ pon <tunnel> persist
注解
第五步,配置路由规则。如果你希望通过 VPN 来访问路由器内部私有网络里的机器,你还需要手动配置路由规则, 假设你需要访问的私有网络的网络地址为 192.168.10.0/24,相应的路由配置为:
$ ip route add 192.168.10.0/24 dev ppp0
注解
如果你希望在每次启动客户端之后能自动配置路由规则,则你可以将你需要的指令写成脚本,放置在 /etc/ppp/ip-up.d/ 下面。 例如,可以创建脚本文件 /etc/ppp/ip-up.d/add-route,内容为:
#!/bin/sh
ip route add 192.168.10.0/24 dev $1
第六步,关闭 VPN 客户端。如果你想断开 VPN 连接,可以执行一下命令:
$ poff <tunnel>
注解
登录 WEB 控制台,点击左边导航条中的“网络”,在右边主显示区域 “路由器” 项下点击您的路由器,进入其详情页,切换至“VPN 服务”页签, 然后点击“打开 L2TP 服务”。
在弹出的对话框里,需要配置 VPN 用户名、密码、PSK, 您也可以点开高级选项复查一下各项配置,尤其是 VPN 网络地址不能跟您的本地网络存在冲突。
确认无误后,点击“提交”,然后点击页面上方的“应用修改”(有个黄色箭头在闪烁), 以更新路由器的配置。
另外,还需要配置路由器对应防火墙规则,允许 L2TP 服务运行端口通过, 如果您使用的是 L2TP-IPsec 连接方式(IPhone 默认名字为 L2TP),请放行 UDP 下行 500 和 4500 端口以及 ESP 协议。 如果您使用的是 L2TP 连接方式,请放行 UDP 下行 1701 端口。 并记得 应用更改 。
Linux
以 Ubuntu Linux 为例子来描述,其他的 Linux 分发版都是类似的做法。 安装此客户端分为L2TP、IPsec两个部分。
IPsec部分
第一步,安装依赖包:
$ sudo apt-get install openswan
第二步,修改 /etc/ipsec.conf 配置:
version 2.0
config setup
protostack=netkey
nat_traversal=yes
keep_alive=60
virtual_private=
oe=off
conn %default
rekey=yes
authby=secret
auto=start
type=tunnel
keyexchange=ike
phase2=esp
pfs=yes
dpddelay=15
dpdtimeout=60
dpdaction=restart
conn <l2tp_name>
authby=secret
type=transport
pfs=no
auto=start
left=%defaultroute
leftprotoport=17/1701
right=<l2tp_server_ip>
rightprotoport=17/1701
注解
第三步,修改 /etc/ipsec.secrets 配置:
%any <l2tp_server_ip>: PSK "<psk>"
注解
第四步,重启服务:
$ sudo service ipsec restart
注解
L2TP部分
第一步,安装依赖包:
$ sudo apt-get install xl2tpd ppp
第二步,修改 /etc/xl2tpd/xl2tpd.conf 配置:
[lac <lac_name>]
lns = <l2tp_server_ip>
refuse chap = yes
refuse pap = yes
require authentication = yes
length bit = yes
pppoptfile = /etc/ppp/<l2tp_name>
注解
第三步,新建 /etc/ppp/<l2tp_name> 配置文件:
+chap
lock
refuse-eap
require-chap
require-mschap
require-mschap-v2
noauth
noccp
nodefaultroute
proxyarp
name "<user_name>"
password "<password>"
注解
第四步,重启服务:
$ sudo service xl2tpd restart
第五步,建立连接,如果您想使用IPsec加密,请务必先完成IPsec部分的配置:
$ sudo echo "c <lac_name>" > /var/run/xl2tpd/l2tp-control
注解
第六步,添加路由:
$ sudo ip route add <ip_network> dev <link_name>
注解