Skip to content

Commit 2fc90e0

Browse files
committed
routing: Add RPDB matchers
1 parent 3e37116 commit 2fc90e0

File tree

1 file changed

+28
-1
lines changed

1 file changed

+28
-1
lines changed

docs/ops/network/routing.md

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ $ ip -6 rule
144144
ip rule add from 192.0.2.0/24 table 100 pref 1000
145145
```
146146

147-
在以上命令中,`from 192.0.2.0/24` 指定了匹配条件,`table 100` 指定“动作”为进入路由表 100,`pref 1000` 指定该规则的优先级为 1000
147+
在以上命令中,`from 192.0.2.0/24` 指定了匹配条件,`table 100` 指定“动作”为进入路由表 100,`pref 1000` 指定该规则的优先级
148148

149149
由于内核不保证相同优先级的规则的顺序,因此我们建议仅为逻辑上完全互斥的规则使用相同的优先级,避免出现非预期的行为。
150150

@@ -183,6 +183,33 @@ ip rule add from 192.0.2.0/24 table 100 pref 1000
183183

184184
systemd-networkd 内置了 `local`、`main` 和 `default` 三个路由表名称映射,无需在 `networkd.conf` 中重复定义。
185185

186+
### 路由策略匹配规则 {#routing-policy-matching}
187+
188+
路由规则的匹配条件可以包含多个字段,常用的匹配条件包括:
189+
190+
| 条件 | 说明 |
191+
| ----------------------------------- | ----------------------------------------- |
192+
| from CIDR | 源地址(CIDR) |
193+
| to CIDR | 目的地址(CIDR) |
194+
| fwmark mark<br>fwmark mark/mask | 防火墙标记(firewall mark),可以附带掩码 |
195+
| iif IFACE | 数据包的输入接口 |
196+
| oif IFACE | 数据包的输出接口 |
197+
| uidrange MIN-MAX | 进程的用户 ID 范围 |
198+
| tos TOS | 服务类型(Type of Service) |
199+
| ipproto PROTOCOL | IP 层内协议(如 `tcp``udp``icmp` 等) |
200+
| sport port<br>sport portmin-portmax | 源端口号或范围 |
201+
| dport port<br>dport portmin-portmax | 目的端口号或范围 |
202+
203+
其中:
204+
205+
- fwmark 条件匹配防火墙的数据包标记,通常与 Netfilter 的 `MARK` 目标结合使用,实现更复杂的路由策略。
206+
- iif 条件匹配数据包的输入接口,其中由本机发出的数据包可以用 `iif lo` 匹配。
207+
- oif 条件匹配数据包的输出接口,只适用于本机发出的包,对应的 socket 已经绑定到该接口(`setsockopt(SO_BINDTODEVICE)`)。
208+
- uidrange 条件匹配发包进程的 UID,但只能用于本机发出的数据包。特别地,许多 Android 系统使用该条件实现应用级别的路由控制,利用了 Android 系统中的每个应用都有一个独立的 UID 这一特性。
209+
- sport 和 dport 条件只能用于 TCP 和 UDP 协议[^port-protocol]的数据包。
210+
211+
[^port-protocol]: 其实还有 DCCP 和 SCTP 协议也支持端口号,但这两种协议较少使用,因此本文在此不做赘述。
212+
186213
### 源进源出 {#source-based-routing}
187214

188215
一种常见的做法是,新增一条优先级非常高的规则指向 main 表,然后为每个接口指定一张专属路由表,实现本机流量的「源进源出」:

0 commit comments

Comments
 (0)