我正在嘗試使用 Arch 上的 shorewall 來管理具有 2 個本地網路和 2 個 ISP 連接的設定。最終,我希望來自本地網路1(192.168.1.0/24 介面enp5s0)的流量使用ISP 1(76. ... 介面enp6s0),來自本地網路2(192.168.0.0/24 介面enp7s0)的流量使用ISP 2 (99 ...介面enp3s0)。目前,我可以使其中一個工作,但不能同時工作,這取決於哪個預設路由先出現:
output of `ip route ls` with sensitive information redacted:
default via 76.[rd].1 dev enp6s0 src 76.[rd].78 metric 203 mtu 576
default via 99.[rd].1 dev enp3s0 src 99.[rd].190 metric 205
76.[rd].0/24 dev enp6s0 proto kernel scope link src 76.[rd].78 metric 203 mtu 576
76.[rd].78 dev enp6s0 scope link src 76.[rd].78
99.194.48.0/21 dev enp3s0 proto kernel scope link src 99.[rd].190 metric 205
99.[rd].190 dev enp3s0 scope link src 99.[rd].190
192.168.0.0/24 dev enp7s0 proto kernel scope link src 192.168.0.1 metric 204
192.168.1.0/24 dev enp5s0 proto kernel scope link src 192.168.1.1 metric 202
透過上述輸出,本地 1 將能夠到達外部,但本地 2 則不能。如果第一行消失了,則反之亦然。我很確定多個預設路由是禁忌,即使有多個 ISP,但這就是 shorewall 的做法。
由於任何地方都沒有這方面的範例,因此我將其基於 shorewall 的三個介面範例。為了避免這篇文章過長,這裡有每個相關海岸牆配置的貼上連結:
- 接口:http://pastebin.com/u7w3YJdx
- 粉碎:http://pastebin.com/1X2hrLCZ
- 面膜:http://pastebin.com/bi9EEtwD
- 政策:http://pastebin.com/mBBZQ0wg
- 規則:http://pastebin.com/ySSLpMWd
- 提供者:http://pastebin.com/YjDfKZzg
- 區域:http://pastebin.com/XVgYz3dn
Shorewall 關於此事的頁面沒有幫助,因為他們範例中的目標與我的目標非常不同。任何正確方向的指示將不勝感激。
答案1
確保不在 netctl 檔案或任何其他檔案中設定預設網關。如果使用 DHCP 取得 IP 位址,請確保已停用取得預設閘道 (dhcpcd -G)。運行“ip route ls”應該不顯示任何預設網關。只有「ip route show table all」才能列出每個 ISP 表的預設閘道。像這樣的東西:
default via 10.1.1.1 dev enp3s0 table ITC1 src 10.1.1.10
10.1.1.1 dev enp3s0 table ITC1 scope link src 10.1.1.10
default via 10.1.2.1 dev enp4s0 table ITC2 src 10.1.2.10
10.1.2.1 dev enp4s0 table ITC2 scope link src 10.1.2.10
default via X.X.X.X dev enp5s0 table MPLS src X.X.X.X
X.X.X.X dev enp5s0 table MPLS scope link src X.X.X.X
default table balance
nexthop via X.X.X.X dev enp5s0 weight 1
nexthop via 10.1.1.1 dev enp3s0 weight 2
nexthop via 10.1.2.1 dev enp4s0 weight 2
您也可以從 mangle 檔案中刪除條目,因為 rtrules 條目應該足以滿足您的需要