我正在尝试设置一个软件路由器,目的是将数据包路由到路由器上的代理服务器。我正在阅读的教程具有以下路由规则:
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 100
为systemd-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
我应该如何处理这个?
将它们合并到一个文件中