将 Samba 绑定到 Tailscale 接口失败,但适用于物理 NIC

将 Samba 绑定到 Tailscale 接口失败,但适用于物理 NIC

我在 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 的结合。两者都不太相关。

相关内容