树莓派配置桥接网络,热点接入ETH0网络,支持SADP扫描

功能目标

在手机端安装海康的客户端软件“易调试”,通过树莓派上释放的热点wifi接入,能直接访问树莓派上的eth0网络,并支持SADP协议扫描eth0网络里的海康设备。

预研

SADP

海康威视(Hikvision)SADP(Search Active Device Protocol)是一款用于搜索和管理海康威视网络摄像头和其他设备的软件工具。它可以帮助用户快速发现网络中的海康设备,并进行配置和管理。

主要功能:

  1. 设备搜索:自动扫描网络,找到所有连接的海康威视设备。
  2. 设备管理:查看设备的状态、IP地址、序列号等信息。
  3. 批量配置:可以对多个设备进行批量设置,包括修改IP地址、重置密码等。
  4. 固件升级:支持对设备进行固件更新。
  5. 用户友好的界面:提供直观的图形用户界面,方便用户操作。

技术方面上,SADP工作在二层网络上,基于UDP实现。所以即使是没有配置或者没有获取IP,甚至配置错误IP的手机,也是可以扫描发现子网内的设备的。

常见做法

大致参考这里 https://blog.csdn.net/maizaozao/article/details/138666005 就可以配置完成支持热点接入。
通过修改iptables规则使eth0作为NAT协议的出口,就可以完成手机加入热点,并可以访问eth0内的IP设备。

1
sudo iptables -t nat -A  POSTROUTING -o eth0 -j MASQUERADE

但是当前的方案无法解决SADP扫描出设备的问题,在树莓派的eth0用tcpdump抓包后发现,使用wireshark分析后发现,手机上的易调试软件向239.255.255.250:37020发送基于ONVIF协议的udp组播,海康的设备默认会监听239.255.255.250:37020,收到指令,会向发送组播的机器,返回设备信息,也会向239.255.255.250:37020发送设备信息的组播。
所以在当前的配置下,eth0里的网络是能收到来自手机的组播消息,但是设备回复的组播消息手机却收不到,原因是NAT转发没办法把组播消息回复给手机。
所以这个方案尝试了几次发现基本走不通,那就只能尝试用桥接解决这个问题。

详细步骤

OS相关

操作是在Raspberry Pi OS lite 12 (bookworm)

安装软件

准备工作

更改APT源

1
2
3
4
5
6
7
8
9
# sudo vi /etc/apt/sources.list

deb https://mirrors.tuna.tsinghua.edu.cn/debian bookworm main contrib non-free-firmware
deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bookworm-security main contrib non-free-firmware
deb https://mirrors.tuna.tsinghua.edu.cn/debian bookworm-updates main contrib non-free-firmware

#sudo vi /etc/apt/sources.list.d/raspi.list

deb https://mirrors.tuna.tsinghua.edu.cn/raspberrypi bookworm main

安装hostapd,dnsmasq,bridge-utils

安装一个hostapd,并设置开机启动

1
2
3
sudo apt install hostapd
sudo apt-get install bridge-utils
sudo apt install dnsmasq

修改配置

File /etc/network/interfaces

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
source /etc/network/interfaces.d/*


auto eth0
iface eth0 inet manual


auto eth1
iface eth1 inet static
address 168.168.168.168
netmask 255.255.255.0

auto wlan0
iface wlan0 inet manual

auto br0
iface br0 inet static
address 172.28.28.28
netmask 255.255.255.0
gateway 172.28.28.1
#address 192.168.10.210
#netmask 255.255.255.0
#gateway 192.168.10.1
bridge_ports eth0 wlan0
bridge_stp off # Disable Spanning Tree Protocol
bridge_fd 0 # No forwarding delay

配置br0后,eth0和wlan0均不再需要配置IP,br0上的IP在eth0和wlan0连个接口都可以被直接访问。

File /etc/hostapd/hostapd.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
country_code=CN
interface=wlan0
bridge=br0
driver=nl80211
ssid=free-wifi
wpa_passphrase=free_pwd_333
wpa_key_mgmt=WPA-PSK
channel=8
auth_algs=1
wpa=2
ieee80211n=1
hw_mode=g
rsn_pairwise=CCMP TKIP
wpa_pairwise=TKIP CCMP
max_num_sta=20

这里的是最关键的配置,在调试过程中被ChatGPT误导了很多次,interface不应该是br0, 设置成br0会报错,应该指向释放热点的接口wlan0,同时在hostapd的官方文档中指出是可以指定桥接的,所以设置bridge=br0非常关键。hw_mode最好是设置成g, 如果设置成a,需要设备硬件支持。
正常到这一步,就可以在接入WiFi后,给手机配置一个静态IP就可以访问eth0的网络了。如果eth0里有DHCP,手机也会自动获取到,如果eth0网络里没有DHCP(大部分的海康设备网络里都是没有的),我们可以尝试给增加一个DHCP服务。

File /etc/dnsmasq.conf

1
2
3
4
5
#interface=wlan0 # Listening interface
interface=br0
#dhcp-range=192.168.10.100,192.168.10.200,255.255.255.0,24h
dhcp-range=172.28.28.100,172.28.28.200,255.255.255.0,24h
address=/abcd.com/172.28.28.28 # 这里是一个固定的域名配置,可以直接接入手机后访问

这里的interface一定要指向br0,可以理解为eth0和wlan0都已经被br0给替代了。这样当前的dnsmasq里就可以在两边的网络里同时提供DHCP服务。

启动

1
2
3
4
sudo systemctl enable dnsmasq
sudo systemctl enable hostapd
sudo systemctl start dnsmasq
sudo systemctl start hostapd

最好是系统直接reboot一下。

总结

到这里,应该正常的表现是,从手机连入wifi: free-wifi, 输入密码: free_pwd_333,手机能自动获取到172.28.28.x网段的IP,虽然不能访问网络,但是使用海康的SADP扫描软件就可以扫描到局域网内部的设备了。

后续工作

如果海康的实施人员使用手机接入后,如果需要再配置,那么就需要通过abcd.com域名访问预设的配置页面,输入真实的IP范围后,调用代码把上述的interfaces和dnsmasq.conf配置文件改动一下,直接重启一遍服务应该就可以了。

备注

如果功能出现问题,除了以上服务的日志外,可以考虑IP转发引起的问题。
编辑/etc/sysctl.conf,根据原有配置反向取消或者增加注释:net.ipv4.ip_forward=1,并sudo sysctl -p保存应用。

Notice: 正常情况下,这里会有一个基于utteranc.es的留言系统,如果看不到,可能要想想办法才能看到。

Powered by Hexo and Hexo-theme-hiker

Copyright © 2013 - 2024 Tiaobug All Rights Reserved.

本站总访问量    次