
假設我有兩台伺服器,gateway
它們對網路公開可見,並且appserver
隱藏在 nat/防火牆後面。也假設這兩台伺服器中的每一個都有二連接到完全獨立的互聯網上行鏈路的介面(見下圖)。
我想在兩台伺服器之間設定兩個獨立的 Wireguard 隧道,目的是在其中一台伺服器發生故障時保持伺服器連線:
| Internet |
[ gateway ] | | [appserver]
| |
(wg0) <-----> (ens1) < - - - - > (ens1) <----> (wg0)
| |
| |
| |
(wg1) <-----> (ens2) < - - - - > (ens2) <----> (wg1)
| |
| |
預設情況下,Wireguard 似乎透過系統的預設閘道路由所有流量。因此,當appserver
嘗試連接到 時gateway
,它僅使用兩個介面之一:
| Internet |
[ gateway ] | | [appserver]
| |
(wg0) <--+--> (ens1) < - - - - > (ens1) <--+--> (wg0)
| | | |
| | | |
| | | |
(wg1) <--+ (ens2) X (ens2) +--> (wg1)
| |
| |
由於某些網路工具允許設定發送網路流量時使用的特定網路接口,Wireguard 也可以做同樣的事情嗎?也就是說,僅透過預設路由指標發送流量ens1
還是ens2
不考慮預設路由指標?如果沒有,我該如何設定 Linux 的網路系統來做到這一點?
答案1
我無法找到一種方法讓wireguard本身透過特定介面連接,因此我最終決定透過向 的路由表ens2
添加新路由來簡單地路由注定的流量:appserver
ip route add $GATEWAY_ESN2_ADDR/32 via $APPSERVER_ESN2_ADDR_GW metric 50
APPSERVER_ESN2_ADDR_GW
appserver
是的網關路由器的位址。
FwMark
在研究這個問題時,我注意到wireguard允許您透過設定下的欄位來對屬於特定wireguard介面的傳出流量設定fwmark [Interface]
。截至撰寫本文時 (2021-09),Wireguard 不支援在每個對等點的基礎上設定此標記。
*如果有人找到合適的解決方案,我將保留這個問題。