跨城区局域网的搭建(基于Docker)
概述:
管理复杂网络内的系统,有时候需要突破网络限制.有比较多的方案,比如ss5,Shadowsocks,vpn等. 这里提供一种方案是利用 docker-openvpn 实施多重复杂网络内的主机互联,实现利用nginx反向代理各类服务.
概念图:
具体流程:
购买云服务器部署docker
建议购买支持systemctl的Linux系统,比较好管理,并部署docker:
- 外挂存储格式化为xfs分区;
1 2
# mkfs.xfs /dev/vdb5 # echo "/dev/vdb5 /mnt/data xfs defaults 1 1" |tee -a /etc/fstab
- 调整docker的目录,两种方法;
- 挂载/var/lib/docker目录:
1 2 3 4 5 6
# systemctl stop docker # mkdir -p /mnt/data/docker # rsync -aXS /var/lib/docker/. /mnt/data/docker/ # echo "/mnt/data/docker /var/lib/docker none bind 0 0"|tee -a /etc/fstab # mount -a # systemctl start docker
- 指定具体目录: 在/etc/systemd/system/multi-user.target.wants/docker.service里面修改如下:
1
ExecStart=/usr/bin/dockerd --storage-driver=overlay2 -g /mnt/hhd/docker
安装docker-openvpn服务:
- Pick a name for the $OVPN_DATA data volume container, it will be created automatically.
1
# OVPN_DATA="ovpn-data"
- Initialize the $OVPN_DATA container that will hold the configuration files and certificates如果使用tcp
1 2 3 4 5 6
# docker volume create --name $OVPN_DATA # docker run -v $OVPN_DATA:/etc/openvpn \ --rm kylemanna/openvpn ovpn_genconfig \ -u udp://VPN.SERVERNAME.COM # docker run -v $OVPN_DATA:/etc/openvpn \ --rm -it kylemanna/openvpn ovpn_initpki
1 2 3
# docker run -v $OVPN_DATA:/etc/openvpn \ --rm kylemanna/openvpn ovpn_genconfig \ -u tcp://VPN.SERVERNAME.COM:1443
- Start OpenVPN server processOR
1 2 3
# docker run -v $OVPN_DATA:/etc/openvpn -d \ -p 1194:1194/udp \ --cap-add=NET_ADMIN kylemanna/openvpn
Running a Second Fallback TCP Container1 2 3
# docker run -v $OVPN_DATA:/etc/openvpn -d \ -p 1443:1194/tcp \ --cap-add=NET_ADMIN kylemanna/openvpn
1 2 3 4
# docker run -v $OVPN_DATA:/etc/openvpn \ --rm -p 1443:1194/tcp \ --privileged kylemanna/openvpn ovpn_run \ --proto tcp
- Generate a client certificate without a passphrase . Retrieve the client configuration with embedded certificates, “CLIENTNAME"可自定义;
1 2 3 4
# 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
- 增加路由规则 在docker主机上增加一条路由规则,目的是使其他容器可以通过默认的网络来访问到openvpn客户端的节点:
1
# ip route add 192.168.255.0/24 via $DOCKER_OPENVPN_IP
- 给客户端配置静态内外IP。
1 2
# cat ccd/CLIENTNAME ifconfig-push 192.168.255.10 192.168.255.9
部署前端代理
- 选择 DOCKER-CADDY 做反向代理:
|
|
- CADDY的配置参考:
|
|
部署TCP代理
- 选择 DOCKER-HAPROXY 并部署:
1 2 3 4 5 6
docker run -d \ -v $(pwd)/haproxy:/usr/local/etc/haproxy:ro \ -p xxx:xxx -p yyy:yyy \ --name haproxy \ --link openvpn:openvpn \ haproxy