有沒有辦法在 Rasperry Pi 上的 Raspbian Linux 中停用 DHCP 用戶端?

有沒有辦法在 Rasperry Pi 上的 Raspbian Linux 中停用 DHCP 用戶端?

我有一個 Linux 伺服器(使用 Raspbian 作為作業系統的 Rasperry Pi),應該只使用靜態 IP。

但是我注意到它也從 DHCP 伺服器取得了 IP(DHCP 給出的 IP 是192.168.111.2)。根據網路設置,伺服器應僅使用靜態 IP ( 192.168.111.100)。

內容/etc/network/interfaces

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 192.168.111.100
netmask 255.255.255.0
gateway 192.168.111.1
dns-nameservers ip1 ip2

儘管使用靜態配置,我也可以使用 DHCP 給出的 IP 透過 SSH 連接到設備。而且似乎ntpd使用了錯誤的 IP 以及正確的 IP。

Netstat 的輸出:

udp        0      0 192.168.111.2:123       0.0.0.0:*                           2774/ntpd
udp        0      0 192.168.111.100:123     0.0.0.0:*                           2774/ntpd

根據未使用的ifconfigIP :192.168.111.2

eth0      Link encap:Ethernet  HWaddr b8:27:eb:be:18:1c
          inet addr:192.168.111.100  Bcast:192.168.111.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:138099 errors:0 dropped:0 overruns:0 frame:0
          TX packets:81146 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:95954711 (91.5 MiB)  TX bytes:27076870 (25.8 MiB)

ps -ef | grep dhcp顯示我有一個 DHCP 守護程序正在運行:

root      2000     1  0 Oct07 ?        00:00:06 /sbin/dhcpcd

如何停用DHCP守護程序啟動並確保我的伺服器僅使用靜態?

答案1

這種情況聽起來真的很奇怪,因為如果/etc/network/interfaces.也就是說,Raspberry Pi 官方網站上的討論重點關注用戶「rpdom」在日期為「2015 年 5 月 28 日星期四上午 6:21」的貼文中指出的問題:

這發生在最新的更新中。這是由新的 dhcp 客戶端忽略接口文件的作用並另外做自己的事情引起的......對我來說似乎很瘋狂。我會看看如何重新配置​​ dhcp 客戶端(不記得它是什麼或如何操作,我仍然使用適合我的舊客戶端)、停用它或刪除它(如果可能)。

在線程的更深處,用戶“KLL”建議以下其他帖子他們的回覆日期為「2015 年 8 月 10 日星期一中午 12:59」。據《克努特》記載:

在此過程中,升級 /etc/network/interfaces以「手動」一詞而不是 dhcp 或靜態修改了我的文件,最終我得到了兩個 IP 位址,我的靜態位址和 dhcp 位址。我終於有時間玩它,發現它的 dhcpcd5工作方式與以前不同。若要僅取得您的靜態位址,請勿修改/etc/network/interfaces.如果您更改了“手動”一詞,請放回它,然後 /etc/dhcpcd.conf按照文件中的範例所示進行修改。

所以我們的想法是,dhcpcd5在其中一次升級中, 的行為改變了。解決此問題的建議是刪除任何更改,/etc/network/interfaces而是調整設定以/etc/dhcpcd.conf取得靜態 IP 位址;下面的範例配置:

static <value>
             Configures a static <value>.  If you set ip_address then dhcpcd
             will not attempt to obtain a lease and just use the value for the
             address with an infinite lease time.

             Here is an example which configures a static address, routes and
             dns.
                   interface eth0
                   static ip_address=192.168.0.10/24
                   static routers=192.168.0.1
                   static domain_name_servers=192.168.0.1

有關內容的更多資訊dhcpcd.conf可以找到在它的官方手冊頁上

也就是說,另一個想法是保留您的設置,/etc/network/interfaces然後編輯/etc/dhcpcd.conf以添加行denyinterfaces eth0以告訴 DHCP 守護程序完全忽略eth0。任一解決方案都應該有效,但根據您的整體網路需求/要求,其中一個解決方案可能是更優選的解決方案。

答案2

對我有用的是使用 /etc/network/interfaces 就像原來的問題一樣,然後簡單地刪除 dhcp 用戶端:

apt-get remove dhcpcd5 isc-dhcp-client isc-dhcp-common

答案3

停用任何服務(例如 dhcpcd)的最佳方法是使用系統管理功能。您需要重新啟動才能生效 - 除非您也停止服務。

對於 Jessie(使用systemd管理):

sudo systemctl disable dhcpcd.service

給老 Wheezy(System-V管理階層):

sudo update-rc.d dhcpcd disable

但如果您確實停用它,那麼您需要確保您有靜態 IP 配置,否則/etc/network/interfaces您的介面將無法獲得 IP 位址。

答案4

以下是我需要為 Raspbian Jessie 2017-01-11 做的事情的總結:

編輯 /etc/network/interfaces 並新增靜態位址節,刪除對靜態介面(本例為 eth0)的其他參考。自動行很重要,否則介面將不會在啟動時啟動:

    auto eth0
    iface eth0 inet static
      address 192.168.44.17
      netmask 255.255.255.0
      gateway 192.168.44.27

接下來停用 dhcpcd 並啟用標準網路:

  • 禁用 dhcpcd:systemctl disable dhcpcd.service
  • 啟用網路:systemctl enable networking
  • 重啟

截至 2017 年 1 月 11 日發布的 Raspbian Jessie 似乎並未使用 systemd 的網絡

相關內容