我正在尝试建立一个 OpenVPN“链”,类似于这里描述的内容。 我有两个独立的网络,A 和 B。每个网络都有一个 OpenVPN 服务器,使用标准的“公路战士”或“客户端/服务器”方法。客户端可以连接到任何一个以访问相应网络上的主机/服务。
但服务器A和B也被连接到彼此。每个网络上的服务器在两者之间具有“站点到站点”连接。
我想要实现的是能够作为客户端连接到网络 A,然后与网络 B 上的主机建立连接。我正在对所有 VPN 连接使用 tun/routing。“链”看起来像这样:
[客户端] ---> [服务器 A] ---> [服务器 A] ---> [服务器 B] ---> [服务器 B] ---> [主机 B]
(tun0) (tun0) (tun1) (tun0) (eth0) (eth0)
整个想法是,当来自 tun0 的客户端尝试连接时,服务器 A 应该通过在 tun1 上设置的“站点到站点”VPN 路由发往网络 B 的流量。
我只是通过在服务器 A 上设置两个连接配置文件来做到这一点。一个配置文件是在 tun0 上运行的标准服务器配置,定义虚拟客户端网络、IP 地址池、推送路由等。另一个是到服务器 B 运行的客户端连接在 tun1 上。启用 ip_forwarding 后,我只需向客户端添加一个“推送路由”,向网络 B 通告路由。
在服务器 A 上,当我查看 tcpdump 输出时,这似乎有效。如果我作为客户端连接,然后 ping 网络 B 上的主机,我可以看到流量从服务器 A 上的 tun0 传递到 tun1:
tcpdump -nSi tun1 icmp
奇怪的是我没有看到服务器 B 通过隧道接收流量。就好像服务器 A 像它应该的那样通过站点到站点连接发送它,但服务器 B 完全忽略它。当我在服务器 B 上查找流量时,它根本不存在。
来自服务器 A --> 主机 B 的 ping 工作正常。但是从连接到服务器 A 的客户端到主机 B 的 ping 没有。
我想知道服务器 B 是否因为源 IP 与它分发给客户端的客户端 IP 池不匹配而忽略流量?有谁知道我是否需要在服务器 B 上做一些事情才能看到流量?
这是一个解释起来很复杂的问题,所以如果你能坚持到现在,谢谢。
我找到了解决方案。不需要像答案 #1 描述的那样具有多个/冗余 VPN 连接。我也不认为它可以解决我的问题,尽管我很欣赏这些反馈。
问题是由于这样一个事实,如果源 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 |
- - - - - - - - - - - - {互联网} - - - - - - - - - - - - ----
VPN 客户端 VPN 服务器
172.16.1.12 172.16.2.1
(tun0) (tun0)
所以在这个例子中,“网关 1”是建立到“网关 2”作为 VPN 服务器的隧道的 VPN 客户端。我们想要完成的是主机 A 通过 VPN 与主机 B 通信的能力。所以我们建立了一个标准的 OpenVPN 连接,网关 1 作为客户端到网关 2 服务器。每个网关都有一个“公共”和“私有”接口。一种用于专用网络,一种用于公共 Internet。建立 VPN 连接后,每个服务器都使用一个额外的“tun0”接口。网关 2 作为 VPN Server,接受来自网关 1 的连接,并为其分配 IP 172.16.1.12。
问题是,如果源 IP 是172.16.1.12,网关 2 将只接受通过该 VPN 隧道的流量。
这在网关 1想要连接到主机 B时工作正常,但是当主机 A尝试连接到主机 B 时就出现问题。当主机 A 尝试连接时,网关 1 充当路由器并通过 VPN 隧道正确路由流量转到网关 2(假设您的路由设置正确)。如果您在网关 1的tun0设备上运行 tcpdump ,您甚至会看到来自主机 A 的流量通过隧道,目的地是其他网络。但是网关 2 将源 IP 地址视为10.2.1.15,这与它为连接分配的 IP 地址不匹配,并完全忽略它。
因此解决方案是配置网关 2以通过 VPN 隧道接受来自 10.2.0.0/16 网络的流量。VPN Server 需要使用iroute设置进行配置。对于这一设置,所有的配置参数的方法是在OpenVPN的官方网站上解释在这里,所以我不会在这个岗位重新解释它。
我建议您在阅读本文档时特别注意,您需要在 OpenVPN 配置中使用client-config dirs (CCD)才能使用iroute。请务必仔细阅读文档的那部分。当然,您还需要在所有网关上设置路由,以便他们知道如何通过 VPN 隧道路由流量。参考上图,您仍然需要像这样在网关 2上添加路由:
路由添加-net 10.2.0.0 网络掩码 255.255.0.0 gw 172.16.1.12 tun0
在网关 1 上是这样的:
路由添加-net 10.1.0.0 网络掩码 255.255.0.0 gw 172.16.2.1 tun0
为了在尝试连接到主机 A 时,来自主机 B 的流量能够正确路由通过 VPN。
在我的特殊情况下,网关 1 既充当网关 2的客户端,也充当连接到其他客户端的服务器需要访问主机 A 的 Internet。 所以我需要创建两个接口,tun0 和 tun1,这样一个可以用于客户端到另一个网络的连接,另一个可以用作公路战士连接的服务器我还需要添加额外的路由,以便我可以从 Internet 建立到网关 1(服务器)的 VPN 连接,并且我能够将流量路由到另一个网络上的主机 B。
我希望这可以帮助其他对此感到困惑的人。
| 归档时间: |
|
| 查看次数: |
6892 次 |
| 最近记录: |