我在网络上配置了一个透明桥,该桥应使用 tcpdump 捕获其连接设备的所有流量(见图1)。
网桥配置在 Debian 11 服务器上,并具有到路由器的上行链路 (eth1),该路由器还处理 DHCP 等。以太网/LAN 设备通过 eth2 上的网络集线器(图中未显示)连接。Wi-Fi 设备通过使用 hostapd (wlan0) 的 USB 3.0 NIC (ALFA AWUS1900) 连接。所有接口 (eth1、eth2、wlan0) 都配置为网桥 (br0)。
当我尝试使用以下方式捕获来自不同设备的 PING 流量时
tcpdump -i br0
我可以看到来自 WLAN<->Internet、LAN<->Internet 和 LAN<->LAN 的请求和响应。但是,当我尝试从一个 WLAN 设备 ping 到另一个 WLAN 设备(例如从 192.168.0.21 到 192.168.0.22)时,即使我收到了 ping 响应,tcpdump 也无法捕获流量。此外,绝对不会捕获从一个 WLAN 设备到另一个 WLAN 设备的流量。
这是我的 /etc/network/interfaces 的相关片段:
# Bridge interface
iface eth1 inet manual
iface eth2 inet manual
iface wlan0 inet manual
auto br0
iface br0 inet static
bridge_ports eth1 eth2
我的 /etc/hostapd/hostapd.conf:
# INTERFACE CONFIGURATION
interface=wlan0
driver=nl80211
bridge=br0
ctrl_interface=/var/run/hostapd
ctrl_interface_group=0
# WI-FI CONFIGURATION
ssid=****
hw_mode=g
country_code=AT
channel=1
auth_algs=1
macaddr_acl=0
# WPA
wpa=2
wpa_passphrase=****
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP
我遗漏了什么,导致 WLAN 到 WLAN 的流量无法被捕获?任何帮助都将不胜感激!
编辑:
以下是输出ip -a address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master br0 state UP group default qlen 1000
link/ether ac:1f:6b:00:00:00 brd ff:ff:ff:ff:ff:ff
altname enp25s0f0
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master br0 state UP group default qlen 1000
link/ether 00:c0:ca:00:00:00 brd ff:ff:ff:ff:ff:ff
4: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP group default qlen 1000
link/ether 00:60:6e:00:00:00 brd ff:ff:ff:ff:ff:ff
5: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether ca:a0:96:00:00:00 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.3/24 brd 192.168.0.255 scope global br0
valid_lft forever preferred_lft forever
答案1
你需要ap_isolate=1
在 hostapd 的设置中防止无线驱动程序对来自 Wifi 的无线帧执行低级桥接并发送回同一个 Wifi,这会导致网络堆栈和桥接器短路br0
。
但ap_isolate
单独会导致 Wifi 客户端被隔离:如果不进行额外设置,它将无法看到其他 Wifi 客户端。
Wii-to-Wifi 从以下版本开始:
wlan0 -----> AP -----> wlan0
X
br0
到(无处,或无用广播到以太网端口:失去连接):
wlan0 ---> (AP) ---> br0 X
由于桥接器默认不会将流量发送回其来源端口,因此 Wifi 到 Wifi 的连接被禁用(这就是ap_isolate
首先调用该参数的原因)。在这种情况下,必须在桥接器上启用这种流量:发夹形
bridge link set dev wlan0 hairpin on
(可获得完全相同结果的替代命令ip link set dev wlan0 type bridge_slave hairpin on
:)
现在流量变成:
wlan0 ---> (AP) --->
br0
wlan0 <--- (AP) <---
br0
由于,交换流量通过时ap_isolate=1
,由于发夹结构而不受中断,tcpdump
现在可以捕获 Wifi 到 Wifi 上br0
(或直接在wlan0
端口上)。