簡體   English   中英

如果dhcp失敗,則設置保存的靜態IP地址

[英]Set saved static ip address if dhcp fails

我正在嘗試在bash腳本中使用Wheezy在Raspberry Pi上實現以下場景。 這樣做是因為如果DHCP聯機,我希望設備始終獲得新IP,同時我希望設備在DHCP脫機的情況下保留最后使用的IP。 最重要的是,IP地址可能會更改,並且我有很多設備,因此,簡單地設置靜態IP不是我的選擇:

  • 引導(不在腳本中;)
  • 開啟DHCP並嘗試獲取IP地址
  • 檢查我是否有一個

a)獲得IP(DHCP成功)

->將IP信息保存到文件

b)沒有獲取IP(DHCP失敗)

->在這里什么也不做

  • 根據文件中的信息設置固定IP地址

現在的要點是,如果我手動運行腳本,這將非常出色,但是如果讓它在啟動后自動運行,則DHCP將失敗, 但仍會提供一個IP地址 當然,我的腳本認為DHCP獲得了IP地址,但這不是正確的地址!
sys.log告訴我:

dhclient: No DHCPOFFERS received.
dhclient: Trying recorded lease 192.xxx.xx.xx
ifplugd(eth0)[1602]: client: Trying recorded lease 192.xxx.xx.xx

現在的問題是:

  • 我可以停用DHCP客戶端服務(我認為如果將其與dhclient一起插入)給我那個假IP地址嗎?
  • 還是可以以其他方式檢測到DHCP請求未成功(並放棄了偽地址)?

腳本:

#!/bin/bash

echo Switch off Ethernet >> log.log
ifconfig eth0 down
echo Set DHCP mode for Ethernet >> log.log
ifconfig eth0 up
dhclient -r eth0
dhclient eth0
echo Now check if we got ip address >> log.log
countLines=$(ifconfig eth0 | grep "inet addr" | wc -l)
if [ $countLines -ne 0 ]; then
  echo Found ip address via DHCP - Save it to ip.txt >> log.log
  ifconfig eth0 | grep "inet addr" > ip.txt
  echo Also save the resolv.conf - DNS settings >> log.log
  cp /etc/resolv.conf dns.txt
  #grep domain-name-servers /var/lib/dhcp/dhclient.eth0.leases | tail -1 > dns.txt
else
  echo No new ip address - no DHCP online! Use the old settings instead... >> log.log
fi
echo Switch off DHCP - and release the current lease >> log.log
dhclient -r eth0
ipaddress=$(<ip.txt)
ipaddress=${ipaddress#*addr:}
ipaddress=${ipaddress% Bcast*}
broadcast=$(<ip.txt)
broadcast=${broadcast#*Bcast:}
broadcast=${broadcast% Mask*}
netmask=$(<ip.txt)
netmask=${netmask#*Mask:}
dnsserver=$(<dns.txt)
dnsserver=${dnsserver#*servers }
dnsserver=${dnsserver%;*}
echo Set static ip address now ip: $ipaddress, broadcast: $broadcast, netmask: $netmask... >> log.log
ifconfig eth0 $ipaddress broadcast $broadcast netmask $netmask
echo Set the nameserver >> log.log
cp dns.txt /etc/resolv.conf

我真的感到困惑,腳本無法正常運行,但無法在系統啟動后自動啟動!

好的伴侶

您的問題是您的腳本認為如果找不到DHCP,ifconfig將不會獲得IP地址。

如果dhclient無法發現DHCP服務器,則eth0將獲得169.254.*.*地址(自行分配)

您需要保存運行dhclient之前獲得的內容。

例如。 OLDIP=ifconfig eth0 | sed ... Inet ... #come with your SED statement

然后,您繼續:

dhclient eth0
If [$? !=0];then
    Ifconfig eth0 $OLDIP $OLDMASK

我正在用手機書寫,因此語法顯然不正確。

希望能幫助到你

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM