使用两个 openvpn 客户端公开一个服务器的服务

使用两个 openvpn 客户端公开一个服务器的服务

我目前正在尝试使用两个 openvpn 客户端来公开服务器的服务,正如标题中所述。我可能正在使用超出我目前理解范围的权力,但请耐心等待 :-)

大纲

这是我当前的设置:

           INTERNET eth0 |          | VPN tun0

                  /----- perimeter-a -----\ 
internet clients-:                         :------ server
                  \----- perimeter-b -----/

server在这种情况下也是 VPN 服务器。perimeter-a并且perimeter-b是 VPN 客户端。

server有 eth0(公共接口)、eth1(另一个公共接口)和 tun0(vpn 接口)。每个perimeter都有 eth0(公共接口)和 tun0(vpn 接口)。

目标

目标是让任何人都internet client能够与perimeter-a或对话perimeter-b,并让它们看起来像是由其中之一提供服务,而实际上,您是由 提供服务server。连接到 上的游戏服务器(例如)perimeter-a和 上的游戏服务器perimeter-b将使您每次都最终到达server

此规则的唯一例外是当perimeter-aperimeter-b不转发相应端口时。应在这两台机器中的任何一台上明确转发端口。UDP 和 TCP 都应得到处理。

先前的尝试

internet client我之前的尝试依赖于通过 iptables 进行 NAT,但存在丢失实际地址的问题server。 的地址internet client应该保留 - 这就是为什么我决定使用 VPN 并主要通过server它来驱动往返流量。

想法和当前的尝试

我目前尝试使用perimeter-aperimeter-b作为的互联网网关server。问题是,我不确定当两者perimeters都是 VPN 客户端而不是服务器时是否可以进行设置。

我是否可以将数据包从 中的任何一个 传递到perimeters而不server重写数据包源,然后perimeters通过确定数据包是通过 tun0 进入的,将其发送回 中的任何一个server?但这样一来,我就需要有两个 tun 接口来区分两者perimeters,对吗?然后,当这些数据包到达 时perimeter-XY,我需要让该机器将源重写为自己,并将其发送到internet client,假设数据包来自 tun0 - 对吗?

我现在完全不知所措,找不到任何描述我实际情况的东西。我离解决方案还有多远?我是不是走错了路?这一切真的有可能吗?

本质上,我正在尝试构建两个伪网关和一台机器,并根据连接的来源来使用它们。

编辑1:所讨论的三台服务器不在同一个局域网上——它们分别位于完全不同的位置。

答案1

如果我理解正确的话,Linux 虚拟服务器项目可以解决你试图实现的目标 -http://linuxvirtualserver.org/。至少它会给你指出问题所在。

相关内容