如何通过 VPN 将流量路由回其他服务器

如何通过 VPN 将流量路由回其他服务器

我目前正在 2 个站点设置环境。所有服务器都是linux/ubuntu。第一个站点是我的办公室,第二个站点是 AWS。我在 AWS 中的 VPC 中有 2 台服务器,具有站点到站点 VPN Web01 - 172.31.24.106 Revproxy01 - 172.31.17.216

我在办公室有 1 台服务器和 1 个 IP 摄像头 Server1 - 192.168.102.1 Camera1 - 192.168.102.79

VPN 位于 Server1 (IPSec Strongswan) 上,并配置为连接到 AWS 端的 AWS 站点到站点 VPN。

经过大量研究和时间,我已经一切就绪并运行,Web01 和 Revproxy01 可以 ping Server1,并且 Server1 可以 ping Web01 和 Revproxy01。

我的下一步是能够从 Web01 和 RevProxy01 对 Camera1 执行 ping 操作。我最终想从 web01 和 Revproxy01 访问相机 http feed

我想我需要设置路由(在 Server01 上)以通过 Server1 将数据从 Web01 传递到 Camera01。

我非常感谢有人的帮助并学习如何做到这一点?

答案1

好的,我不知道您对路由的工作原理了解多少,所以我将尝试解释一下,然后看看您能从我的解释中理解多少。这个解释并不完全正确,因为实际上有更多的轮子在转动,但应该足够了。

在网络中的每一跳,IP 堆栈都会查看每个传入的 IP 数据包。它比较了目的地IP 地址及其路由表。您可以看到带有 的路由表ip route

首先,它检查数据包的 IP 是否对应于它自己的接口之一。如果是,则数据包的目的地是该跳本身,并且该跳“吞噬”该数据包(将其向上推向 TCP 堆栈)。

如果数据包的目的地不是该跃点本身,则该跃点会检查并从最重要的路由到最不重要的路由遍历自己的路由表。 A/24告诉您 32 位中有 24 位是有效的。那么A/16就不那么重要了。在 IP 堆栈的情况下,ip route将从下到上将数据包的 IP 地址与显示的路由进行比较。第一个与数据包 IP 匹配的路由获胜。因此,当使用目标 IP 192.168.102.10 遍历路由表时,路由 192.168.0.0/16 将与数据包匹配。 192.0.0.0/16 路由则不会。您可以使用该sipcalc工具来显示网络地址信息。

最后匹配的路由将是匹配所有内容的默认路由。

每条路由都包含下一跳,即数据包将发送到的位置。您也许可以在 中更好地看到下一跳/sbin/route -n。它是“路由器”列,还是“接口”列,具体取决于路由表示的网络是否直接连接到该跃点上存在的网络接口。

当数据包通过 VPN 隧道时,IP 数据包将被包装在另一个数据包中。因此,就您而言,只有 VPN 入口点和出口点的内部 IP 才算在内。数据包“神奇地”进入入口点并从出口点跳出。

因此,现在您应该能够确定数据包应采用的每一跳路径,包括源跳数和目标跳数。如果它没有采用您喜欢的路径,那么您必须添加相应的路线。这可以是单个主机路由,也称为192.168.102.79/32(所有位都很重要!仅匹配单个主机!)。查找 的一些示例ip route add

您还想做的是观察经过跃点的数据包。你可以用tcpdump -n -i interface它(f.ex. tcpdump -n -i eth0)。因此,如果您看到一个数据包经过 hop1,并且您认为它应该前往 hop2,但您看不到它经过 hop2,则 hop1 上的路由可能是错误的,并将数据包发送到错误的目的地。

这样您应该能够逐跳分析每个路由表,从源到目的地,查看数据包的路由应该在每一跳上,可能添加路由,以便数据包采用正确的路径,并验证它们确实与tcpdump.

请注意,从源到目的地的两条路线后面需要正确配置。

请注意,错误的路由可能会导致无法通过网络访问计算机。因此,您可能希望有一种通过独立机制而不是通过网络来重新启动计算机的方法。

一旦您的路由工作正常,请确保它能够在重新启动后继续存在。 F. 前。通过写入新路由/etc/network/interfaces(您需要注册的位置取决于该机器上网络堆栈的配置方式。这在不同的 Unix、Linux 发行版等之间有很大差异)

我希望这对您有进一步的帮助。

相关内容