
我有一個 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
根據未使用的ifconfig
IP :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 的網絡