我在 Ubuntu 22.04.1 上安装了 Tailscale 客户端 v1.34.0 和 Samba v4.15.9,目的是通过限制对我的 tailnet 的访问来提高 Samba 共享的安全性。为此,我将 Samba 配置为绑定仅有的通过重置以下两行来进入 Tailscale 界面/etc/samba/smb.conf
:
interfaces = lo tailscale0
bind interfaces only = yes
重新启动后smbd.service
,我们可以检查相关的端口绑定:
$ sudo netstat -plnt4 | grep smb
tcp 0 0 127.0.0.1:139 0.0.0.0:* LISTEN 990922/smbd
tcp 0 0 127.0.0.1:445 0.0.0.0:* LISTEN 990922/smbd
(请注意,它们都与 Tailscale 无关)。
不出所料,这并没有奏效。使用这些设置,尝试从 Tailscale 连接的客户端连接到 Samba 共享会立即失败(我使用 FX Files 从 Android 测试,使用 从另一台 Ubuntu 服务器测试smbclient
),也就是说,在进行身份验证之前。例如,在 Linux 上,smbclient
我收到以下错误:
$ smbclient -L //100.24.22.20//
do_connect: Connection to 100.24.22.20 failed (Error NT_STATUS_CONNECTION_REFUSED)
我注意到 Samba 日志目录中没有新条目/var/log/samba/
。
如果我们放弃将 Samba 限制到 Tailscale(bind interfaces only = no
)的尝试,LAN 客户端就可以连接,并且检查我们的端口绑定表明我们确实在监听全部接口:
$ sudo netstat -plnt4 | grep smb
tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN 1009947/smbd
tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN 1009947/smbd
我认为真正表明 Tailscale-Samba 交互存在问题的是该设置(当然我们使用正确的设备名称,这里用于eth0
说明):
interfaces = lo eth0
bind interfaces only = yes
结果是:
$ sudo netstat -plnt4 | grep smb
tcp 0 0 127.0.0.1:139 0.0.0.0:* LISTEN 988279/smbd
tcp 0 0 127.0.0.1:445 0.0.0.0:* LISTEN 988279/smbd
tcp 0 0 192.168.1.11:445 0.0.0.0:* LISTEN 988279/smbd
tcp 0 0 192.168.1.11:139 0.0.0.0:* LISTEN 988279/smbd
并且可以从 LAN 上的客户端正常连接到 Samba 共享。
这让我得出结论,Samba 配置中的绑定接口功能似乎可以工作并且有效果。但由于某种原因,当绑定到 Tailscale 接口时,所有 Samba 连接都会失败。
这实际上是 Tailscale 的一个错误吗? 如果没有,有人知道可能是什么原因造成的吗?
作为参考,我的完整 samba 配置文件:
[global]
workgroup = FSONE
server string = %h server (Samba, Ubuntu)
interfaces = lo tailscale0
bind interfaces only = yes
log file = /var/log/samba/log.%m
max log size = 1000
logging = file
panic action = /usr/share/samba/panic-action %d
server role = standalone server
obey pam restrictions = yes
unix password sync = yes
passwd program = /usr/bin/passwd %u
passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
pam password change = yes
map to guest = never
[MOUNTS]
path = "/media"
available = yes
valid users = solarchemist
browsable = yes
read only = no
writable = yes
至于以前的工作,我在网上找到的都是Reddit 上一年前提出的问题, 和这个答案简要提到了 Tailscale 与 Samba 的结合。两者都不太相关。