我有一个有点特殊的情况,这使管理我的 vpn 有点麻烦,所以我试图让我和我的用户更容易,希望有人能给我一些想法和/或替代方案。
目前的情况是,我有大约 600 个客户端连接到我网络上的大约 6 个服务器,用于 mysql 数据库复制。MySQL 从服务器连接到主服务器,因此连接来自我的网络到客户端网络,我们过去不使用 VPN 来做到这一点,但那远非安全,所以我们已经将每个人都转移到 VPN。
现在他们直接使用 openvpn 连接到他们被分配的服务器。问题是,大多数用户都不懂技术,所以我的团队必须连接到他们(teamviewer 和类似工具)并为他们进行设置,有时我们必须将这些人从一台服务器转移到另一台服务器。目前的情况是,我的小团队中的某个人连接到客户端服务器并更改服务器上的设置,有时是他们的防火墙,这对于一个 3 人团队管理 600 人而言太耗时了。
现在:客户端 --- VPN/MYSQL 服务器
因此,我想让我的生活更轻松,我在私有网络中设置了 6 台服务器,并使用一台额外的虚拟机作为网关。在该虚拟机中,我运行带有 3 个实例的 openvpn,因此每个实例大约有 200 个客户端。请注意,在我们的案例中,MySQL 复制不会使用大量带宽,每个用户大约 40KBps,因为 ADSL 上传速度(大多数客户端使用 adsl)非常糟糕。
现在,我在互联网上阅读,大多数人都说这是不可能的,所以我想这是一个需要仔细检查的地方。
我可以让每个客户端连接到他们的 vpn 实例,但我想让它更容易,并使用像反向代理这样的东西,这样我只有一个外部地址和端口用于连接,并且根据他们连接的地址将它们重定向到 openvpn 服务器上的正确端口。
预期:客户端 --- 防火墙 --- NGINX ---- VPN 服务器上的正确端口
这可能吗?如果 nginx 不行,用别的什么?如果不可能,在这种情况下你会怎么做?我迫切需要一些想法 :)
到目前为止,我尝试设置 nginx 以重定向到 vpn 服务器作为 fastcgi 网关,但没有成功,ovpn 可以访问 nginx,但不会重定向任何内容。如果我使用浏览器尝试,我会收到一个坏网关错误,只有 ovpn 服务器在日志中显示一些生命迹象。
vpn服务器实例如下(共3个,不同的端口和ip池。)
port 4001
proto tcp
dev tun
ca vpnkeys/keys-vpn1/ca.crt
cert vpnkeys/keys-vpn1/vpn1.crt
key vpnkeys/keys-vpn1/vpn1.key # This file should be kept secret
dh vpnkeys/keys-vpn1/dh1024.pem
server 172.16.101.0 255.255.255.0
ifconfig-pool-persist ipp-vpn1.txt
keepalive 10 120
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status-vpn1.log
verb 3
push "10.0.100.11 255.255.255.255"
客户端配置是
client
dev tun
proto tcp
remote vpn-001.myserver.com 80 # firewall throws to nginx on port 4000
resolv-retry infinite
nobind
# comentar as duas linhas abaixo em maquinas windows
user nobody
group nogroup
persist-key
persist-tun
ca ca.crt
cert cliente-xxxxx.crt
key cliente-xxxxx.key
ns-cert-type server
comp-lzo
verb 3
mute-replay-warnings
在 nginx 上,我对每个 vpn 主机名进行了以下配置
server {
listen 4000;
server_name vpn-001.myserver.com;
location / {
fastcgi_pass 10.0.0.137:4001;
}
}
当 ovpn 客户端尝试连接时,我在 nginx 错误日志中收到此垃圾。10.0.0.4 是我的防火墙。
10.0.0.4 - - [25/Jun/2014:17:45:06 -0300] "\x00\x0E8\x84\xF1\xEB\xF2\x14>Z\xF2\x00\x00\x00\x00\x00" 400 173 "-" "-"
10.0.0.4 - - [25/Jun/2014:17:45:12 -0300] "\x00\x0E8\xC1\xE0(A\xD8\xAC\x16\xB2\x00\x00\x00\x00\x00" 400 173 "-" "-"
10.0.0.4 - - [25/Jun/2014:17:45:18 -0300] "\x00\x0E8\x95\xB4\x18[\x03@\xCA\xFC\x00\x00\x00\x00\x00" 400 173 "-" "-"
10.0.0.4 - - [25/Jun/2014:17:45:24 -0300] "\x00\x0E8\xE4{\xEE<\x98\x1B\x97K\x00\x00\x00\x00\x00" 400 173 "-" "-"
10.0.0.4 - - [25/Jun/2014:17:45:30 -0300] "\x00\x0E8\xE0'\x1Fr?\x06\xE33\x00\x00\x00\x00\x00" 400 173 "-" "-"
10.0.0.4 - - [25/Jun/2014:17:45:36 -0300] "\x00\x0E8g\xC8\xD8w8VH2\x00\x00\x00\x00\x00" 400 173 "-" "-"
10.0.0.4 - - [25/Jun/2014:17:45:42 -0300] "\x00\x0E8N\xFC\xCA\xE4\xC58\xD63\x00\x00\x00\x00\x00" 400 173 "-" "-"
10.0.0.4 - - [25/Jun/2014:17:45:48 -0300] "\x00\x0E8TL\x85=\x15\xE4\xF2\xD6\x00\x00\x00\x00\x00" 400 173 "-" "-"
10.0.0.4 - - [25/Jun/2014:17:45:54 -0300] "\x00\x0E8\xB0\x9A\x8D\x8Dq\xBE\xCD3\x00\x00\x00\x00\x00" 400 173 "-" "-"
并且没有任何内容进入 ovpn 服务器日志。(我知道它确实重定向了,因为当我使用浏览器连接到同一地址时,我会从 nginx 收到一个坏网关错误,并且在 ovpn 日志中收到一些响应)
想法?主意?
答案1
也许您可以为每个客户端创建一个 DNS CNAME,例如:
clientname.mysql.myserver.com. CNAME mysql1.myserver.com.
无需连接到自己的 VPN,只需将所有客户端连接到单个 VPN,然后它们只需连接到 mysql 服务器 clientname.mysql.myserver.com。在服务器之间移动客户端数据库就像将此 CNAME 更改为一样简单
clientname.mysql.myserver.com. CNAME mysql2.myserver.com.
这简单多了。但我不确定我是否正确理解了你想要实现的目标。