我在我的 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 重新配置
我在您的屏幕截图中看到注释掉的命令,这些命令尝试执行此操作,但不清楚您是否确定这实际上已在每个设备上执行