Linux-Networking

如何將“ip route add local 0.0.0.0/0 dev lo table 100”翻譯成systemd-networkd?

  • May 4, 2021

我正在嘗試設置一個軟體路由器,目的是將數據包路由到路由器上的代理伺服器。我正在閱讀的教程具有以下路由規則:

ip rule add fwmark 1 table 100
ip route add local 0.0.0.0/0 dev lo table 100

以及以下 iptables 規則:

iptables -t mangle -N V2RAY
iptables -t mangle -A V2RAY -d [Private Addresses] -j RETURN
iptables -t mangle -A V2RAY -p udp -j TPROXY --on-port 12345 --tproxy-mark 1
iptables -t mangle -A V2RAY -p tcp -j TPROXY --on-port 12345 --tproxy-mark 1
iptables -t mangle -A PREROUTING -j V2RAY

整個事情完美無缺。但是現在我開始使用它systemd-networkd來避免任何啟動腳本,而且我在轉換ip route add local 0.0.0.0/0 dev lo table 100systemd-networkd語言時遇到了麻煩。

我的第一個問題是,這條路線有什麼作用?到目前為止我的理解是:

  • iptables添加防火牆牆標記 1.
  • 該規則選擇標記為 1 的所有數據包使用路由表 100。
  • 該路由添加到表 100,因此它僅適用於標記為 1 的數據包。
  • “0.0.0.0/0”部分錶示它是預設路由。
  • 但是這裡的“本地”是什麼意思?為什麼device lo?為什麼我們需要這裡的路線?iptables 不能直接處理嗎?

我的第二個問題是如何在systemd-networkd.

為了匹配帶有標記 1 的數據包,這似乎很容易(並且在我的路由器上工作):

[Match]
Name = *

[RoutingPolicyRule]
FirewallMark = 1
Table = 100

我不確定是否Name = *需要。這是否確保來自任何設備的任何數據包,只要它具有標記 1,都將使用表 100 路由?或者我可以在這裡匹配一些特定的網路設備嗎?

但是,我不能在 systemd-networkd 中創建路由。到目前為止,我的嘗試是:

[Match]
Name = lo

[Route]
Type = local
Destination = 0.0.0.0/0
Table = 100

但似乎這沒有效果:ip route show table 100實際上給出了:

Error: ipv4: FIB table does not exist.
Dump terminated

我應該如何處理這個?

[Match]
Name = lo

[RoutingPolicyRule]
FirewallMark = 1
Table = 100
Priority = 100

[Route]
Table = 100 
Destination = 0.0.0.0/0
Type = local

將它們合併到一個文件中

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