Samba 未侦听指定的wireguard/vpn 接口

Samba 未侦听指定的wireguard/vpn 接口

我在三台计算机之间设置了wireguard vpn 网络。

  • A) 我的家庭 PC 正在运行wireguard 客户端并想要连接到我的办公室服务器上的 sambashare C)。
  • B) 我的家庭服务器充当我的wireguard 服务器/端点。 A) 和 C) 连接到这个。
  • C) 我的 Office 服务器具有我想通过wireguard 访问的 samba 共享。

  • 转发似乎工作正常,因为:

    • 我可以从 A) ping 到 C),也可以从 C) ping 到 A)。当使用C)的wireguard接口ip时。
    • 我还可以通过 SSH 从 A) 到 C)。当使用C)的wireguard接口ip时。

我认为问题在于我的 smb.conf 或 smbd.service 如何绑定到我在 smb.conf 中指定的接口,因为:

  • 不能使用wireguard IP 地址时,可以在C) 访问我的Samba 共享。
  • 指定 eth0 IP 地址时,在 C) 处访问我的 Samba 共享。

这是我的 smb.conf 文件的样子:

#### 联网 ####

# 要绑定到的特定接口/网络集
# 这可以是接口名称或 IP 地址/网络掩码;
# 接口名称通常是首选
;接口 = 127.0.0.0/8 eth0
   接口 = lo eth0 wg-buero-隧道

# 仅绑定到指定的接口和/或网络;你必须使用
# 上面的“interfaces”选项可以使用它。
# 如果您的 Samba 机器是,建议您启用此功能
# 不受防火墙保护或者本身就是防火墙。然而,这
# 选项无法正确处理动态或非广播接口。
;仅绑定接口 = 是
   仅绑定接口 = 是

这是的输出netstat -tulpen | grep smbd

tcp 0 0 127.0.0.1:139 0.0.0.0:* 监听 0 17353 1023/smbd
tcp 0 0 192.168.124.177:139 0.0.0.0:* 监听 0 17349 1023/smbd
tcp 0 0 127.0.0.1:445 0.0.0.0:* 监听 0 17352 1023/smbd
tcp 0 0 192.168.124.177:445 0.0.0.0:* 监听 0 17348 1023/smbd

这里的 IP 应与我在 smb.conf 中指定的设备相对应,但仍然缺少一个 IP/设备。

127.0.0.1

以太网0192.168.124.177

WG-布埃罗隧道Wireguard ip完全丢失

我真的没有想法了。

答案1

如果未显式指定接口地址/掩码,但如果接口受interfaces = ...和限制bind interfaces only = yes, Samba 将不会侦听 Wireguard 接口。

解决办法是指定 Wireguard 接口的 IP 地址/掩码。例如

interfaces = lo eth0 10.8.0.0/24

Samba 文档也清楚地表明了这一点 smb配置文件:接口

...默认情况下,Samba 将查询内核以获取所有活动接口的列表,并使用除 127.0.0.1 之外的具有广播功能的任何接口。 ...
...“掩码”参数可以是位长度(例如,C 类网络为 24),也可以是点分十进制形式的完整网络掩码。

众所周知,Wireguard 不支持广播,为什么不支持。这些是 Samba 的后果:不可能使用其他三种替代方法来指定其中描述的接口,例如 2) 接口名称或 3) 仅 IP 地址或 4) 广播地址/掩码,因为 Wireguard 不支持广播。

也可以通过ip link命令验证:

eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> ... 
    link/ether ...
wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> ...      # without "BROADCAST"
    link/none

答案2

这里提出的解决方案对我来说不起作用,就我而言,解决方案是设置

bind interfaces only = no

/etc/samba/smb.conf.template文件中。这样,Samba 将监听所有接口,无论是否广播。

这可能会产生一点缺点,samba 共享必须通过 IP 访问,而不是通过名称访问,例如

\\192.168.1.1    - works
\\SAMBA_SHARE    - does not work

但这不是一个大问题。

答案3

要使 Samba(或需要广播的类似内容)等功能在wireguard 隧道上运行,您可以在wireguard 之上使用vxlan 隧道。

这种封装(vxlan)或多或少就像一个“真正的”网络接口,至少在我的场景中,广播/多播等完全正常工作。

我已经设置了其中一些隧道,它们的性能非常好,即使有两种封装的性能损失。通过命令“ip link add”配置也相当容易,你可以在网上找到很多例子,我从这篇(非常有趣)文章中得到了灵感(删除了,我留下了IA的链接):

https://web.archive.org/web/20200708181943/https://insom.github.io/journal/2017/04/02/

https://gist.github.com/pamolloy/f464c2b54af03c436491f42abf0bbff9

答案4

我想那是因为桑巴只能在支持广播的接口上监听

  • 参数:接口
  • 类型:字符串
  • 描述:Samba 将响应的网络接口。允许更改默认值。
  • 默认值:所有能够广播的可用接口

它没有说明非默认情况下会发生什么,但我猜是这样。

相关内容