使用 OpenVPN 互联多地机房及Dokcer跨主机/机房通讯

服务器网络结构及 Docker 网络配置

下面是整体网络结构:

这个是 Docker 在各服务器的网络配置

配置要求

将两地机房及办公室网络互联, 即 IDCA, IDCB, OFFICE 互相可访问

详细配置

将 IDCA 的网关(10.10.1.159) 作为 OpenVPN Server, IDCB的网关(10.11.1.171) 及 OFFICE 内的机器用作 OpenVPN Client

10.10.1.159 (IDCA 网关)

OpenVPN Server 配置

首先需要在这台机器上安装 OpenVPN Server, 并为 IDCB 及 OFFICE 生成相应的 SSL 证书, 以备后续使用

证书制作方法可见这里 http://www.lsproc.com/post/easyrsa-generate-ssl-cert/

证书 Common Name 要使用不同的名称

VPN 相关配置如下

port 1194
proto udp
dev tun
ca keys/ca.crt
cert keys/server.crt
key keys/server.key
dh keys/dh.pem
server 10.7.0.0 255.255.0.0

push "route 10.10.1.0 255.255.255.0"
push "route 10.11.0.0 255.255.0.0"
push "route 10.21.0.0 255.255.0.0"
push "route 10.31.0.0 255.255.0.0"
push "route 10.0.9.0 255.255.255.0"

client-config-dir ccd
route 10.11.0.0 255.255.0.0
route 10.31.0.0 255.255.0.0
route 10.0.9.0 255.255.255.0

client-to-client
duplicate-cn
keepalive 10 120
comp-lzo
persist-key
persist-tun
verb 4

其中 10.7.0.0/16 段的 IP 用于 OpenVPN 的 tun

另外需要在 ccd 目录下放置与 OpenVPM Client 证书文件(上面生成好的) Common Name 同名的文件, 内容如下

ccd/client-idcb:

iroute 10.11.0.0 255.255.0.0
iroute 10.31.0.0 255.255.0.0

ccd/client-office:

iroute 10.0.9.0 255.255.255.0

路由设置

vim /etc/sysconfig/network-scripts/eth0.route

ADDRESS0=10.21.2.0
NETMASK0=255.255.255.0
GATEWAY0=10.10.1.161

ADDRESS1=10.21.3.0
NETMASK1=255.255.255.0
GATEWAY1=10.10.1.163

手动执行命令示例如下:

route add -net 10.21.2.0/24 gw 10.10.1.161 eth0

此处 eth0 为内网网卡

10.11.1.171 (IDCB 网关)

OpenVPN Client 配置

现在此机器上安装 OpenVPN Client, 并使用之前生成的证书(client-idcb)连接 OpenVPN Server

相关配置如下:

client
dev tun
proto udp
remote x.x.x.x 1194
persist-key
persist-tun
ca /path/to/ca.crt
cert /path/to/client-idcb.crt
key /path/to/client-idcb.key
comp-lzo
verb 4
auth-user-pass /path/to/openvpn-secret

openvpn-secret 中可放置 VPN 的帐号密码, 实现自动登录, 格式如下

username
password

路由配置

vim /etc/sysconfig/network-scripts/eth0.route

ADDRESS0=10.31.2.0
NETMASK0=255.255.255.0
GATEWAY0=10.11.1.173

10.0.9.10 (OFFICE)

OpenVPN Client 配置

办公室的 OpenVPN Client 配置到 10.0.9.10 这台机器, 用于从服务器访问办公室内网使用

配置基本与 10.11.1.171 相同, 只需改成对应的证书就可以

client
dev tun
proto udp
remote x.x.x.x 1194
persist-key
persist-tun
ca /path/to/ca.crt
cert /path/to/client-office.crt
key /path/to/client-office.key
comp-lzo
verb 4
auth-user-pass /path/to/openvpn-secret

办公室内其他机器需要访问服务器内网的话需单独运行 OpenVPN Client, 服务端无需额外的路由配置

如果想要使办公室的其他电脑直接访问服务器内网可以将 10.0.9.10 当作网关

IDCA 内其他机器

路由配置

ADDRESS0=10.0.0.0
NETMASK0=255.0.0.0
GATEWAY0=10.10.1.159

IDCB 内其他机器

路由配置

ADDRESS0=10.0.0.0
NETMASK0=255.0.0.0
GATEWAY0=10.11.1.171

Docker 网络配置

为了使 Docker 能够访问外网以及与其他机器互访还需要做相应的配置

首先, 需要开启 ip_forward

/etc/sysctl.conf

net.ipv4.ip_forward = 1

sysctl -p 使配置生效

其次, 需要配置 iptables nat 规则, 示例如下:

iptables -t nat -A POSTROUTING -s 10.21.2.0/24 ! -o docker0 -j MASQUERADE

这里的 10.21.2.0 就是当前机器 docker0 网桥的 IP

Docker daemon iptables 开启(默认)时会自动创建这条规则

其他

OpenVPN 问题排查可查看日志文件 openvpn-status.log, 里面包含了已连接客户端及路由表信息

2015-06-19 01:47 341 linux networking vpn openvpn docker route