# TUN 模式

对于不遵循系统代理的软件,TUN 模式可以接管其流量并交由 CFW 处理,在 Windows 中,TUN 模式性能比 TAP 模式好

注意

近期大部分浏览器默认已经开启“安全 DNS”功能,此功能会影响 TUN 模式劫持 DNS 请求导致反推域名失败,请在浏览器设置中关闭此功能以保证 TUN 模式正常运行

# Windows

启动 TUN 模式需要进行如下操作:

  1. 点击GeneralService Mode右边Manage,在打开窗口中安装服务模式,安装完成应用会自动重启,Service Mode 右边地球图标变为绿色即安装成功(无法安装参考:这里
  2. 点击GeneralTUN Mode右边开关启动 TUN 模式

NOTICE

如果使用system作为 TUN stack,需要同时在系统防火墙中将 clash core 放行,方法如下:

0.19.27及以上版本中,点击 Clash Core 版本号前的图标,并在 UAC 弹窗(若有)中允许运行,CFW 将自动配置对应的防火墙规则。

成功配置防火墙规则后该图标作为指示灯亮起。

Scoop (opens new window) 版上使用此功能需要0.20.3及以上版本,并且每次更新 CFW 后都需要更新防火墙规则。如果要通过 Scoop 安装脚本实现自动更新规则,可以参考:manifest (opens new window) script (opens new window)

NOTICE

由于查询防火墙权限受限等原因,指示灯可能无法正常工作,请以系统防火墙列表及 Clash 网卡运行状态为准。

这里提供一个可用于自查的 PowerShell 脚本(视情况需以管理员权限运行):

$List = Get-NetFirewallRule -Enabled True | Where-Object {($_.DisplayName -eq "Clash Core") -and ($_.Description -eq "Work with Clash for Windows.") -and ($_.Action -eq "Allow")}
$Output = $List | ForEach-Object {
    $Program = $_ | Get-NetFirewallApplicationFilter | Select-Object -ExpandProperty Program
    $Protocol = $_ | Get-NetFirewallPortFilter | Select-Object -ExpandProperty Protocol
    $Rule = New-Object PsObject
    $Rule | Add-Member -MemberType NoteProperty -Name "Enabled" -Value $_.Enabled
    $Rule | Add-Member -MemberType NoteProperty -Name "Action" -Value $_.Action
    $Rule | Add-Member -MemberType NoteProperty -Name "Protocol" -Value $Protocol
    $Rule | Add-Member -MemberType NoteProperty -Name "Program" -Value $Program
    $Rule
}
$Output | Format-Table
Read-Host -Prompt "Press any key to continue"

以64位版本为例,如果输出类似以下内容则说明规则添加成功(请自行验证路径有效性):

Enabled Action Protocol Program
------- ------ -------- -------
   True  Allow TCP      C:\...\resources\static\files\win\x64\clash-win64.exe
   True  Allow UDP      C:\...\resources\static\files\win\x64\clash-win64.exe
部分内容已于 v0.19.0 后过期,点击查看

# macOS

启动 TUN 模式需要进行如下操作:

  1. 点击GeneralService Mode右边Manage,在打开窗口中安装服务模式,安装完成应用会自动重启,Service Mode 右边地球图标变为绿色即安装成功
  2. 点击GeneralTUN Mode右边开关启动 TUN 模式
部分内容已于 v0.19.0 后过期,点击查看

TIP

若要将此 Mac 设置为代理网关,打开 IP 转发即可:

sudo sysctl -w net.inet.ip.forwarding=1

这种做法将在机器下次重启后失效,如果想要永久保存,编辑文件/etc/sysctl.conf,配置下面变量:

net.inet.ip.forwarding=1
net.inet6.ip6.forwarding=1

或者使用 LaunchDaemons 进行配置:

  1. 新建 network.forwarding.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>Network Forwarding</string>
    <key>UserName</key>
    <string>root</string>
    <key>GroupName</key>
    <string>wheel</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/sbin/sysctl</string>
        <string>-w</string>
        <string>net.inet.ip.forwarding=1</string>
        <string>net.inet6.ip6.forwarding=1</string>
    </array>
    <key>KeepAlive</key>
    <false/>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>
  1. 将文件添加进 /Library/LaunchDaemons
  2. sudo launchctl load /Library/LaunchDaemons/network.forwarding.plist

# Linux

启动 TUN 模式需要进行如下操作:

  1. 点击GeneralService Mode右边Manage,在打开窗口中安装服务模式,安装完成应用会自动重启(某些系统需要手动重启 APP),Service Mode 右边地球图标变为绿色即安装成功
  2. 点击GeneralTUN Mode右边开关启动 TUN 模式
部分内容已于 v0.19.0 后过期,点击查看

# 配置文件参考

Clash Wiki (opens new window)

NOTICE

如熟悉使用代码启动,也可以使用 mixin 功能进行其他配置

上次更新: 9/20/2022, 2:33:49 AM