如何使用 Raspbian 5/5/2015 解析主机名?

如何使用 Raspbian 5/5/2015 解析主机名?

我正在尝试通过 samba 共享 NTFS 驱动器或驱动器上的目录,并且我找到了几个教程,这些教程显示只需几分钟即可完成此操作(减去更新和软件包安装)。我已经用了大约三周了,但我无法让它工作。 目前,网络上的其他计算机无法解析主机名,我相信这是错误0x80070035的根本原因。

如果我使用这样的 IP 地址:\\192.168.1.xx\,我可以看到共享“shares”并提示输入用户名/密码。但是,输入用户名和密码后,我收到错误代码:0x80070035 找不到网络路径(关于超级用户问题的图片)。我已经开始了这个问题在 SuperUser 那里,它已经停滞了,所以我想我应该来这里并询问可以对这一切做些什么。


我使用的教程

教程 1 - Raspberry Pi NAS:构建 Raspberry Pi Samba 服务器

教程 2 - 如何将 Raspberry Pi 变成低功耗网络存储设备

教程 3 / Youtube DIY - 使用 Samba 将 Raspberry Pi 作为 NAS - 操作方法


问题与研究

n00b 如何开始排除 samba 故障?有教程可以帮助我完成这项工作吗?

我已经刻录了一个新的树莓派图像并从头开始,但这没有帮助。我不需要 avahi/Bonjour,因为我使用的是 samba/netbios,而且我不想使用 HOSTS 文件修改,因为我有几台机器想要使用它。鉴于有软件包和教程,我很困惑为什么我无法启动并运行它以及为什么我遇到如此困难。特别是考虑到指令的同质性。

nsswitch.conf

# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.

passwd:         compat
group:          compat
shadow:         compat

hosts:          files mdns4_minimal dns mdns4 wins [NOTFOUND=return]
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       nis

从树莓派 ping:

$ ping -c3 raspberrypi
PING raspberrypi (127.0.1.1) 56(84) bytes of data.
64 bytes from raspberrypi (127.0.1.1): icmp_req=1 ttl=64 time=0.208 ms
64 bytes from raspberrypi (127.0.1.1): icmp_req=2 ttl=64 time=0.200 ms
64 bytes from raspberrypi (127.0.1.1): icmp_req=3 ttl=64 time=0.240 ms
--- raspberrypi ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 0.200/0.216/0.240/0.017 ms

smb配置文件

[global]
   workgroup = WORKGROUP
#   NetBIOS name = raspberrypi
   server string = %h server
   dns proxy = no
   log file = /var/log/samba/log.%m
   max log size = 1000
   syslog = 0
   panic action = /usr/share/samba/panic-action %d
   security = user
   encrypt passwords = true
   passdb backend = tdbsam
   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$
   pam password change = yes
   map to guest = bad user
   usershare allow guests = yes
[homes]
   comment = Home Directories
   browseable = no
   read only = yes
   create mask = 0700
   directory mask = 0700
   valid users = %S
[printers]
   comment = All Printers
   browseable = no
   path = /var/spool/samba
   printable = yes
   guest ok = no
   read only = yes
   create mask = 0700
[print$]
   comment = Printer Drivers
   path = /var/lib/samba/printers
   browseable = yes
   read only = yes
   guest ok = no
[Shares]
   comment = Shares Folder
   path = '/media/80Gigger/shares'
   browsable = yes
   read only = no

系统表

proc            /proc           proc    defaults          0       0
/dev/mmcblk0p1  /boot           vfat    defaults          0       2
/dev/mmcblk0p2  /               ext4    defaults,noatime  0       1
#/dev/sda1      /media/USB              auto    gid=1002,uid=1001       0       0
# a swapfile is not a swap partition, so no using swapon|off from here on, use  dphys-swapfile swap[o$

更新1

等\主机

127.0.0.1       localhost
::1             localhost ip6-localhost ip6-loopback
fe00::0         ip6-localnet
ff00::0         ip6-mcastprefix
ff02::1         ip6-allnodes
ff02::2         ip6-allrouters

127.0.1.1       raspberrypi

更新2

Windows 计算机未加入域。 pi 具有默认主机名和主机文件。当你说“摆弄”时,我应该改变什么?

$ hostname
raspberrypi

$ nmblookup raspberrypi
querying raspberrypi on 192.168.1.255
192.168.1.14 raspberrypi<00>

$ nmblookup -M -- -
querying __MSBROWSE__ on 192.168.1.255
192.168.1.14 __MSBROWSE__<01>

$ smbclient -L 192.168.1.14
Enter pi's password:
Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.6.6]

        Sharename       Type      Comment
        ---------       ----      -------
        print$          Disk      Printer Drivers
        Shares          Disk      Shares Folder
        IPC$            IPC       IPC Service (raspberrypi server)
Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.6.6]

        Server               Comment
        ---------            -------
        D-WHALEY2
        LAPTOP
        RASPBERRYPI          raspberrypi server

        Workgroup            Master
        ---------            -------
        WORKGROUP            RASPBERRYPI

更新3

我取消了树莓派中 NetBios 字段的注释,现在在 Windows 资源管理器中遇到了不同的错误;错误 0x80004005。如果我尝试导航到 \raspberrypi\ ,则会收到此错误。 我发现这个问题这描述了错误的许多方面。不过我只找到了 1 个 Microsoft 6to4 适配器。删除并重新启动没有效果。

如果我导航到 \192.168.1.14\ 并输入适当的凭据,我仍然收到错误 0x80070035。

我在 Windows 7 笔记本电脑上禁用了 ipv6。但我认为这不会对这种现象产生任何影响。

在树莓派上,我无法 ping 通 Windows 机器的名称,也无法访问 Windows 7 机器上的 samba 共享。我不确定 PCMANFM 是否可以做到这一点,但它肯定不起作用。

更新4

我现在可以使用 samba 并让我查看共享中的文件,但名称解析仍然无法工作。进步!感谢迄今为止大家的帮助!

看来我正在解决不止一个问题,而且我刚刚解决了访问共享问题。该驱动器需要一个永久挂载点来供 samba 读/写,因此我必须修改 fstab 文件。另外,似乎当我删除卷名中的空格时,我在 smb.conf 文件中的 oath 周围留下了单引号,并且在 samba 日志中查看,这导致了问题,所以我也必须对其进行编辑。

我仍然无法通过 ping 来将 pi 的名称解析为 IP,尽管我将尝试破译下面的答案,看起来会有所帮助。

我为我正在使用的帐户重新执行了 smbpasswd,以防万一我之前忘记执行此操作:

sudo smbpasswd -a backups

这是我的新主机文件:

127.0.0.1       raspberrypi localhost
::1             raspberrypi localhost ip6-localhost ip6-loopback
fe00::0         ip6-localnet
ff00::0         ip6-mcastprefix
ff02::1         ip6-allnodes
ff02::2         ip6-allrouters

#127.0.0.1      raspberrypi
#127.0.1.1      raspberrypi

这是我的 fstab 文件:

proc            /proc           proc    defaults          0       0
/dev/mmcblk0p1  /boot           vfat    defaults          0       2
/dev/mmcblk0p2  /               ext4    defaults,noatime  0       1
/dev/sda1       /media/80Gigger         auto    gid=1002,uid=1001       0      $
# a swapfile is not a swap partition, so no using swapon|off from here on, use $

这是我的新 smb.conf:

[global]
   workgroup = WORKGROUP
   #netbios name = raspberrypi
   server string = %h server
   dns proxy = no
   log file = /var/log/samba/log.%m
   max log size = 1000
   syslog = 0
   panic action = /usr/share/samba/panic-action %d
   security = user
   encrypt passwords = true
   passdb backend = tdbsam
   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$
   pam password change = yes
   map to guest = bad user
   usershare allow guests = yes
[homes]
   comment = Home Directories
   browseable = no
   read only = yes
   create mask = 0700
   directory mask = 0700
   valid users = %S
[printers]
   comment = All Printers
   browseable = no
   path = /var/spool/samba
   printable = yes
   guest ok = no
   read only = yes
   create mask = 0700
[print$]
   comment = Printer Drivers
   path = /var/lib/samba/printers
   browseable = yes
   read only = yes
   guest ok = no
[Shares]
   comment = Shares Folder
   path = /media/80Gigger/shares
   browsable = yes

答案1

如果你说“ping raspberrypi”,它不会使用与 Windows 机器相同的方式进行名称查找......大概。也就是说,SMB/CIFS 协议具有三种执行名称查找的方法,但其他两种方法实际上仅在您配置域时使用,而您没有配置域。

这意味着您需要通过 NMB 协议进行名称查找。 Samba 将默认使用本地计算机的主机名(命令的输出hostname)作为 NMB 名称。尝试运行它,并验证它是否是您期望的主机名。如果没有,就继续摆弄,/etc/hosts直到出现为止。您可能还需要修复 /etc/hostname (但请注意,在运行hostnameinit 脚本或重新启动之前,后一个文件中的更改不会生效)。

毫不奇怪,用于执行 NMB 查找的 samba 工具称为nmblookup.在树莓派上运行该程序,并以 的输出hostname作为参数,并验证它是否与树莓派的 IP 地址匹配。如果没有,请发布输出。如果确实如此,但 IP 地址前面有一个位于尖括号 (<>) 之间的十六进制数字,那就没问题(十六进制数字是结果的类型;有许多可能的结果类型)。

NMB 协议非常糟糕,部分原因是它想要选举一个“主浏览器”主机,但这并不总是能正常工作。尝试运行nmblookup -M -- -(即,nmblookupdash-capital m-space-dash-dash-space-dash。是的,这很难看)。这将查找主浏览器。记下您返回的 IP 地址。跑smbclient -L ip,哪里ip是那个ip地址。验证您的树莓派是否已列出。如果不是,您可以尝试通过preferred master = yes在您的smb.conf.但是,如果您正在运行域,则不要这样做(域主机必须是主浏览器,否则域登录将失败)。

如果您运行的是已加入域的 Windows 7 或更高版本,则默认情况下 Windows 将不再执行 NMB 查找。在这种情况下,您可能需要设置一些注册表项来更改这些默认值(这些项可以在 samba wiki 上找到)。或者,您可以将树莓派加入 Windows 域,这样就不再需要 NMB。

答案2

这可能会为您指明正确的方向,但可能无法解决问题。路由器上的 DHCP 和 DNS 恶魔可能会把事情搞砸。就我而言,我在 opensuse 和 raspberypi 上遇到了同样的问题。以下是我所做的所有步骤:

  1. 编辑的主机名文件 /etc/hostnamemymacnine也尝试过,但mycmachine.domain都不起作用。
  2. 搞乱了 resolv.conf 一直工作,直到 Windows 机器中更新或删除了某些内容
  3. 发现我的WRT1900ac有可以输入域名的地方并执行了它,每次都有效。

有人指出您的 NetBIOS 名称已被注释掉。

答案3

解决方案

我无法在评论中提供此内容,但我希望您看到一个工作hosts文件(来自我的工作 Gentoo 安装):

# /etc/hosts: Local Host Database
#
# This file describes a number of aliases-to-address mappings for the for 
# local hosts that share this file.
#
# In the presence of the domain name service or NIS, this file may not be 
# consulted at all; see /etc/host.conf for the resolution order.
#

# IPv4 and IPv6 localhost aliases
127.0.0.1       bedroom-gentoo.myISP.net     bedroom-gentoo  localhost
::1             bedroom-gentoo.myISP.net     bedroom-gentoo  localhost


#
# Imaginary network.
#10.0.0.2               myname
#10.0.0.3               myfriend
#
# According to RFC 1918, you can use the following IP networks for private 
# nets which will never be connected to the Internet:
#
#       10.0.0.0        -   10.255.255.255
#       172.16.0.0      -   172.31.255.255
#       192.168.0.0     -   192.168.255.255
#
# In case you want to be able to connect directly to the Internet (i.e. not 
# behind a NAT, ADSL router, etc...), you need real official assigned 
# numbers.  Do not try to invent your own network numbers but instead get one 
# from your network provider (if any) or from your regional registry (ARIN, 
# APNIC, LACNIC, RIPE NCC, or AfriNIC.)
#

请注意,localhost的地址127.0.0.1可以解析为多个名称。

  1. FQDN(第二列),以防应用程序需要。 (这在OP提供的链接中进行了解释)。
  2. 我的机器名称(第三列)。
  3. 本地主机(第四列)。

另请注意,我不区分 IPv4 和 IPv6


此格式消除了对127.0.1.1.由于我不希望网络上的其他人看到我的机器,因此我将虚构的网络部分注释掉,但如果我想这样做,我会添加(假设我有您的设备):

#
# Real Network
192.168.1.14            raspberrypi.myISP.net    raspberrypi
192.168.1.x             D-WHALEY2.myISP.net      D-WHALEY2
192.168.1.xx            LAPTOP.myISP.net         LAPTOP

# Imaginary Network
#10.0.0.2               myname
#10.0.0.3               myfriend
#

为了每次都能正常工作,我必须登录路由器并通过 MAC 过滤进行分配,并从 Raspianhosts文件中删除 127.0.1.1。此操作只需完成一次:(MAC 地址解析为静态 IP 地址)

  1. Pi的MAC地址 --> 192.168.1.14
  2. D-WHALEY2 的 MAC 地址 --> 192.168.1.x
  3. 笔记本电脑的 MAC 地址 --> 192.168.1.xx

这样做可以确保每次启动网络上的设备时,都会为其分配与您的hosts文件匹配的地址。它还消除了 Windows 计算机解析内部地址的需要。


问题

Windows 无法解析 Pi 的地址,原因有 2 个:

  1. 127.0.1.1不是有效的内部地址,根据RFC 1918, 取代为RFC 6761。另请参阅hosts文件中的注释。
  2. 由于 Windows 有一个不包含该127.0.1.1地址的主机文件,因此它将其视为另一个本地主机地址(请参阅谁选择 127.0.0.1 作为 localhost,为什么?它有什么意义呢?),为什么。这种行为会导致OP描​​述的错误。

简而言之,这是 Windows 的问题,也是基于 Debian 的发行版的“功能”。删除“功能”并配置路由器以“修复”Windows 中的问题应该允许 Samba 连接

相关内容