☰
SAMBA 文件共享与 DNS 域名服务:smb.conf 与 named 配置骨架及联调验证
2026/9/29 8:14:45 网站建设 项目流程

1. 局域网里 SAMBA 和 DNS 为什么总是一起出现

如果你在内网搭过文件服务器,大概率遇到过这种场景:Windows 同事想访问共享目录,你告诉他输入\\10.1.1.10\smb_share,他记不住这串 IP;过两天服务器换了地址,所有人的映射盘全断。这时候就需要 DNS 出场了——把\\files.itcast.cluster\smb_share这种好记的名字解析到固定 IP,SAMBA 负责文件传输,Bind 负责名字解析,两者配合才算一套完整的内网文件服务。

SAMBA 的本质是 SMB/CIFS 协议在 Linux 上的实现,让 Windows 和类 Unix 系统能互相共享文件。它靠smbd进程管共享目录和权限(走 TCP 139/445),靠nmbd进程做 NetBIOS 名称解析(走 UDP 137/138)。而 Bind 提供的 DNS 是更现代的名字解析方式,named进程监听 UDP 53 做域名解析,主从同步走 TCP 53。把这两个服务串起来,你就能用域名访问共享,而不是记 IP。

这篇面向自建文件服务器和内网域名解析的场景,交付三样东西:可复制的smb.conf骨架、可复制的named配置骨架、以及一套联调验证动作。另外我会顺带说下怎么用 TaoToken 的统一 Key 通道把 AI 编码工具接进来,方便你写配置时少查文档。适合有 Linux 基础、正在搭内网服务的人跟做。

2. 前置准备:环境、软件与 TaoToken 通道

先把两台机器的角色定清楚。我按最常见的三机结构来:一台 SAMBA 服务器、一台 DNS 服务器、一台客户端测试。实际生产里 SAMBA 和 DNS 可以合并到一台,但分开讲更清楚。

主机名IP角色
samba.itcast.cn10.1.1.10SAMBA 文件共享
dns.itcast.cn10.1.1.12Bind DNS 解析
client.itcast.cn10.1.1.11测试客户端

三台机器都要做的基础动作:设置主机名、配静态 IP、关防火墙和 SELinux、配好 YUM 源。这几步是通用前置,命令如下。

hostnamectl set-hostname samba.itcast.cn su vim /etc/sysconfig/network-scripts/ifcfg-ens33

网卡文件里关键几行改成静态:

BOOTPROTO=none IPADDR=10.1.1.10 NETMASK=255.255.255.0 GATEWAY=10.1.1.2 DNS1=10.1.1.12

注意DNS1这里直接指向你自己的 DNS 服务器,而不是公网 DNS,这样内网域名才能被解析。改完重启网络:

systemctl restart network

关防火墙和 SELinux:

systemctl stop firewalld systemctl disable firewalld setenforce 0 vim /etc/selinux/config

SELINUX=disabled写进去,重启后生效。SELinux 是 SAMBA 权限问题的高发区,测试阶段先关掉,生产环境再按需放行。

装软件:

yum install samba bind bind-utils -y

SAMBA 服务器装samba,DNS 服务器装bind和bind-utils(后者提供dig、nslookup)。装完用rpm -qa | grep -E '^samba|^bind'确认。

注意:如果你在写配置时想让 AI 工具帮你补全smb.conf或 zone 文件,可以先把 TaoToken 的 Key 配好。它的 API 地址是https://taotoken.net/api,兼容 OpenAI 风格的调用,一个 Key 能通多个模型。接入文档在 https://taotoken.net/doc ,Key 在 https://taotoken.net/api-keys 生成。

3. 可复制的 smb.conf 与 named 配置骨架

3.1 smb.conf 骨架

先备份原配置,再动手改:

cp /etc/samba/smb.conf /etc/samba/smb.conf.bak

smb.conf分全局段[global]和共享段。全局段管认证模式、工作组、日志;共享段管具体目录的权限。下面是我实测能跑通的骨架,你直接替换关键路径即可。

[global] workgroup = MYGROUP server string = Samba Server Version %v log file = /var/log/samba/log.%m max log size = 50 security = user passdb backend = tdbsam load printers = no cups options = raw [smb_share] comment = samba service path = /samba/share guest ok = no writable = yes valid users = user01 write list = user01

几个参数说清楚。security = user表示用本地用户密码认证,这是最常用的模式;passdb backend = tdbsam是密码存储格式。共享段里guest ok = no等价于public = no,表示必须账号密码;writable = yes允许写入;valid users限定只有 user01 能访问;write list进一步限定可写用户。如果想让某组只读,用read list = @students这种写法。

创建共享目录并建用户:

mkdir -p /samba/share useradd user01 smbpasswd -a user01

smbpasswd -a会让你输两遍 SMB 密码,这个密码和系统密码是分开的。输完看到Added user user01.就成功了。

权限这块有个坑:目录本身得给 user01 写权限,否则挂载后能进不能写。用 ACL 精确授权:

setfacl -m u:user01:rwx /samba/share

启动服务:

systemctl start nmb systemctl start smb systemctl enable nmb smb

3.2 named 配置骨架

DNS 这边要改两个文件:/etc/named.conf管访问权限,/etc/named.rfc1912.zones管域名指向哪个 zone 文件。先备份:

cp /etc/named.conf /etc/named.conf.bak cp /etc/named.rfc1912.zones /etc/named.rfc1912.zones.bak

named.conf里把监听和允许查询的范围放开到内网网段:

options { listen-on port 53 { 127.0.0.1; 10.1.1.0/24; }; listen-on-v6 port 53 { ::1; }; directory "/var/named"; allow-query { localhost; 10.1.1.0/24; }; recursion yes; };

allow-query控制谁能来查,写成你的内网网段,别写any,否则容易被当开放解析器滥用。

然后在named.rfc1912.zones末尾加一个正向解析区:

zone "itcast.cluster" IN { type master; file "itcast.cluster.zone"; allow-update { none; }; };

type master表示这是主 DNS,file指向 zone 文件名,allow-update { none; }禁止动态更新,手工维护更安全。

创建 zone 文件,注意用-p保留模板权限属性:

cd /var/named cp -p named.localhost itcast.cluster.zone

编辑itcast.cluster.zone:

$TTL 1D @ IN SOA dns.itcast.cn. admin.itcast.cn. ( 0 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum IN NS dns.itcast.cn. dns IN A 10.1.1.12 web IN A 10.1.1.13 samba IN A 10.1.1.10

@代表当前域itcast.cluster,SOA是起始授权记录,NS指定域名服务器,A记录做正向解析。serial 每次改完 zone 文件要加一,否则从服务器不会同步。

检查配置语法:

named-checkconf /etc/named.conf named-checkconf /etc/named.rfc1912.zones cd /var/named named-checkzone itcast.cluster itcast.cluster.zone

三条都无输出或显示 OK 才算过。启动:

systemctl restart named systemctl enable named netstat -tnlp | grep named

看到named监听 53 端口就成了。

3.3 用 TaoToken 接入 AI 编码工具

写这些配置文件时,如果想让 AI 帮你补全或排错,可以在工具的settings.json里配 TaoToken 的统一通道。以常见的 OpenAI 兼容客户端为例:

{ "apiKey": "你的TaoToken Key", "baseURL": "https://taotoken.net/api", "model": "claude-sonnet-4-20250514" }

一个 Key 就能切模型,不用为每个模型单独申请。如果你长期做编码和 Agent 任务,可以看下 Coding Plan:https://taotoken.net/coding-plan 。想先验证模型通不通,用模型对话页:https://taotoken.net/chat 。

4. 联调验证:共享访问与域名解析

配置写完必须验证,不然上线就是事故。分两步走。

4.1 验证 SAMBA 共享

先在服务器本地用smbclient列共享:

smbclient -L 10.1.1.10 -U user01

输入密码后能看到smb_share列表就说明服务发布成功。再进目录试写:

smbclient //10.1.1.10/smb_share -U user01

进去后ls、mkdir test、put 本地文件试一遍,能建能删就对了。

Linux 客户端挂载:

mkdir /u01 mount.cifs -o user=user01,pass=123 //10.1.1.10/smb_share /u01

挂载后touch /u01/hello测试写入。Windows 端在「映射网络驱动器」里填\\10.1.1.10\smb_share,输 user01 和密码即可。

4.2 验证 DNS 解析

客户端先把 DNS 指向你的服务器。临时改:

echo 'nameserver 10.1.1.12' > /etc/resolv.conf

永久改就写进网卡文件的DNS1=10.1.1.12。然后测正向解析:

nslookup samba.itcast.cluster dig samba.itcast.cluster

返回10.1.1.10就对了。反向解析用:

dig -x 10.1.1.10

4.3 联调:用域名访问共享

这是最终目标。DNS 生效后,客户端直接:

mount.cifs -o user=user01,pass=123 //samba.itcast.cluster/smb_share /u01

Windows 端映射\\samba.itcast.cluster\smb_share。能挂上,说明 SAMBA 和 DNS 协同成功。以后服务器换 IP,只改 zone 文件里的 A 记录,客户端不用动。

5. 本篇常见错排查

挂载后目录不可写。最常见。先查目录权限ls -ld /samba/share,再查 ACLgetfacl /samba/share。如果目录属主是 root 且没给 user01 写权限,setfacl -m u:user01:rwx /samba/share补上。还要确认smb.conf里writable = yes且write list包含该用户。

smbclient -L报 NT_STATUS_ACCESS_DENIED。多半是valid users写错或 SMB 密码没设。用pdbedit -L列出 SMB 用户,确认 user01 在列。不在就重新smbpasswd -a user01。

named-checkzone报 serial 或语法错。zone 文件里每条记录结尾的点别漏,dns.itcast.cn.最后的点表示绝对域名。serial 改完记得加一。

nslookup超时。先netstat -tnlp | grep named确认 53 在听;再查named.conf的allow-query是否包含客户端网段;最后确认客户端/etc/resolv.conf指向对。防火墙没关也会导致超时。

DNS 改了不生效。客户端有缓存,systemd-resolve --flush-caches清一下,或者直接重启网络。zone 文件改了要systemctl restart named并递增 serial。

SELinux 导致 SAMBA 拒绝访问。测试阶段setenforce 0临时关;生产环境用setsebool -P samba_export_all_rw on放行,别长期关 SELinux。

排障时如果拿不准报错含义,可以把错误贴给 AI 工具分析。接入通道用 API Keys 页生成:https://taotoken.net/api-keys ,配置参考接入文档:https://taotoken.net/doc 。

6. 把两个服务串成一套内网文件方案

SAMBA 和 Bind 各自单独配都不难,难的是让它们协同:DNS 提供稳定的名字,SAMBA 提供稳定的文件访问,客户端只认域名不认 IP。这套组合特别适合内网有多个文件服务器、又不想让用户记 IP 的场景。

落地时记住三个动作:smb.conf里用valid users和write list收紧权限,别图省事开guest ok = yes;named.conf的allow-query限定内网网段,别开成开放解析器;zone 文件的 serial 每次改动递增,方便主从同步和排障。

如果你还想让 AI 帮你生成更多 zone 记录或批量改共享配置,长期编码任务可以走 Coding Plan:https://taotoken.net/coding-plan ,模型对话验证在 https://taotoken.net/chat ,控制台在 https://taotoken.net/console 。官网入口:https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询