clash-verge icon indicating copy to clipboard operation
clash-verge copied to clipboard

linux 下 tun 需要 setcap 配置权限才能用

Open inRm3D opened this issue 2 years ago • 3 comments

一直没注意到 tun 没开(虽然开关是打开的,但是实际没有生效)。

命令行启动后发现 permission 报错。查了一圈发现要

sudo setcap cap_net_bind_service,cap_net_admin=+ep /usr/bin/clash

参考 https://blog.icpz.dev/articles/tools/setup-clash-premium-on-linux/#Optional-Setup


一些简单解释

CAP_NET_BIND_SERVICE: 允许绑定到小于 1024 的端口 CAP_NET_ADMIN: 允许执行网络管理任务

cap_effective (e),cap_inheritable (i),cap_permitted (p)

cap_effective: 当一个进程要进行某个特权操作时,操作系统会检查 cap_effective 的对应位是否有效,而不再是检查进程的有效 UID 是否为 0. cap_permitted: 表示进程能够使用的能力,在 cap_permitted 中可以包含 cap_effective 中没有的能力,这些能力是被进程自己临时放弃的,也可以说 cap_effective 是 cap_permitted 的一个子集.


然后就能 ping 通了

❯ ping -c 4 google.com
PING google.com (198.18.0.5) 56(84) 字节的数据。
64 字节,来自 198.18.0.5 (198.18.0.5): icmp_seq=1 ttl=64 时间=0.064 毫秒
64 字节,来自 198.18.0.5 (198.18.0.5): icmp_seq=2 ttl=64 时间=0.093 毫秒
64 字节,来自 198.18.0.5 (198.18.0.5): icmp_seq=3 ttl=64 时间=0.109 毫秒
64 字节,来自 198.18.0.5 (198.18.0.5): icmp_seq=4 ttl=64 时间=0.121 毫秒
--- google.com ping 统计 ---
已发送 4 个包, 已接收 4 个包, 0% packet loss, time 3043ms
rtt min/avg/max/mdev = 0.064/0.096/0.121/0.021 ms

inRm3D avatar Sep 03 '22 14:09 inRm3D

补充,clash 字段里的勾,除了 redir-port 不勾 https://github.com/Dreamacro/clash/issues/2146#issuecomment-1133891285 ,其余都勾上。

image image

inRm3D avatar Sep 04 '22 09:09 inRm3D

tun的开启确实要权限。我在macOS里是这样设置的

sudo chown root:admin ./clash
sudo chmod +sx ./clash

zzzgydi avatar Sep 04 '22 12:09 zzzgydi

感觉做成一个交互会好些?

比如 try open tun, except permission error, pop 一个输入密码的框,然后跑一下这个 sudo setcap,cfw 就是会有个 pop up 的弹窗。

~~从产品的角度考虑,用户应该不怎么看手册。~~

inRm3D avatar Sep 04 '22 19:09 inRm3D

执行了相关命令,然后还是permission denied

br7roy avatar Dec 15 '22 07:12 br7roy

用 AppImage 的话运行时应用会被挂载到 /tmp/.mount_*** 比如 clash 的位置可能就是 /tmp/.mount_clash-pzbvec/usr/bin/clash

但每次启动都会重新挂载,路径也是不一样的。肯定是软件里默认设一下比较好

jiesou avatar Jan 15 '23 11:01 jiesou

verge 1.2.3 ,macOS13.1。已经 sudo chmod +sx /Applications/Clash\ Verge.app/Contents/MacOS/clash-meta sudo chown root:admin /Applications/Clash\ Verge.app/Contents/MacOS/clash-meta 但是还是一样提示 Start TUN listening error: configure tun interface: Connect: operation not permitted

shallbytwo avatar Mar 15 '23 13:03 shallbytwo

verge 1.2.3 ,macOS13.1。已经

``sudo chmod +sx /Applications/Clash\ Verge.app/Contents/MacOS/clash-meta

``和

``sudo chown root:admin /Applications/Clash\ Verge.app/Contents/MacOS/clash-meta

``但是还是一样提示

Start TUN listening error: configure tun interface: Connect: operation not permitted

我也用了这个,然后Safari就打不开任何网页了,关掉clash verge后也不行,连百度也连不上,一直显示“cannot connect to the server"..请问这两行命令可以撤销吗?

sarahgdc avatar Mar 16 '23 12:03 sarahgdc

@sarahgdc 你这个不撤销也没事,如果打开verge还是上不了网,可以看看是否开了tun模式,开了的话,关掉就好。如果是关了verge也不能上网,就看看网络设置里的代理是不是没有清空,下图这些。

image

zzzgydi avatar Mar 16 '23 13:03 zzzgydi

@sarahgdc 你这个不撤销也没事,如果打开verge还是上不了网,可以看看是否开了tun模式,开了的话,关掉就好。如果是关了verge也不能上网,就看看网络设置里的代理是不是没有清空,下图这些。

image

果然是因为这几个代理没清空。太感谢啦!@zzzgydi

sarahgdc avatar Mar 16 '23 13:03 sarahgdc

1.3.0版本已经支持给clash内核点击提权啦,Linux的实现就是参考该issue的方案,可以试试有没有问题

zzzgydi avatar Mar 17 '23 05:03 zzzgydi

1.3.0版本已经支持给clash内核点击提权啦,Linux的实现就是参考该issue的方案,可以试试有没有问题

今天刚试了新版本,可以开tun了!感恩的心🥹

sarahgdc avatar Mar 17 '23 05:03 sarahgdc

1.3.0版本已经支持给clash内核点击提权啦,Linux的实现就是参考该issue的方案,可以试试有没有问题

点击了会提示refresh config, 但日志还是显示没有权限, 可能是什么原因

edit: 原来是在clash内核那里设置提权, ok了

fecet avatar Mar 18 '23 10:03 fecet

clash内核已经勾选了除redir-port以外的所有选项,开启tun模式,但是YouTube偶尔无法访问,访问后视频无法播放但是页面加载正常,Ubuntu。

lightingteeth avatar Mar 20 '23 17:03 lightingteeth

给 debian bullseye stable 的同志提个醒: (这里说的都是 deb包安装版)

  • 1.1.2 , 即使做了全套, 也还是不行的
    • tun开启倒是没再报错, 但是更前面会有一条 Permission denied (os error 13) 的日志, 总之就是tun没法实际生效
  • 1.2.3 已经开始有 glibc版本问题了, 先不要用
  • 1.2.0 做全套之后是ok的 (我这clash默认是1001:lpadmin,也没用改

Binly42 avatar Mar 26 '23 09:03 Binly42

Using non-root image

Itsusinn avatar Apr 14 '23 10:04 Itsusinn

Same as https://github.com/zzzgydi/clash-verge/issues/182#issuecomment-1508266692 with the appimage version.

sqwwqw5 avatar May 21 '23 04:05 sqwwqw5

@Itsusinn @sqwwqw5 To fix this issue:

  1. Install any askpass helper, like x11-ssh-askpass, or ksshaskpass for KDE;
  2. Edit /etc/sudo.conf and set the askpass helper path, like Path askpass /path/to/your/askpass

Now click the lock icon in Clahs Verge again and it should work.

perqin avatar Jul 02 '23 06:07 perqin

一直没注意到 tun 没开(虽然开关是打开的,但是实际没有生效)。

命令行启动后发现 permission 报错。查了一圈发现要

sudo setcap cap_net_bind_service,cap_net_admin=+ep /usr/bin/clash

参考 https://blog.icpz.dev/articles/tools/setup-clash-premium-on-linux/#Optional-Setup

一些简单解释

CAP_NET_BIND_SERVICE: 允许绑定到小于 1024 的端口 CAP_NET_ADMIN: 允许执行网络管理任务

cap_effective (e),cap_inheritable (i),cap_permitted (p)

cap_effective: 当一个进程要进行某个特权操作时,操作系统会检查 cap_effective 的对应位是否有效,而不再是检查进程的有效 UID 是否为 0. cap_permitted: 表示进程能够使用的能力,在 cap_permitted 中可以包含 cap_effective 中没有的能力,这些能力是被进程自己临时放弃的,也可以说 cap_effective 是 cap_permitted 的一个子集.

然后就能 ping 通了

❯ ping -c 4 google.com
PING google.com (198.18.0.5) 56(84) 字节的数据。
64 字节,来自 198.18.0.5 (198.18.0.5): icmp_seq=1 ttl=64 时间=0.064 毫秒
64 字节,来自 198.18.0.5 (198.18.0.5): icmp_seq=2 ttl=64 时间=0.093 毫秒
64 字节,来自 198.18.0.5 (198.18.0.5): icmp_seq=3 ttl=64 时间=0.109 毫秒
64 字节,来自 198.18.0.5 (198.18.0.5): icmp_seq=4 ttl=64 时间=0.121 毫秒
--- google.com ping 统计 ---
已发送 4 个包, 已接收 4 个包, 0% packet loss, time 3043ms
rtt min/avg/max/mdev = 0.064/0.096/0.121/0.021 ms

解决了我的大问题。

希望作者能把这一步集成到 cfw 初始化中。

tigerinus avatar Oct 02 '23 08:10 tigerinus

然后就能 ping 通了

❯ ping -c 4 google.com
PING google.com (198.18.0.5) 56(84) 字节的数据。
64 字节,来自 198.18.0.5 (198.18.0.5): icmp_seq=1 ttl=64 时间=0.064 毫秒
64 字节,来自 198.18.0.5 (198.18.0.5): icmp_seq=2 ttl=64 时间=0.093 毫秒
64 字节,来自 198.18.0.5 (198.18.0.5): icmp_seq=3 ttl=64 时间=0.109 毫秒
64 字节,来自 198.18.0.5 (198.18.0.5): icmp_seq=4 ttl=64 时间=0.121 毫秒
--- google.com ping 统计 ---
已发送 4 个包, 已接收 4 个包, 0% packet loss, time 3043ms
rtt min/avg/max/mdev = 0.064/0.096/0.121/0.021 ms

题外话顺便说一下, TUN模式下的 ping 好像是有问题的, 我这里试着:

  • 用 原版的 clash premium , 域名或者ip随便写 都必然能通
  • 用 clash meta , 无论如何都ping不通

好像说是 不支持 icmp, 具体我没细究了;

但反正 curl www.google.com啥的 应该是能用于验证的

Binly42 avatar Oct 04 '23 06:10 Binly42