我正在尝试建立一个 OpenVPN“链”,类似于所描述的这里。 我有两个独立的网络,A 和 B。每个网络都有一个 OpenVPN 服务器,采用标准的“road warrior”或“客户端/服务器”方法。客户端可以连接到其中任何一个网络,以访问相应网络上的主机/服务。
但服务器 A 和 B 也连接到彼此. 各个网络上的服务器之间均有“站点到站点”的连接。
我想要实现的功能是能够作为客户端连接到网络 A,然后与网络 B 上的主机建立连接。我使用 tun/routing 进行所有 VPN 连接。“链”看起来如下所示:
[客户端] ---> [服务器 A] ---> [服务器 A] ---> [服务器 B] ---> [服务器 B] ---> [主机 B]
(tun0) (tun0) (tun1) (tun0) (eth0) (eth0)
整个想法是,当来自 tun0 的客户端尝试连接时,服务器 A 应该通过在 tun1 上设置的“站点到站点”VPN 路由发往网络 B 的流量。
我只需在服务器 A 上设置两个连接配置文件即可。一个配置文件是在 tun0 上运行的标准服务器配置,定义虚拟客户端网络、IP 地址池、推送路由等。另一个是客户连接到在 tun1 上运行的服务器 B。启用 ip_forwarding 后,我只需向客户端添加一条“推送路由”即可通告到网络 B 的路由。
在服务器 A 上,当我查看 tcpdump 输出时,这似乎有效。如果我以客户端身份连接,然后 ping 网络 B 上的主机,我可以看到流量从服务器 A 上的 tun0 传递到 tun1:
tcpdump -nSi tun1 icmp
奇怪的是,我没有看到服务器 B 通过隧道接收该流量。就好像服务器 A 像应该的那样通过站点到站点连接发送流量,但服务器 B 完全忽略了它。当我在服务器 B 上查找流量时,根本找不到它。
从服务器 A --> 主机 B 执行 ping 操作可以正常工作。但是从连接到服务器 A 的客户端执行 ping 操作到主机 B 则不行。
我想知道服务器 B 是否因为源 IP 与它分发给客户端的客户端 IP 池不匹配而忽略了流量?有人知道我是否需要在服务器 B 上执行某些操作才能让它看到流量吗?
这是一个很难解释的问题,所以如果您能坚持到现在,谢谢。
答案1
我找到了解决方案。无需像答案 #1 中描述的那样建立多个/冗余 VPN 连接。我也不认为这会解决我的问题,尽管我很感谢反馈。
问题在于,如果源 IP 地址与建立隧道时服务器分配给客户端的 IP 地址相匹配,OpenVPN 服务器将仅接受通过已连接客户端隧道的 IP 流量。来自任何其他源 IP 地址的流量通过隧道将被服务器完全忽略。
请看以下内容:
10.2.1.15 10.2.0.1/123.123.123.1 124.124.124.1/10.1.0.1 10.1.1.20
(eth0) (eth0/eth1) (eth0/eth1) (eth0)
---------- ------------- ------------ ----------
| 主机 A |-------------| 网关 1 |------------------------------------------| 网关 2 |--------| 主机 B |
---------- -------------- {INTERNET} ---------------- -----------
VPN 客户端 VPN 服务器
172.16.1.12 172.16.2.1
(tun0) (tun0)
因此,在此示例中,“网关 1”是 VPN 客户端,它与作为 VPN 服务器的“网关 2”建立隧道。我们想要实现的是主机 A 能够通过 VPN 与主机 B 通信。因此,我们建立了一个标准的 OpenVPN 连接,网关 1 作为网关 2 服务器的客户端。每个网关都有一个“公共”和“私有”接口。一个用于私有网络,一个用于公共 Internet。建立 VPN 连接后,每个服务器都使用一个额外的“tun0”接口。网关 2 充当 VPN 服务器,接受来自网关 1 的连接,并为其分配 IP 172.16.1.12。
问题是,如果源 IP 为172.16.1.12。
当网关 1想要连接到主机 B,但当主机 A尝试连接到主机 B。当主机 A 尝试连接时,网关 1 充当路由器,并通过 VPN 隧道将流量正确路由到网关 2(假设您已正确设置路由)。如果您在tun0网关 1 的设备,您甚至会看到来自主机 A 的流量通过隧道,目的地是另一个网络。但网关 2 认为源 IP 地址是10.2.1.15哪个不匹配它为该连接分配的 IP 地址,并完全忽略它。
所以解决方案是配置网关 2通过 VPN 隧道接受来自 10.2.0.0/16 网络的流量。VPN 服务器需要配置伊洛特设置。设置步骤和所有配置参数均在 OpenVPN 官方网站上说明这里所以我不会在这篇文章中重新解释它。
我建议你在阅读本文档时,特别注意你需要使用客户端配置目录(CCD)在您的 OpenVPN 配置中,以便使用伊洛特。请务必仔细阅读文档的这一部分。当然,您还需要在所有网关上设置路由,以便它们知道如何通过 VPN 隧道路由流量。参考上图,您仍然需要在网关 2像这样:
路由添加-net 10.2.0.0 网络掩码 255.255.0.0 gw 172.16.1.12 tun0
在 Gateway 1 上如下:
路由添加-net 10.1.0.0 网络掩码 255.255.0.0 gw 172.16.2.1 tun0
为了使主机 B 的流量在尝试连接到主机 A 时能够正确通过 VPN 路由。
在我的特定情况下,网关 1 同时充当客户到网关 2,同时也作为服务器到需要访问主机 A 的互联网连接的其他客户端。因此,我需要创建两个接口,tun0 和 tun1,以便一个接口可用于客户端连接到其他网络,另一个接口可用作远程连接的服务器。我还需要添加其他路由,以便我可以从互联网建立到网关 1(服务器)的 VPN 连接,并且我能够将流量路由到主机B在另一个网络上。
我希望这能帮助其他对此感到困惑的人。
答案2
我最近设置了这个。我需要的魔法是在 openvpn.confs 中添加正确的路由命令。
我的配置比你的还要复杂一点。我有三个站点,恰好是 EC2 区域:us-east-1 (VA)、us-west-1 (CA) 和 us-west-2 (OR)。每个站点都有自己的私有 IP 范围,如下所示:
VA 10.1.0.0/16
CA 10.0.0.0/16
OR 10.10.0.0/16
配置为 OR <=> CA <=> VA,其中 CA 形成中央“枢纽”。
主机 vavpn
配置 va-to-ca.conf
# Sample OpenVPN configuration file using a pre-shared static key
# Port to use: 1194 is the official IANA port number
port 1194
# Use a dynamic tun device.
dev tun
# Remote peer and network
remote 54.241.174.228
route 10.0.0.0 255.255.0.0
route 10.10.0.0 255.255.0.0
# Configure local and remote VPN endpoints
ifconfig 169.254.255.1 169.254.255.2
# The pre-shared static key
secret ovpn.key
# keepalive
keepalive 10 120
主机 cavpn
配置 ca-to-va.conf
# Sample OpenVPN configuration file using a pre-shared static key
# Port to use: 1194 is the official IANA port number
port 1195
# Use a dynamic tun device.
dev tun
# Remote peer and network
remote 54.244.21.223
route 10.10.0.0 255.255.0.0
# Configure local and remote VPN endpoints
ifconfig 169.254.255.3 169.254.255.4
# The pre-shared static key
secret ovpn.key
# keepalive
keepalive 10 120
配置 ca-to-or.conf
# Sample OpenVPN configuration file using a pre-shared static key
# Port to use: 1194 is the official IANA port number
port 1194
# Use a dynamic tun device.
dev tun
# Remote peer and network
remote 54.236.173.50
route 10.1.0.0 255.255.0.0
# Configure local and remote VPN endpoints
ifconfig 169.254.255.2 169.254.255.1
# The pre-shared static key
secret ovpn.key
# keepalive
keepalive 10 120
主机或VPN
配置或到 ca.conf
# Sample OpenVPN configuration file using a pre-shared static key
# Port to use: 1194 is the official IANA port number
port 1195
# Use a dynamic tun device.
dev tun
# Remote peer and network
remote 54.241.174.228
route 10.0.0.0 255.255.0.0
route 10.1.0.0 255.255.0.0
# Configure local and remote VPN endpoints
ifconfig 169.254.255.4 169.254.255.3
# The pre-shared static key
secret ovpn.key
# keepalive
keepalive 10 120
请留意发往另一个端点的路由命令。我认为,如果您布局了网络和任一端点的所有 IP,您将能够快速将我的示例修改为您的拓扑。