如何在 CentOS 中将特定目标 IP 地址的出站流量路由到 GRE 隧道?

如何在 CentOS 中将特定目标 IP 地址的出站流量路由到 GRE 隧道?

你好,我正在尝试配置一个类似该网络图的网络:-

在此处输入图片描述

好吧,我必须在我的 alpha 服务器上创建一个 GRE 隧道,并将一些特定流量路由到 GRE 隧道。我想在 CentOS 上进行配置。我将解释以下场景:-

我的服务器中有两块网卡,一块是 eth0,一块是 eth1。eth1 连接到互联网,eth0 连接到网络 A。现在我已经通过 eth1 创建了一条通过互联网的 GRE 隧道。现在我想要传出的流量,例如目标 IP 地址为 190.93.247.183 或 www.serverfault.com 的流量应该通过我的 GRE 隧道,其余所有流量都应该通过 eth0。我该怎么做?我认为这可以通过静态路由实现。请逐步解释命令,因为我对 CentOS 和网络不太熟悉。谢谢。

答案1

虽然您的描述没有提供足够的信息(例如 IP 等)来让我们提供完整的答案,但基本思想是您创建一个静态路由,以便您想要的特定 IP 的任何流量都通过 GRE 隧道。

因此,例如,如果您想190.93.247.183通过 GRE 隧道进行路由,则可以使用以下命令添加静态路由。

ip route add 190.93.247.183 via 10.0.0.1 dev tun0

10.0.0.1地址是 GRE 隧道的远程地址(而不是公共地址),将用作网关。
因此,您可以将其替换为您在隧道上配置的任何地址。在您的图表中,您将此地址称为gre addr

您还需要将其替换tun0为您的 GRE 隧道接口的名称。

这条路线应该添加到侧面client(我不确定你的图表上的哪一侧是哪一侧,你在那里提到了 alpha 和 beta,但没有在你的描述中提到)

这将通过隧道路由该 IP 的所有内容(UDP、TCP、ICMP...)。
还请记住,这仅适用于 IP。因此,如果您想路由 www.serverfault.com(解析为多个 IP - 并且可能会不时更改),则无法通过 DNS 进行路由。您需要为要通过隧道路由的所有相关 IP 添加静态路由。

最后请记住,静态路由在重启后会丢失。
您需要将其添加到某个配置文件中,以便在重启后继续保留。根据您的发行版,情况会有所不同。

以下是 Debian(或基于 Debian)发行版的示例:

在档案中/etc/network/interfaces

auto tun1
iface tun1 inet static
    address <tunnel IP>
    netmask <tunnel subnet mask>
    pre-up iptunnel add tun1 mode gre local <local IP> remote <remote IP> ttl 255
    up ifconfig tun1 multicast
    pointopoint <remote tunnel IP>
    post-up ip route add <IP to route via tunnel> via <remote tunnel IP> dev tun0
    post-down iptunnel del tun1

编辑:

抱歉,我没有看到您提到您使用 CentOS。
以下是在 CentOS(或任何基于 RHEL 的)机器上添加永久静态路由的方法。

您需要创建一个路线根据您的接口名称创建文件。
例如,如果您的接口名称(在您的例子中是隧道)是,tun0那么您需要创建以下文件: /etc/sysconfig/network-interfaces/route-tun0

在其中只需添加以下内容:

<IP to route via tunnel> via <remote tunnel IP>

对于任何您想要通过隧道路由的额外 IP 或子网,您只需在同一文件中添加更多行(如 abone 行)。
对于子网,您可以按以下格式添加它们:10.0.0.0/8

最后,要应用上述配置,您可以关闭然后打开 tun0 接口

ifdown tun0 ; ifup tun0

或者彻底重启网络

service network restart

答案2

添加路由规则,将目标 IP(远程 LAN 上的 IP)路由到 GRE 网络上的远程 IP(远程路由器)

相关内容