V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
ioiioi
V2EX  ›  问与答

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

  •  
  •   ioiioi · 2022-09-23 05:47:47 +08:00 · 2057 次点击
    这是一个创建于 573 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近准备使用 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
        
    #后面未相关的配置省略
    ...
    
    5 条回复    2022-11-08 15:45:11 +08:00
    Jirajine
        1
    Jirajine  
       2022-09-23 07:20:31 +08:00
    你都用 premium 了,就不应该关系它具体做了什么,能用就行。这样才是一个合格的闭源软件用户。
    ioiioi
        2
    ioiioi  
    OP
       2022-09-23 08:24:38 +08:00
    因为我碰到问题了,要排错,所以需要知道工作原理才能定位问题。
    noahzh
        3
    noahzh  
       2022-09-23 08:45:55 +08:00
    tun 模式是使用 fake-ip ,ip 规则是把 fake-ip 请求转发给 clash
    ioiioi
        4
    ioiioi  
    OP
       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
        5
    tony1016  
       2022-11-08 15:45:11 +08:00
    @ioiioi lookup 才是路由表,goto 只是跳到某一个 rule
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   954 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 20:39 · PVG 04:39 · LAX 13:39 · JFK 16:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.