我有两台物理机(均为 Ubuntu Linux),位于不同的托管公司。现在其中一台机器运行虚拟机,客户端可以通过 VPN(OpenVPN)访问。我现在需要的是将另一台物理服务器与其虚拟机连接起来,以便 VPN 客户端也可以看到它,并可以从内部 DNSMasq 服务器获取其本地 IP。
以下是我的当前配置:
+--------------------------------------+
| Current VPN Server |
| |
| |
|------+ |
| | +-----------------+ |
| tun |<====>| DNSMasq | |
| | +-----------------+ |
|------+\ ^ ^ |
| || \\ / \ |
| || \\ / \ |
| || \\ / \ |
| +---------------------------------+ |
| | VH 1 | VH 2 | ... | VN N | |
| | | | | | |
| | | | | | |
| | | | | | |
| +---------------------------------+ |
| |
+--------------------------------------+
因此 VPN 客户端可以使用内部 DNSMasq 实例解析私有名称,从而与虚拟机进行通信。每个虚拟主机 (VH) 实例都从 DNSMasq 检索其 IP 地址。VPN 服务器使用 iptables NAT 规则路由对此 IP 的访问。
现在我想添加一个额外的物理服务器,以便所有内容对于客户端和虚拟主机来说都是透明的:
+--------------------------------------+ +--------------------------------------+
| Current VPN Server | | New Server |
| /============================================\ |
| v | | v |
|------+ | |------+ |
| | +-----------------+ | | | |
| tun |<====>| DNSMasq |<---------+ | tun | |
| | +-----------------+ | | | | |
|------+\ ^ ^ | | |------+\ |
| || \\ / \ | | | || \\ |
| || \\ / \ | | | || \\ |
| || \\ / \ | | | || \\ |
| +---------------------------------+ | | | +---------------------------------+ |
| | VH 1 | VH 2 | ... | VN N | | | | | VH 1 | VH 2 | ... | VN N | |
| | | | | | | | | | | | | | |
| | | | | | | | | | | | | | |
| | | | | | | | | | | | | | |
| +---------------------------------+ | | | +---------------------------------+ |
| | | | | | | |
+--------------------------------------+ | +----|--------|-------------------|----+
| | | |
+--------+--------+-------------------+
换句话说:
- 新服务器上的虚拟主机必须与当前 VPN 服务器上的虚拟主机位于同一子网
- 新服务器的虚拟主机必须使用安全通道与当前 VPN 服务器进行通信
- DNSMasq 应通过 DHCP 将 IP 地址分配给新服务器的虚拟主机
- OpenVPN 服务器的客户端应该能够访问新服务器上的虚拟主机
请给我一个教程或者提供一些详细的解释。
答案1
正如 JelmerS 所写,您应该考虑 L3 VPN。
如果您确实需要分布式 L2 解决方案:
- TUN 接口创建 L3 隧道。您需要 TAP 来实现 L2
- 如果您正在运行多个虚拟机,并且它们可以在一个 L2 段中互相看到对方,那么您可能已经有桥接适配器,可以将所有机器和主机连接在一起。
- 在第一台和第二台服务器之间创建 L2 VPNOpenVPN 以太网桥接
- 由 OpenVPN TAP 适配器创建的连接到 server1 上的桥接
- 由 OpenVPN TAP 适配器创建的连接到 server2 上的桥接
结果:所有虚拟机和两台服务器都位于一个 L2 子网中。客户端可以通过连接到 L3-VPN(TUN 接口)来访问虚拟机,第一台服务器充当带有 NAT 的路由器。