如何将“ip route add local 0.0.0.0/0 dev lo table 100”翻译为 systemd-networkd?

如何将“ip route add local 0.0.0.0/0 dev lo table 100”翻译为 systemd-networkd?

我正在尝试设置软件路由器,目的是将数据包路由到路由器上的代理服务器。我正在阅读的教程有以下路由规则:

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

我该如何处理这个问题?

答案1

[Match]
Name = lo

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

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

将它们合并为一个文件

相关内容