![使用两个 openvpn 客户端公开一个服务器的服务](https://linux22.com/image/656466/%E4%BD%BF%E7%94%A8%E4%B8%A4%E4%B8%AA%20openvpn%20%E5%AE%A2%E6%88%B7%E7%AB%AF%E5%85%AC%E5%BC%80%E4%B8%80%E4%B8%AA%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%9A%84%E6%9C%8D%E5%8A%A1.png)
我目前正在尝试使用两个 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-a
或perimeter-b
不转发相应端口时。应在这两台机器中的任何一台上明确转发端口。UDP 和 TCP 都应得到处理。
先前的尝试
internet client
我之前的尝试依赖于通过 iptables 进行 NAT,但存在丢失实际地址的问题server
。 的地址internet client
应该保留 - 这就是为什么我决定使用 VPN 并主要通过server
它来驱动往返流量。
想法和当前的尝试
我目前尝试使用perimeter-a
和perimeter-b
作为的互联网网关server
。问题是,我不确定当两者perimeters
都是 VPN 客户端而不是服务器时是否可以进行设置。
我是否可以将数据包从 中的任何一个 传递到perimeters
而不server
重写数据包源,然后perimeters
通过确定数据包是通过 tun0 进入的,将其发送回 中的任何一个server
?但这样一来,我就需要有两个 tun 接口来区分两者perimeters
,对吗?然后,当这些数据包到达 时perimeter-XY
,我需要让该机器将源重写为自己,并将其发送到internet client
,假设数据包来自 tun0 - 对吗?
我现在完全不知所措,找不到任何描述我实际情况的东西。我离解决方案还有多远?我是不是走错了路?这一切真的有可能吗?
本质上,我正在尝试构建两个伪网关和一台机器,并根据连接的来源来使用它们。
编辑1:所讨论的三台服务器不在同一个局域网上——它们分别位于完全不同的位置。
答案1
如果我理解正确的话,Linux 虚拟服务器项目可以解决你试图实现的目标 -http://linuxvirtualserver.org/。至少它会给你指出问题所在。