我正在尝试配置我的 Raspberry Pi,以便我访问连接到 eth0 或 wlan1 的设备。
所需功能如下:
- 用户通过 wlan1 连接到 RPi AP 并获得 IP(192.168.4.x)
- 单独的设备通过 eth0 连接到 RPi,并被赋予一个 IP(192.168.5.x)
- 用户可以通过本地IP地址访问eth0连接设备的配置界面
我已经使用 dnsmasq 在每个接口上设置了 DHCP 服务器,它们很乐意提供 IP;
# dnsmasq.conf
interface=wlan1
dhcp-range=wlan1,192.168.4.2,192.168.4.99,24h
interface=eth0
dhcp-range=eth0,192.168.5.1,192.168.5.99,24h
listen-address=::1,127.0.0.1,192.168.5.1,192.168.4.1
我还更新了我的 iptables 以转发接口之间的流量;
sysctl -w net.ipv4.ip_forward=1
iptables -A FORWARD -i wlan1 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o wlan1 -j ACCEPT
然而,当谈到实际访问不同的 IP 时,我仍然有点迷茫。我相信我需要设置一些路由,但我正在努力弄清楚如何准确实现这一点。
通过 wlan0 连接 ping 192.168.4.x 和 192.168.5.x IP:
iptables 和 netstat 输出:
pi@rak-gateway:~ $ sudo iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
pi@rak-gateway:~ $ netstat -rn
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 wlan0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 wlan0
192.168.4.0 0.0.0.0 255.255.255.0 U 0 0 0 wlan1
192.168.5.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
答案1
然而,当谈到实际访问不同的 IP 时,我仍然有点迷茫。我相信我需要设置一些路由,但我正在努力弄清楚如何准确实现这一点。
关于路由要记住的是路线上的每台计算机必须知道将特定的数据包发送到哪里。
因此,如果 A 以 192.168.4.x 连接到 RaspPi,而 B 以 192.168.5.y 连接到 RaspPi,那么
- 必须知道,到 192.168.5.*/24 的数据包会发往 RaspPi 的 192.168.4.? 地址。
- B,当它应答时,必须知道发往 192.168.4.*/24 的数据包会发往 RaspPi 的 192.168.5.? 地址。
如果 A 和 B 仅连接到 RaspPi,并将 RasPi IP 地址设置为其默认网关,则可以免费获得此功能。如果不是这种情况,例如因为 A 和 B 还连接到其他东西,或者因为您没有配置以dnsmasq
通告默认网关,那么您需要设置路由在 A 和 B 上。
您可以直接在 A 或 B 上静态执行此操作,也可以使用 DHCP 分配路由(第一个 Google 链接,了解操作方法这里,请谷歌查看更多)。
无论如何,调试应该涉及查看路线在 A 和 B 上(在 Linux 上,您可以使用ip route get 1.2.3.4
,其中 1.2.3.4 是目标地址)。
答案2
感谢您的更新。
我建议的第一件事就是修复您的eth0
DHCP 范围以从 开始192.168.5.2
- 目前它似乎是从 开始192.168.5.1
。
接下来要发布的是通过 连接的设备的路由表eth0
,以及通过 连接的设备的路由表wlan1
。
在获取路由表之前,请确保两台设备都已成功执行 DHCP,并且具有您期望的子网地址。