
我想知道我是否有一個帶有 2 個網路介面(1.1.1.1 和 2.2.2.2)的 VPS,並將 1.1.1.1 設定為主...
eth0 = 1.1.1.1
eth0:1 = 2.2.2.2
現在我想路由domain.com的所有流量(我不知道該網域是否使用Cloudflare)以透過IP 2.2.2.2 eth0:1
前1:
如果運行不當,
wget domain.com
它將通過 2.2.2.2 eth0:1,
但運行wget google.com
它將通過 1.1.1.1 eth0
前2:
如果我去“whatismyip.com”通過eth0,那麼它將顯示我的IP是“1.1.1.1”,
但如果我去“whatismyipaddress.com”,它是通過eth0:1,所以它將顯示我的IP是“2.2.2.2”
答案1
有幾件事要考慮:
Linux路由不處理域名
Linux 上的路由有很多設定選項,但沒有一個接受裸網域。畢竟,我們談論的是 IP 路由。因此必須為 IP 位址定義規則,當網域的 DNS 記錄發生變更時,這些規則顯然會「中斷」。
介面偏好
在本例中,有 2 個介面提供到同一子網路(0.0.0.0/0,也稱為 Internet)的路由。為了告訴核心優先選擇特定接口,我們需要應用基於策略的路由(PBR)。
顧名思義,基於策略的路由透過定義策略(也稱為「規則」)來決定要使用的介面。如果沒有策略,核心將選擇與目的地網路相符的第一條路由。
路線、規則、表格
核心使用路由來決定如何處理資料包。路由是一個簡單的定義,其中包括目標位址和要使用的連結(介面)。
路由按 進行分組tables
,使用哪個表取決於定義的策略。
A policy
(或規則)告訴核心檢查哪個表來路由資料包。策略的定義包括封包的來源、目的地和要檢查的路由表。
顯示目前的路由和策略
若要顯示系統目前使用的路由,請執行
ip route
這顯示了路由表中的所有條目main
。其他表可以透過運行來存取ip route show table <tablename>
。
若要顯示目前使用的策略,請執行
ip rule
這列出了核心使用的所有策略/規則。它們從上到下迭代,直到一條規則與正在處理的資料包相符。
例子
echo "101 out1" >> /etc/iproute2/rt_tables
ip rule add from all to 3.4.5.6 table out1
ip route add default via 10.0.0.1 dev eth0 src 1.1.1.1 table out1
ip route add 10.0.0.0/8 dev eth0 src 1.1.1.1 table out1
這些命令將建立一個新的路由表out1
並新增10.0.0.1
為存取網際網路的網關。前往的流量3.4.5.6
(需要替換為目標網域的實際解析 IP 位址)將out1
使用指定的裝置eth0
和 IP透過表格中定義的預設閘道傳送1.1.1.1
。
我建議閱讀一些現有的教程和指南來熟悉術語。搜尋iproute2
和linux advanced routing and traffic control
。
最後但並非最不重要的一點是:在將變更套用到即時系統之前測試您的變更。錯誤確實會發生,我個人更喜歡炸毀虛擬機器而不是遠端伺服器。