clash tun 模式下自动插入的 ip rule 的作用

2022-09-23 05:47:47 +08:00
 ioiioi

最近准备使用 clash permium 中的 tun 来实现透明代理,但在使用过程中碰到一些疑问,首先我很困惑的是 clash permium 自动插入的 ip rule 是什么意思?

> sudo ip rule ls
0:      from all lookup local
1000:   from all lookup [l3mdev-table]
9000:   not from all ipproto tcp goto 9060
9000:   from all dport 53 goto 9060
9000:   from all iif lo sport 7777 goto 9060
9010:   from all to 192.18.0.0/16 lookup 1919247465
9020:   from all lookup main suppress_prefixlength 0
9030:   not from all iif lo lookup 1919247465
9040:   from 0.0.0.0 iif lo uidrange 0-4294967294 lookup 1919247465
9050:   from 192.18.0.5 iif lo uidrange 0-4294967294 lookup 1919247465
9060:   from all nop
9500:   from all to 192.18.0.0/16 lookup 1970566510
9510:   from all ipproto icmp goto 9560
9520:   not from all dport 53 lookup main suppress_prefixlength 0
9530:   not from all iif lo lookup 1970566510
9540:   from 0.0.0.0 iif lo uidrange 0-4294967294 lookup 1970566510
9550:   from 192.18.0.1 iif lo uidrange 0-4294967294 lookup 1970566510
9560:   from all nop
32766:  from all lookup main
32767:  from all lookup default

除了 0 ,1000 ,32766 和 32767 是有明确的意思外,为何 clash 添加了这么多条记录,是啥意思? 接着,我有执行了 ip route show table all

> sudo ip route show table all | grep utun
default dev utun table 1970566510 proto unspec
192.18.0.0/16 dev utun proto kernel scope link src 192.18.0.1
broadcast 192.18.0.0 dev utun table local proto kernel scope link src 192.18.0.1
local 192.18.0.1 dev utun table local proto kernel scope host src 192.18.0.1
broadcast 192.18.255.255 dev utun table local proto kernel scope link src 192.18.0.1
fe80::/64 dev utun proto kernel metric 256 pref medium
local fe80::3b91:83c6:157c:91ad dev utun table local proto kernel metric 0 pref medium
multicast ff00::/8 dev utun table local proto kernel metric 256 pref medium
> sudo ip route show table all | grep redir
default via 192.18.0.6 dev redir table 1919247465 proto unspec
192.18.0.0/16 dev redir proto kernel scope link src 192.18.0.5
broadcast 192.18.0.0 dev redir table local proto kernel scope link src 192.18.0.5
local 192.18.0.5 dev redir table local proto kernel scope host src 192.18.0.5
broadcast 192.18.255.255 dev redir table local proto kernel scope link src 192.18.0.5
fe80::/64 dev redir proto kernel metric 256 pref medium
local fe80::872:3eff:fe29:d33f dev redir table local proto kernel metric 0 pref medium
multicast ff00::/8 dev redir table local proto kernel metric 256 pref medium

后面是我的 clash 配置:

log-level: info
allow-lan: true
mode: rule
ipv6: false
routing-mark: 6666

profile:
  store-selected: true
  store-fake-ip: true

tun:   # 启用 tun 模式
  enable: true
  stack: system
  auto-route: true
  auto-detect-interface: true

dns:
  enable: true
  ipv6: false
  listen: 0.0.0.0:53

  default-nameserver:
    - 233.5.5.5
    - 119.29.29.29

  enhanced-mode: fake-ip
  nameserver:
    - https://dns.alidns.com/dns-query
    
#后面未相关的配置省略
...
2337 次点击
所在节点    问与答
5 条回复
Jirajine
2022-09-23 07:20:31 +08:00
你都用 premium 了,就不应该关系它具体做了什么,能用就行。这样才是一个合格的闭源软件用户。
ioiioi
2022-09-23 08:24:38 +08:00
因为我碰到问题了,要排错,所以需要知道工作原理才能定位问题。
noahzh
2022-09-23 08:45:55 +08:00
tun 模式是使用 fake-ip ,ip 规则是把 fake-ip 请求转发给 clash
ioiioi
2022-09-23 09:34:45 +08:00
问题 1:pc 默认路由应该配成旁路由的 ip 吗?
我的网络拓扑是这样:
1 、有一个主路由上联宽带,下联交换机,主要负责 pppoe 拨号、nat 和对内网的 dhcp ;
2 、旁路由(物理网卡配了内网 ip )是一台树莓派,安装了 clash premium ,启用 tun 作为透明代理,只有一条网线,上联交换机;
3 、ap 和 pc 通过网线上联交换机;
4 、pc 获得的内网 ip 与旁路有、主路由同网段,可通过无线可以访问旁路有和主路由。
问题 2:ip rule 是如何工作的?
主要的困惑是不理解 ip rule 的写法和匹配流程。linux 在匹配路由表的时候,还能支持挑转?譬如
```
9000: not from all ipproto tcp goto 9060
...
9060: from all nop
```
这两条语句是路由表吗?隶属于同一个 table ,还是分别隶属于 9000 和 9060 这两个 table ?
然而我用 ip route show table all 看到的又跟 ip rule ls 不匹配,这给我造成很大困扰。
tony1016
2022-11-08 15:45:11 +08:00
@ioiioi lookup 才是路由表,goto 只是跳到某一个 rule

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/882277

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX