Jay
Jay

OpenWRT下启用CIFSD网络共享

CIFSD介绍

CIFSD 是由 Namjae Jeon 创建的用于 Linux 内核的开源 In-kernel CIFS/SMB3 服务器,它是 SMB/CIFS 协议在内核空间中的实现,用于通过网络来共享文件和 IPC 服务。最初的目标的是提供改进的文件 I/O 性能,但更大的目标是希望拥有一些新的特性,使得这些特性在内核内部更容易开发和维护,并且完全暴露这些层。

方向可以认为是将 SAMBA 移动到内核中的几个模块的部分,以具有像程直接数据存取(Remote direct memory access)那样的功能以实际性能增益工作。

CIFSD 功能

已实现
   a. 用于实现基本文件共享功能的 SMB1(CIFS), SMB2/3 协议
   b. 动态授权
   c. 混合请求
   d. 持久的处理
   e. oplock/lease
   f. Large MTU
   g. NTLM/NTLMv2
   h. 自动协商
   i. HMAC-SHA256 签名
   j. 安全协商
   k. 升级签名
   l. Preautentication integrity(SMB 3.1.1)

已计划
   a. SMB direct(RDMA)
   b. Multi-channel
   c. Durable handle v2
   d. Kerberos
   e. persistent handles
   f. 目录租约
   g. SMB 加密

CIFSD 架构

================================================================================
* CIFSD Architecture
================================================================================
               |--- ...
       --------|--- kcifsd/3 - Cleint 3
       |-------|--- kcifsd/2 - Client 2
       |       |         _____________________________________________________
       |       |        |- Client 1                                           |
<--- Socket ---|--- kcifsd/1   <<= Authentication : NTLM/NTLM2, Kerberos(TODO)|
       |       |      | |      <<= SMB : SMB1, SMB2, SMB2.1, SMB3, SMB3.0.2,  |
       |       |      | |                SMB3.1.1                             |
       |       |      | |_____________________________________________________|
       |       |      |
       |       |      |--- VFS --- Local Filesystem
       |       |
KERNEL |--- kcifsd/0(forker kthread)
---------------||---------------------------------------------------------------
USER           ||
               || communication using NETLINK and sysfs
               ||  ______________________________________________
               || |                                              |
             cifsd   <<= DCE/RPC, WINREG                         |
               ^  |  <<= configure shares setting, user accounts |
               |  |______________________________________________|
               |
               |------ smb.conf(config file)
               |
               |------ cifspwd.db(user account/password file)
                            ^
  cifsadmin ----------------|

================================================================================
================================================================================

在OpenWRT编译时加入软件包

注意,需要将luci-app-samba,samba36-server取消(找不到可以用/来查找)如果无法取消请检查Extra packages里的autosamba是否取消勾选。另外还需要加上ksmbd-utils,否则用户配置无法正确被生成。(ksmbd-utils位于Kernel modules > Filesystems下)

解决ksmbd报错

刷入编译完成的固件后,发现网络共享中并未出现路由器,检查内核日志后发现,ksmbd自杀了

如果你还有提示端口无法使用,那八成是安装了samba36-server,去软件包里面卸载掉他。

这里参考了unifreq的解决方法

sed -e 's/modprobe ksmbd/sleep 1 && modprobe ksmbd/' -i /etc/init.d/ksmbd

此时ksmbd即可正确启动

这速度,凑合用了。

路由器是竞斗云2.0,内存卡是Netac 的32G卡,京东连接

发表评论

textsms
account_circle
email

  • zz

    CIFSD与samba36有什么区别啊?

    4年前 回复
    • jay博主

      @zz: cifsd是一个重构的内核态CIFS服务端,可以提供比Samba更好的I/O和性能(官方说法).
      直接内核态减少了内核到用户空间的多次内存复制,这会比用splice跟sendfiles再好一些.

      4年前 回复

Jay

OpenWRT下启用CIFSD网络共享
CIFSD介绍 CIFSD 是由 Namjae Jeon 创建的用于 Linux 内核的开源 In-kernel CIFS/SMB3 服务器,它是 SMB/CIFS 协议在内核空间中的实现,用于通过网络来共享文件和 IPC 服务。最初…
扫描二维码继续阅读
2020-06-11