Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Bug] docker容器下跑openclash时,--cap-add 精细化控制 #3849

Open
6 of 7 tasks
e6e6 opened this issue Apr 18, 2024 · 4 comments
Open
6 of 7 tasks

[Bug] docker容器下跑openclash时,--cap-add 精细化控制 #3849

e6e6 opened this issue Apr 18, 2024 · 4 comments
Labels
bug Something isn't working

Comments

@e6e6
Copy link

e6e6 commented Apr 18, 2024

Verify Steps

  • Tracker 我已经在 Issue Tracker 中找过我要提出的问题
  • Branch 我知道 OpenClash 的 Dev 分支切换开关位于插件设置-版本更新中,或者我会手动下载并安装 Dev 分支的 OpenClash
  • Latest 我已经使用最新 Dev 版本测试过,问题依旧存在
  • Relevant 我知道 OpenClash 与 内核(Core)、控制面板(Dashboard)、在线订阅转换(Subconverter)等项目之间无直接关系,仅相互调用
  • Definite 这确实是 OpenClash 出现的问题
  • Contributors 我有能力协助 OpenClash 开发并解决此问题
  • Meaningless 我提交的是无意义的催促更新或修复请求

OpenClash Version

v0.46.003-beta

Bug on Environment

Docker

OpenWrt Version

openwrt 23.05.3

Bug on Platform

Linux-armv6

Describe the Bug

  1. 旁路网关模式
  2. --privileged 运行包含 openclash 的 openwrt 镜像是没有问题
  3. --cap-add=NET_ADMIN --cap-add=SYS_RESOURCE --cap-add=SYS_PTRACE 来运行容器,openclash 能正常启动,但是客户端无法做任何解析

To Reproduce

docker运行的命令分别是

sudo docker run -d --restart=on-failure:3 --hostname=OneCloud --name onecloud --network openwrt --cap-add=NET_ADMIN --cap-add=SYS_RESOURCE --cap-add=SYS_PTRACE --device=/dev/net/tun openwrt:23.05.3 /sbin/init

sudo docker run -d --restart=on-failure:3 --name onecloud --network openwrt --privileged --device=/dev/net/tun openwrt:23.05.3 /sbin/init

cap-add 的方式,分别附加了 NET_ADMIN,SYS_RESOURCE,SYS_PTRACE。其他的根据 https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities 说明,属于默认行为。
此类方式能启动 openwrt 容器,能启动 openclash,进入容器也能正常代理,客户机网关和 dns 都指向容器 ip 后,客户机无法做任何解析

privileged 的方式,一切正常

OpenClash Log

正常log

OpenClash Config

No response

Expected Behavior

期望能用 --cap-add 的方式来做精细化控制
--privileged 方式,太容易让宿主机出问题,譬如内核崩溃

Additional Context

No response

@e6e6 e6e6 added the bug Something isn't working label Apr 18, 2024
@vernesong
Copy link
Owner

capabilties="cap_sys_resource,cap_dac_override,cap_net_raw,cap_net_bind_service,cap_net_admin,cap_sys_ptrace"

这里有需要的权限

@e6e6
Copy link
Author

e6e6 commented Apr 23, 2024

capabilties="cap_sys_resource,cap_dac_override,cap_net_raw,cap_net_bind_service,cap_net_admin,cap_sys_ptrace"

这里有需要的权限

capabilties="cap_sys_resource,cap_dac_override,cap_net_raw,cap_net_bind_service,cap_net_admin,cap_sys_ptrace"

其中,cap_dac_override,cap_net_raw,cap_net_bind_service是默认就有的

https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities

只需要额外添加cap_net_admin,cap_sys_resource,cap_sys_ptrace

我也测试过给 cap_net_admin,cap_sys_admin权限,也是同样问题

是否有什么权限用到了,但是没列出来

症状是,客户机完全无法dns解析

@vernesong
Copy link
Owner

没解析你要看内核有没有日志,还是防火墙没配置好

@e6e6
Copy link
Author

e6e6 commented Apr 25, 2024

没解析你要看内核有没有日志,还是防火墙没配置好

内核也无日志
防火墙将 input output都接受了

这个周末有时间再做一个复现

对了顺带提一下,docker stop xxx,大概率host也会崩溃,目前不清楚是debian环境问题,还是docker 开privileged问题,所以--restart只给了3次机会,否则会进入无限重启的噩梦。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants