陈同学
微服务
Accelerator
About
#15min运维之使用OpenVPN搭建VPN > 本文基于同事海伟的内部笔记整理,新增了httpbasic demo,client从付费的shimo换成了免费的tunnelblick。 **背景**:公司VPN仅支持IE浏览器,需在登录VPN账户后一直开着IE的窗口。这对于Mac用户非常不友好,在下班之后、出差中、长期远程办公等场景时非常不便。 这是很多人可能遇到的场景,本文将介绍如何利用openvpn打通网络,不涉及openvpn原理,感兴趣者可自行了解。 搭建VPN非常简单,第一步是选取一台内网服务器部署openvpn server,第二步是用VPN客户端连接。 ## OpenVPN server 前人栽树,后人乘凉。dockerhub [mdns/rancher-openvpn](https://hub.docker.com/r/mdns/rancher-openvpn/) 这个镜像可直接使用,支持httpbasic、ldap等认证方式。如果公司有ldap服务,可直接使用ldap作认证;如果想自行管理用户密码,可以简单使用httpbasic。我将演示这两种方式。 更多关于路由、DNS等相关配置,dockerhub上有更详细的介绍。 首先,选择一台可以访问你的目标网络的内网机器,机器需要分配公网IP(做IP映射之类都可以)。在上面以docker方式安装openvpn server。 ### ldap 认证 ```shell 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`信息如下图所示(图片信息不全,有删减)。 <img src="https://blog-1256695615.cos.ap-shanghai.myqcloud.com/2018/08/25/ab26192b69584128a688836331a69cf2.png" width="60%"> ### httpbasic 认证 运行一个非常简单的openvpn server做Demo,DNS、访问控制等参考ldap的例子。 ```shell 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认证的小例子。 ```xml 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](https://chenyongjun.vip/httpbasic) 输入配置的用户/密码即可通过认证,获取到httpbasic文件资源。  至此,基于ldap和httpbasic的两种方式都已介绍完。下面介绍如何在Mac上使用vpn客户端。 ## OpenVPN client OpenVPN客户端选择很多,这里选择免费的 [Tunnelblick](https://tunnelblick.net/),在官网直接下载,只有16M,很方便。  用 Tunnelblick 打开上面保存的 `client.ovpn` 客户端配置文件,将会添加一条VPN配置。 <img src="https://blog-1256695615.cos.ap-shanghai.myqcloud.com/2018/08/25/f47b313d70bc4d3ca710d4996116003a.png" width="30%"> 连接client,输入ldap或httpbasic中的账户密码,会自动完成建立TCP连接、分配IP地址等一系列建立连接的过程,连接成功后会出现如下提示: <img src="https://blog-1256695615.cos.ap-shanghai.myqcloud.com/2018/08/25/2acf2f9908284a5bba666898db24ee1c.png" width="40%"> 至此,我们完成了OpenVPN server的搭建,并使用客户端基成功连接,可以通过VPN访问OpenVPN server 中设定的网段。 如果有国外的云服务器,顺手搭建个VPN,给团队内的伙伴们送上翻墙梯子,也是不错的小福利。
本文由
cyj
创作,可自由转载、引用,但需署名作者且注明文章出处。
文章标题:
15min运维之使用OpenVPN搭建VPN
文章链接:
https://chenyongjun.vip/articles/69
扫码或搜索 cyjrun 关注微信公众号, 结伴学习, 一起努力