搭建 openvpn 之访问局域网

好风 发表于 2016-11-17T07:06:27.234286Z
引用地址:https://plus.ooclab.com/note/article/1297

简介

实际工作中,常常需要用到 VPN,本文以 OpenVPN 为例,学习下 VPS , Docker , OpenVPN 。

目标

在公司内网搭建一个 openvpn server , 使用 otunnel 映射 1194/tcp 端口到一个公网服务器 (VPS) vpn.example.com 。用户访问 vpn.example.com 的服务,就可以直接访问内网环境。

要求

  • 操作系统:除了客户端,本例的系统环境皆为 CentOS 7 , 其他 GNU/Linux 系统操作类似
  • H1: 公网服务器, VPS即可 (只走流量,CPU,内存无特殊要求)
  • H2: 局域网服务器, 安装 openvpn server
  • vpn.example.com 域名请指向 H1 的公网IP地址

参考

步骤

本步骤实际可行

H2(局域网服务器), 安装 openvpn server

1. 安装 Docker

进入系统:

curl -fsSl https://get.docker.com | bash

2. 下载 OpenVPN Image

docker pull kylemanna/openvpn

3. 配置 server

重要 假设你有一个域名 vpn.example.com , 并配置 DNS 指向 H1(公网服务器) 。

初始化

OVPN_DATA="ovpn-data"
docker run -v $OVPN_DATA:/etc/openvpn --rm kylemanna/openvpn ovpn_genconfig -u tcp://vpn.example.com
docker run -v $OVPN_DATA:/etc/openvpn --rm -it kylemanna/openvpn ovpn_initpki nopass

注意 是一条命令提示输入Common Name (eg: your user, host, or server name) [Easy-RSA CA], 请输入 vpn.example.com

启动 openvpn server :

docker run -v $OVPN_DATA:/etc/openvpn -d -p 1194:1194/tcp --cap-add=NET_ADMIN kylemanna/openvpn

4. 创建 client 配置

docker run -v $OVPN_DATA:/etc/openvpn --rm -it kylemanna/openvpn easyrsa build-client-full CLIENTNAME nopass
docker run -v $OVPN_DATA:/etc/openvpn --rm kylemanna/openvpn ovpn_getclient CLIENTNAME > CLIENTNAME.ovpn

请将上面命令里的 CLIENTNAME 换成有意义的名字

在 H1, H2 服务器上安装 otunnel

1. 下载编译 otunnel

https://github.com/ooclab/otunnel

2. H1 上运行 otunnel server

./otunnel listen :10000 -d -s longlongsecret

3. H2 上运行 otunnel client

./otunnel connect vpn.example.com:10000 -d -s longlongsecret -t r:127.0.0.1:1194::1194

从客户端链接 openvpn 网络

将H2上创建的 CLIENTNAME.ovpn 拷贝出来,配置 openvpn 客户端即可。以命令行为例:

openvpn --config CLIENTNAME.ovpn

FAQ

监听 1194/tcp 端口

网上的资料大多监听 1194/udp 端口,但目前 otunnel 只支持 tcp 端口正反向代理(映射),因此 openvpn server 配置一定要使用 tcp 协议。

客户端链接需要 root 权限

sudo openvpn --config CLIENTNAME.ovpn