使用OpenVPN搞定远程办公

  1. 云栖社区>
  2. 博客>
  3. 正文

使用OpenVPN搞定远程办公

genter 2018-08-26 09:28:45 浏览1068 评论0

摘要: 远程办公,网络不通,使用OpenVPN轻松搞定!

欢迎访问陈同学博客原文
本文基于同事海伟的内部笔记整理,新增了httpbasic demo,client从付费的shimo换成了免费的tunnelblick。

背景:公司VPN仅支持IE浏览器,需在登录VPN账户后一直开着IE的窗口。这对于Mac用户非常不友好,在下班之后、出差中、长期远程办公等场景时非常不便。

这是很多人可能遇到的场景,本文将介绍如何利用openvpn打通网络,不涉及openvpn原理,感兴趣者可自行了解。

搭建VPN非常简单,第一步是选取一台内网服务器部署openvpn server,第二步是用VPN客户端连接。

OpenVPN server

前人栽树,后人乘凉。dockerhub mdns/rancher-openvpn 这个镜像可直接使用,支持httpbasic、ldap等认证方式。如果公司有ldap服务,可直接使用ldap作认证;如果想自行管理用户密码,可以简单使用httpbasic。我将演示这两种方式。

更多关于路由、DNS等相关配置,dockerhub上有更详细的介绍。

首先,选择一台可以访问你的目标网络的内网机器,机器需要分配公网IP(做IP映射之类都可以)。在上面以docker方式安装openvpn server。

ldap 认证

docker run -d \
    --privileged=true \
    -e REMOTE_IP=example.com \
    -e REMOTE_PORT=1194 \
    -e ROUTE_NETWORK=192.168.12.0 \
    -e ROUTE_NETMASK=255.255.255.0 \
    -e PUSHDNS=192.168.211.103 \
    -e AUTH_METHOD=ldap \
    -e AUTH_LDAP_URL=ldap://example.com \
    -e AUTH_LDAP_BASEDN='ou=employee,dc=example,dc=com' \
    -e AUTH_LDAP_SEARCH='(&(employeeNumber=$username)(employeeType=0))' \
    -v /etc/openvpn:/etc/openvpn \
    --name=vpn \
    -p 1194:1194 \
    mdns/rancher-openvpn
  • REMOTE_IP、REMOTE_PORT:可选项,openvpn server所在的主机和端口
  • ROUTE_NETWORK、ROUTE_NETMASK:可选项,如果你不想暴露整个网络出来,可以通过这个配置可以访问的网络范围。如果需要控制更多网络,参考dockerhub的 OPENVPN_EXTRACONF 变量。
  • PUSHDNS:可选项,配置push到VPN client的DNS
  • AUTH_LDAP_URL、AUTH_LDAP_BASEDN、AUTH_LDAP_SEARCH:必要,设置你的LDAP配置信息。`

/etc/openvpn 是各项配置存储的地方,最好mount到磁盘上,这样以后出现问题时可以基于这些配置恢复openvpn server,不用去更新客户端的配置。

运行容器后你需要等待几分钟(取决于机器配置),openvpn server需要生成私钥、公钥等信息。客户端的配置信息可以在容器日志或/etc/openvpn/client.conf 中找到,将内容拷贝出来保存为 client.ovpn,下面介绍VPN客户端时将用到。

client.conf信息如下图所示(图片信息不全,有删减)。

ab26192b69584128a688836331a69cf2.png

httpbasic 认证

运行一个非常简单的openvpn server做Demo,DNS、访问控制等参考ldap的例子。

sudo docker run -d --privileged=true -p 1194:1194 \
    -e REMOTE_IP=example.com \
    -e REMOTE_PORT=1194 \
    -e AUTH_METHOD=httpbasic \
    -e AUTH_HTTPBASIC_URL=https://chenyongjun.vip/httpbasic \
    -v /etc/openvpn:/etc/openvpn \
    --name=vpn \
    mdns/rancher-openvpn
  • AUTH_METHOD设置为httpbasic
  • AUTH_HTTPBASIC_URL设置为你的认证服务URL,https://chenyongjun.vip/httpbasic 是我用博客做的一个httpbasic认证demo。

下面用nginx做一个httpbasic认证的小例子。

location /httpbasic {
    auth_basic "nginx http basic demo";
    auth_basic_user_file /etc/nginx/sites-available/users;

    root /etc/nginx/sites-available/httpbasic;
}

auth_basic_user_file指向的文件用于配置用户/密码,我在users 文件中配置了两个用户:

user1:eQjd/6QJAvqE6
user2:eQjd/6QJAvqE6

密码都是123456,是用 openssl passwd -crypt 123456 命令加密后的密文。

/etc/nginx/sites-available/httpbasic 目录下创建了一个名为 httpbasic 文件,内容为 ok

访问 https://chenyongjun.vip/httpbasic 输入配置的用户/密码即可通过认证,获取到httpbasic文件资源。

至此,基于ldap和httpbasic的两种方式都已介绍完。下面介绍如何在Mac上使用vpn客户端。

OpenVPN client

OpenVPN客户端选择很多,这里选择免费的 Tunnelblick,在官网直接下载,只有16M,很方便。

用 Tunnelblick 打开上面保存的 client.ovpn 客户端配置文件,将会添加一条VPN配置。

f47b313d70bc4d3ca710d4996116003a.png

连接client,输入ldap或httpbasic中的账户密码,会自动完成建立TCP连接、分配IP地址等一系列建立连接的过程,连接成功后会出现如下提示:

2acf2f9908284a5bba666898db24ee1c.png

至此,我们完成了OpenVPN server的搭建,并使用客户端基成功连接,可以通过VPN访问OpenVPN server 中设定的网段。

如果有国外的云服务器,顺手搭建个VPN,给团队内的伙伴们送上翻墙梯子,也是不错的小福利。


欢迎关注陈同学的公众号,一起学习,一起成长

【云栖快讯】一站式开发者服务,海量学习资源免费学  详情请点击

网友评论