在外面连接 wifi 的时候,我总是担心我的连接是不是安全的,会不会别人提供的 wifi 是被监听或者是钓鱼的 wifi。每当这个时候,我都想关掉 wifi,但是看一下 4G 的标志不免又蛋疼了一波,然后就不玩手机了——世界真美好。其实解决方案一直都知道,那就是连接别人 wifi 的时候连接一下 VPN,这样可以加密你的流量,本来 VPN 出现的初衷就是为了在外办公加密连接数据用的,但是搭建自己的 VPN 是很繁琐的,所以,Docker 的出现极大地简化了这个过程,本文将以个人的体验介绍一下使用 Docker 快速搭建 VPN 服务器。

声明和提醒

声明:本文的目的是为了在外安全使用 Wifi,请勿用于其他用途,本文仅作科普与个人经验记录,如读者使用其他用途,本人不承担各种责任。

这里再科普一条,除了 vpn,大家常听到的名词还有 ss,其实 ss 并不能保密你的数据,只能帮助你跨网络,所以当你在外面使用 wifi 的时候,连接 ss 也并不能帮助你加密网络流量,请注意!!!

使用 docker 搭建 VPN 服务器

在 docker hub 中,有一个叫做 "ipsec-vpn-server" 的 image, 使用这个 Docker 镜像可以让我们快速搭建 IPsec VPN 服务器,这个 Image 支持 IPsec/L2TPIPsec/XAuth ("Cisco IPsec") 协议(Mac 系统上默认没有 PPTP)。

下面就从零开始介绍如何在 Ubuntu 14.04 上面安装这个镜像

安装 Docker

直接就是照着下面的命令一顿狂敲:

1
2
3
4
5
6
echo deb http://get.docker.com/ubuntu docker main > /etc/apt/sources.list.d/docker.lis
apt-key adv --keyserver pgp.mit.edu --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
sudo apt-get update
apt-get -y upgrade
apt-get install -y lxc-docker-1.3.3
apt-get upgrade lxc-docker

完成之后 docker 就在你的机器上安装上了。

下载

预构建的可信任镜像可在 Docker Hub registry 下载:

docker pull hwdsl2/ipsec-vpn-server

或者,你也可以自己从 GitHub 编译源代码

启动镜像开启 VPN 服务器

运行 IPsec VPN 服务器

(重要) 首先你需要在 Docker 服务器上加载 IPsec NETKEY 内核模块:

sudo modprobe af_key

使用以下命令创建并运行一个新的 Docker 容器:

docker run \
    --name ipsec-vpn-server \
    -p 500:500/udp \
    -p 4500:4500/udp \
    -v /lib/modules:/lib/modules:ro \
    -d --privileged \
    --restart=always \
    hwdsl2/ipsec-vpn-server

获取 VPN 登录信息

要获取 VPN 的登录信息,可以查看正在运行的 Docker 容器的日志:

docker logs ipsec-vpn-server

在命令输出中查找这些行:

Connect to your new VPN with these details:

Server IP: <VPN Server IP>
IPsec PSK: <IPsec pre-shared key>
Username: <VPN Username>
Password: <VPN Password>

查看服务器状态

如需查看你的 IPsec VPN 服务器状态,可以在容器中运行 ipsec status 命令:

docker exec -it ipsec-vpn-server ipsec status

配置客户端

这一步可以忽略,如果你知道如何连接 VPN 客户端的话,如果不知道,那么你可以参照下面的这些教程配置你的计算机或其它设备使用 VPN 。请参见:

如果在连接过程中遇到错误,请参见 故障排除

Reference

Image 作者授权协议

版权所有 (C) 2016 Lin Song
基于 Thomas Sarlandie 的工作 (Copyright 2012) (版权所有 2012)

这个项目是以 知识共享署名-相同方式共享3.0 许可协议授权。
必须署名: 请包括我的名字在任何衍生产品,并且让我知道你是如何改善它的!