Networking

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

  • February 18, 2015

您好我正在嘗試配置像這樣的網路圖的網路:-

在此處輸入圖像描述

好吧,我必須在我的 alpha 伺服器上創建一個 GRE 隧道,並將一些特定的流量路由到 GRE 隧道。我想在 CentOS 上進行配置。我將在下面解釋這個場景:-

我的伺服器中有兩個網卡。一個是 eth0,一個是 eth1。eth1 連接到網際網路,eth0 連接到網路 A。現在我創建了一個通過 eth1 的網際網路 GRE 隧道。現在我想要目標 IP 地址為 190.93.247.183 或 www.serverfault.com 的傳出流量應該通過我的 GRE 隧道和其餘所有流量都應該通過 eth0。我該怎麼做?我認為這可以通過靜態路由實現。請逐步解釋命令,因為我不太熟悉 CentOS 和網路。謝謝。

雖然您的描述沒有為我們提供足夠的資訊(例如 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)的 disto 範例:

存檔/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

引用自:https://serverfault.com/questions/665933