我在我的 IoT 專案中使用 BeagleBone Black 設備作為能源監控設備。應用程式透過USB(Modbus RTU)讀取資料並透過MQTT將其發送到遠端雲端。大約有 15-20 個這樣的 BeagleBone Black 設備。為了存取互聯網,工廠 IT 經理給了我 15-20 個靜態 IP 位址實例。我在檔案中設定了靜態IP位址/etc/network/interfaces
。但有時網路連線無法正常運作。當我調試它時,我發現BeagleBone Black正在獲取動態IP位址。
工廠中的靜態和動態 IP 位址有不同的範圍。如果我重新啟動 BeagleBone Black,它會再次正確捕獲靜態 IP 位址並且系統正常運作。
我在隨機 IP 位址中遇到了這個問題。截至目前,無法將其永久轉移到動態 IP 範圍內。這發生在隨機設備中。請幫我解決這個問題。這是檔案中設定的 IP/etc/network/interface
和收到的 IP 位址。
例如,設備中設定的靜態IP位址。這是/etc/network/interface
BeableBone Black 中的設定檔:
#auto eth0
#iface eth0 inet dhcp
auto eth0
iface eth0 inet static
address 10.12.4.152
netmask 255.255.254.0
gateway 10.12.4.1
# Example to keep MAC address between reboots
#hwaddress ether DE:AD:BE:EF:CA:FE
##connman: ethX static config
#connmanctl services
#Using the appropriate ethernet service, tell connman to setup a static IP address for that service:
#sudo connmanctl config <service> --ipv4 manual <ip_addr> <netmask> <gateway> --nameservers <dns_server>
##connman: WiFi
#
#connmanctl
#connmanctl> tether wifi off
#connmanctl> enable wifi
#connmanctl> scan wifi
#connmanctl> services
#connmanctl> agent on
#connmanctl> connect wifi_*_managed_psk
#connmanctl> quit
# Ethernet/RNDIS gadget (g_ether)
# Used by: /opt/sripts/boot/autoconfigure_usb0.sh
iface usb0 inet static
address 192.168.7.2
netmask 255.255.255.252
network 192.168.7.0
gateway 192.168.7.1
文件中的IP位址:
address 10.12.4.152 netmask: 255.255.254.0 gateway: 10.12.4.1
收到的 IP 位址(使用ifconfig
命令檢查):
inet 10.12.4.207 netmask 255.255.254.0
命令的完整回應ifconfig
:
# ifconfig
eth0: flags=-28605<UP,BROADCAST,RUNNING,MULTICAST,DYNAMIC> mtu 1500
inet 10.12.4.207 netmask 255.255.254.0 broadcast 10.12.5.255
inet6 fe80::f6e1:1eff:fe8c:d785 prefixlen 64 scopeid 0x20<link>
ether f4:e1:1e:8c:d7:85 txqueuelen 1000 (Ethernet)
RX packets 146702 bytes 10983334 (10.4 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 6716 bytes 509906 (497.9 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 174
lo: flags=74<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1 (Local Loopback)
RX packets 164064 bytes 18078349 (17.2 MiB)
RX errors 0 dropped 0 everruns 0 frame 0
TX packets 164064 bytes 18078349 (17.2 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
usb0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 192.168.7.2 netmask 255.255.255.252 broadcast 192.168.7.3
ether f4:e1:1e:8c:d7:87 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
usb1: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 192.168.6.2 netmask 255.255.255.252 braodcast 192.168.6.3
ether f4:e1:1e:8c:d7:8a txquequelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
答案1
上次我使用 beaglebone black 時,它的 Debian 鏡像做了一些奇怪的事情,並且(坦率地說)由於同時激活了兩個完全獨立的 DHCP 客戶端而被破壞。您似乎正在使用 /etc/network/interfaces ,另一個是“connman”。請務必小心,確保 connman 已停用為 DHCP 用戶端,否則它會認為它處於控制狀態並重新配置您的網路。
考慮到你的問題的“隨機”性質,聽起來確實是這樣的,在某些情況下,您的網路在 /etc/network/interfaces 靜態配置後正在由 connman 重新配置
我在您的螢幕截圖中看到註解掉的命令嘗試執行此操作,但不清楚您是否確定這實際上已在每個裝置上執行