编辑:

编辑:

我在设置 Raspberry Pi 3 AP 时遇到了一些奇怪(且不一致)的问题,使用 USB WiFi 无线电和定向天线与住宅互联网 wifi 路由器进行上行连接。rPi AP 与上行 AP 位于不同的子网中。

这是使用 iptables NAT 转发实现的,从集成 wifi 接口获取所有流量并将其转发到 USB 设备:

iptables -t nat -A POSTROUTING -o [USB Wifi Radio] -j MASQUERADE
iptables -A FORWARD -i [USB Wifi Radio] -o [Integrated WiFi in AP mode] -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i [Integrated WiFi in AP mode] -o [USB Wifi Radio] -j ACCEPT

奇怪的是,我的一台笔记本电脑(MBP)能够使用此设置连接到互联网,但另一台(也是 MBP)没有收到对其 DNS 查询或任何其他上行发送的流量的任何响应。

在使用 tcpdump 和 wireshark 进行深入研究后,我发现来自该机器的所有流量在其以太网 II 帧目标字段中都有广播 MAC (ff:ff:ff:ff:ff:ff)。我认为这会导致它在到达 iptables 路由方案时被丢弃,因为这仅匹配目的地为 [AP 模式下的集成 WiFi] MAC 的流量。

以下是 DNS 查询示例:

Frame 2: 68 bytes on wire (544 bits), 68 bytes captured (544 bits) on  interface en0, id 0
Ethernet II, Src: Apple_XX:XX:XX (28:cf:e9:XX:XX:XX), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
Internet Protocol Version 4, Src: 10.10.42.18, Dst: 8.8.8.8
User Datagram Protocol, Src Port: 58888, Dst Port: 53

不一致之处:

  • 这只发生在我的两个客户端中的一个上。另一台笔记本电脑将其帧发送出去,并在目标字段中使用 [AP 模式下的集成 WiFi] 的 MAC 地址,并且其流量被路由到上游网络并顺利发送到互联网。
  • “问题机器”在直接连接到上游 AP 和我测试过的其他 AP 时也能正常工作。帧在目标字段中具有适当的 MAC。这让我相信这确实是 RasPi 配置的问题。
  • 当比较连接到 RasPi 的两个客户端时,我看不出 ARP 交换之间有任何差异。
  • 当比较连接到 RasPi 的问题客户端和连接到上游 AP 的同一客户端时,ARP 交换之间也没有差异。
  • 从两种比较方式来看,DHCP 握手在功能上似乎也完全相同。

我已经成功使用相同的上游连接配置创建了类似的设置,但将连接转发到 rPi 的以太网端口(然后连接到 Netgear WiFi 路由器上的 WAN 端口),而不是使用 rPi 本身作为热点。

我目前的理解能力已经达到了极限,无法理解导致这种情况的原因,因此,如果有用发布更多来自 rPi 的配置(dhcpcd.conf、dnsmasq.conf、hostapd.conf 等)的信息或更多从任一设备捕获的流量,请告诉我。

编辑:

在 Mac 上遇到问题

ipconfig getpacket en0:

macbook:~ user$ ipconfig getpacket en0
op = BOOTREPLY
htype = 1
flags = 0
hlen = 6
hops = 0
xid = 0xcea51870
secs = 5
ciaddr = 0.0.0.0
yiaddr = 10.10.42.18
siaddr = 10.10.42.0
giaddr = 0.0.0.0
chaddr = 28:cf:e9:1c:e8:13
sname =
file =
options:
Options count is 10
dhcp_message_type (uint8): ACK 0x5
server_identifier (ip): 10.10.42.0
lease_time (uint32): 0xa8c0
renewal_t1_time_value (uint32): 0x5460
rebinding_t2_time_value (uint32): 0x93a8
subnet_mask (ip): 255.255.255.0
broadcast_address (ip): 10.10.42.255
router (ip_mult): {10.10.42.0}
domain_name_server (ip_mult): {1.1.1.1, 8.8.8.8}
end (none):

ifconfig en0:

macbook:~ user$ ifconfig en0
en0: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
ether 28:cf:e9:1c:e8:13
inet 10.10.42.18 netmask 0xffffff00 broadcast 10.10.42.255
nd6 options=201<PERFORMNUD,DAD>
media: autoselect
status: active

arp-a:

macbook:~ user$ arp -an
? (10.10.42.0) at b8:27:eb:de:3d:b3 on en0 ifscope [ethernet]
? (10.10.42.255) at ff:ff:ff:ff:ff:ff on en0 ifscope [ethernet]
? (224.0.0.251) at 1:0:5e:0:0:fb on en0 ifscope permanent [ethernet]

netstat -rnaf inet:

macbook:~ user$ netstat -rnaf inet
Routing tables

Internet:
Destination        Gateway            Flags        Refs      Use     Netif Expire
10.10.42/32        link#4             UCS             1        0     en0
10.10.42/24        link#4             UCS             0        0     en0
10.10.42.0         b8:27:eb:de:3d:b3  UHLWbIr         0        6     en0   1185
10.10.42.18/32     link#4             UCS             1        0     en0
127                127.0.0.1          UCS             0      147     lo0
127.0.0.1          127.0.0.1          UH              1  1294604     lo0
169.254            link#4             UCS             0        0     en0
224.0.0/4          link#4             UmCS            1        0     en0
224.0.0.251        1:0:5e:0:0:fb      UHmLWI          0        0     en0
255.255.255.255/32 link#4             UCS             0        0     en0

在 Raspberry Pi 上

猫/etc/dnsmasq.conf:

pi@raspberrypi:~ $ cat /etc/dnsmasq.conf
interface=wlan0
dhcp-range=10.10.42.1,10.10.42.255,255.255.255.0,12h
dhcp-option=6,1.1.1.1,8.8.8.8
domain-needed
server=1.1.1.1
bind-interfaces
bogus-priv

ip a:

pi@raspberrypi:~ $ ip a
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
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: enxb827eb8b6896: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
    link/ether b8:27:eb:8b:68:87 brd ff:ff:ff:ff:ff:ff
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether b8:27:eb:de:3d:b3 brd ff:ff:ff:ff:ff:ff
    inet 10.10.42.0/24 brd 10.10.42.255 scope global noprefixroute wlan0
       valid_lft forever preferred_lft forever
    inet6 fe80::6336:7760:8d5a:5552/64 scope link
       valid_lft forever preferred_lft forever
4: wlx00c0ca84826b: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:c0:ca:84:82:6c brd ff:ff:ff:ff:ff:ff
    inet 192.168.50.42/24 brd 192.168.50.255 scope global dynamic noprefixroute wlx00c0ca84826b
       valid_lft 55299sec preferred_lft 41496sec
    inet6 fe80::2c0:caff:fe84:726b/64 scope link
       valid_lft forever preferred_lft forever

答案1

最有可能的原因是,您使用子网的网络 ID 作为 AP 的地址,而 AP 将用作客户端的默认网关。我想有些可以处理,但有些不能。(无论如何,您都不应该这样做。)

尝试分配10.10.42.1/24wlan0 反而。也可以使用10.10.42.2,10.10.42.254fordhcp-range代替。(您也不应该使用10.10.42.255/24for 主机,因为那是广播地址。)

參考文獻:https://en.m.wikipedia.org/wiki/IPv4#Addresses_ending_in_0_or_255

相关内容