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.cn | 10.1.1.10 | SAMBA 文件共享 |
| dns.itcast.cn | 10.1.1.12 | Bind DNS 解析 |
| client.itcast.cn | 10.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/configSELINUX=disabled写进去,重启后生效。SELinux 是 SAMBA 权限问题的高发区,测试阶段先关掉,生产环境再按需放行。
装软件:
yum install samba bind bind-utils -ySAMBA 服务器装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.baksmb.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 user01smbpasswd -a会让你输两遍 SMB 密码,这个密码和系统密码是分开的。输完看到Added user user01.就成功了。
权限这块有个坑:目录本身得给 user01 写权限,否则挂载后能进不能写。用 ACL 精确授权:
setfacl -m u:user01:rwx /samba/share启动服务:
systemctl start nmb systemctl start smb systemctl enable nmb smb3.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.baknamed.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.104.3 联调:用域名访问共享
这是最终目标。DNS 生效后,客户端直接:
mount.cifs -o user=user01,pass=123 //samba.itcast.cluster/smb_share /u01Windows 端映射\\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= 。