Networking

如何使用主機名從 LAN 訪問機器

  • February 25, 2022

以下是我想使用其主機名訪問的機器的詳細資訊:

$ hostname
hostname
$ cat /etc/hosts
127.0.0.1   localhost
127.0.1.1   hostname.company.local  hostname

這是預設的 Debian 6 (Squeeze) 安裝,所以我還沒有擺弄任何東西。

這是我從試圖訪問上述機器的機器(執行 Debian Unstable)中得到的:

$ ping hostname
ping: unknown host hostname
$ ping hostname.company.local
ping: unknown host hostname.company.local
$ cat /etc/resolv.conf
nameserver 192.168.2.21
nameserver 192.168.2.51
search company.local

在 Internet 上,包括本地網路,機器通過IP 地址相互呼叫。為了使用機器 B 的名稱從機器 A 訪問機器 B,機器 A 必須有某種方法將 B 的名稱映射到其 IP 地址。在 A 上聲明機器名的方式有以下三種:

  • 一個主機文件。這是一個將名稱映射到地址的簡單文本文件。
  • 域名系統(DNS)。這是全球網際網路上使用的方法。例如,當您在瀏覽器中載入此頁面時,您的電腦所做的第一件事就是發出 DNS 請求以了解unix.stackexchange.com.
  • 其他名稱數據庫,例如NISLDAPActive Directory。這些在一些公司網路中使用,但不經常使用(許多使用 NIS、LDAP 或 AD 作為使用者數據庫的網路使用 DNS 作為機器名稱)。如果您的網路使用其中之一,您有一個專業的網路管理員,應該問他該怎麼做。

這些在實踐中可以通過多種方式發揮作用;不可能全部覆蓋。在這個答案中,我將描述一些常見的情況。

主機文件

hosts 文件方法的優點是不需要任何特殊方法。如果您有多台機器,這可能會很麻煩,因為當一台機器的名稱更改時,您必須更新每台機器。如果 B 的 IP 地址是動態分配的(這樣每次連接網路都會得到不同的),就不合適了。

主機文件是將名稱映射到 IP 地址的簡單行列表。它看起來像這樣:

127.0.0.1       localhost localhost.localdomain
198.51.100.42   darkstar darkstar.bands

在 unix 系統上,主機文件是/etc/hosts. 在 Windows 上,它是c:\windows\system32\drivers\etc\hosts. 幾乎每個可以連接到 Internet 的作業系統都有一個類似的文件。維基百科有一個列表

在 A 的 hosts 文件中為 B 添加一個條目:

  1. 確定B的IP地址。在B上,執行命令ifconfig(如果沒有找到命令,嘗試/sbin/ifconfig)。輸出將包含如下行:
eth1      Link encap:Ethernet  HWaddr 01:23:45:67:89:ab
         inet addr:10.3.1.42  Bcast:10.3.1.255  Mask:255.255.255.0

本例中,B 的 IP 地址為 10.3.1.42。如果有幾inet addr:行,請選擇與您的網卡相對應的那一行,而不是lo條目或隧道或虛擬條目。 2. 編輯 A 上的 hosts 文件。如果 A 正在執行某個 unix 系統,您需要以/etc/hosts超級使用者身份進行編輯;請參閱如何以系統管理員 (root) 身份執行命令

家庭或小型辦公室網路上的 DHCP+DNS

如果您擁有必要的設備,此方法是迄今為止最簡單的方法。您只需要配置一台設備,您的所有電腦都會知道彼此的名稱。此方法假定您的電腦通過DHCP獲取其 IP 地址,這是電腦在連接到網路時自動檢索 IP 地址的一種方法。如果您不知道 DHCP 是什麼,他們可能知道。

如果您的網路有一個家庭路由器,那麼它是為連接到該路由器的機器配置名稱的最佳位置。首先,你需要弄清楚B的MAC地址。每個網路設備都有一個唯一的MAC地址。在 B 上,執行命令ifconfig -a(如果找不到命令,請嘗試/sbin/ifconfig -a)。輸出將包含如下行:

   eth1      Link encap:Ethernet  HWaddr 01:23:45:67:89:ab

在本例中,MAC 地址是01:23:45:67:89:ab。您必須選擇與通過電纜連接到路由器的網路埠相對應的 HWaddr 線路(如果您通過 wifi 連接,則選擇 wifi 卡)。如果您有多個條目並且您不知道哪個是哪個,請插入電纜並查看哪個網路設備接收 IP 地址(inet addr正下方的行)。

現在,在路由器的 Web 界面上,查找“DHCP”之類的設置。設置的名稱和位置完全取決於路由器型號,但大多數都有類似的基本設置。這是番茄韌體上的樣子:

番茄截圖

輸入 MAC 地址、IP 地址和所需名稱。您可以選擇本地網路地址範圍內的任何 IP 地址。大多數家庭路由器都針對 192.168 形式的地址範圍進行了預配置。xy或 10. x的。z。例如,在上面顯示的 Tomato 路由器上,在“網路”選項卡中,有一個值為 10.3.0.1 的“路由器 IP 地址”設置和一個值為 255.255.255.0 的“子網遮罩”設置,這意味著電腦在本地網路必須具有 10.3.0 形式的地址。z。還有一系列地址用於自動分配的 DHCP 地址(10.3.0.129–10.3.0.254);對於您手動分配的 DHCP 地址,請選擇一個不在此範圍內的地址。

現在將 B 連接到網路,它應該會獲得您指定的 IP 地址,並且可以通過指定的名稱從網路中的任何機器訪問它。

使用 Dnsmasq 製作自己的 DNS 伺服器

如果您沒有功能強大的家用路由器,您可以在任何 Linux 機器上設置相同的功能。我將解釋如何使用Dnsmasq來設置DNS。還有許多其他類似的程序;我選擇了 Dnsmasq,因為它易於配置且輕量級(例如,上面說明的 Tomato 路由器使用它)。Dnsmasq 適用於 PC、伺服器和網路設備的大多數 Linux 和 BSD 發行版。

選擇一台始終開啟、具有靜態 IP 地址且執行某種 Linux 或 BSD 的電腦;我們稱它為 S(代表伺服器)。在 S 上,安裝dnsmasq包(如果它不存在)。下面我假設配置文件是/etc/dnsmasq.conf;位置可能因某些分佈而異。現在你需要做幾件事。

  • 告訴 Dnsmasq 提供您的主機名以及從 Internet 獲取的主機名。最簡單的方法是在其中輸入名稱和 IP 地址/etc/hosts(請參閱上面的“主機文件”部分),並確保/etc/dnsmasq.conf沒有no-hosts取消註釋該指令。(以 a 開頭的行#被註釋掉。)您可以將名稱放在不同的文件中;如果你這樣做,請addn-hosts=/path/to/hosts/file/etc/dnsmasq.conf.

  • 告訴 Dnsmasq 如何獲取 Internet 上機器名稱的 IP 地址。

    • 如果您執行的是 Debian、Ubuntu 或衍生產品,請安裝該resolvconf軟體包。在最常見的情況下,一切都會開箱即用。
    • 如果您的網路管理員或 ISP 為您提供了 DNS 伺服器的地址,請在 中輸入它們/etc/dnsmasq.conf,例如:
    server=8.8.8.8
    server=8.8.4.4
    
    • 如果您不知道目前的 DNS 設置是什麼,請查看文件/etc/resolv.conf. 如果您看到類似的線條,請在其中nameserver 8.8.8.8插入一條線。更改後,重新啟動 Dnsmasq。執行此操作的命令取決於分佈;典型的可能性包括或。server=8.8.8.8``/etc/dnsmasq.conf``/etc/dnsmasq.conf``restart dnsmasq``/etc/init.d/dnsmasq restart
  • 告訴 S 對所有主機名請求使用 Dnsmasq 服務。編輯文件/etc/resolv.conf(以 root 身份),刪除每一nameserver行,然後放置nameserver 127.0.0.1

    • 如果您在 Debian 或 Ubuntu 上使用 resolvconf,如果您在網路啟動並執行的/etc/resolv.conf情況下安裝了該軟體包,則可能不是最佳選擇。resolvconf確保目錄中的文件和base文件不包含任何條目,然後執行head(以 root 身份)。tail``/etc/resolvconf/resolv.conf.d/``nameserver``resolvconf -u
  • 告訴其他機器使用 S 作為 DNS 伺服器。編輯/etc/resolv.conf並替換所有nameserver行,nameserver 10.3.0.2其中 10.3.0.2 是 S 的 IP 地址(參見上文了解如何找出 S 的 IP 地址)。

你也可以使用 Dnsmasq 作為DHCP伺服器,這樣機器就可以自動獲取其名稱對應的地址。這超出了這個答案的範圍;查閱 Dnsmasq 文件(並不難)。請注意,給定的本地網路上只能有一個 DHCP 伺服器(本地網路的確切定義超出了此答案的範圍)。

全球網際網路上的名字

到目前為止,我假設一個本地網路。如果您想為位於世界不同角落的機器命名怎麼辦?您仍然可以使用上述任何技術,除了涉及 DHCP 的部分僅適用於本地網路。或者,如果您的機器有公共 IP 地址,您可以為它們註冊自己的公共名稱。(您也可以將私有 IP 地址分配給公有名稱;它不太常見且不太有用,但沒有技術難度。)

獲取自己的域名

您可以獲取自己的域名並將 IP 地址分配給該域內的主機名。您需要向域名提供商註冊域名;這通常會花費 $ 10– $ 15/年(適用於最便宜的域名)。使用您的域名提供商的 Web 界面為主機名分配地址。

動態 DNS

如果您的機器具有動態 IP 地址,您可以使用動態 DNS協議在地址更改時更新與機器名稱關聯的 IP 地址。並非所有域名提供商都支持動態 DNS,因此請先購買再購買。對於個人使用,No-IP提供免費的動態 DNS 服務,如果您使用自己的域(例如example.ddns.net)。

引用自:https://unix.stackexchange.com/questions/16890