我的 RaspberryPi 中连接了三个 WLAN 接口:
wlan0
wlan1
wlan2
它们中的每一个都连接到不同的SSID:
gopro-0
gopro-1
gopro-2
GoPro 相机设置为 WiFi 路由器,具有始终相同的 IP 地址: 10.5.5.9
。
使用此配置,如果我调用:
curl http://10.5.5.9
那么wlan0
将使用第一个接口(简化假设)。如果我想调用相机gopro-2
,我必须调用:
curl http://10.5.5.9 --interface wlan2
有用。然而,存在一个问题,即并非所有命令都允许我指定接口(即ffmpeg
- 或者我不知道它)。
是否有可能以某种方式欺骗Linux并代表某个IP地址要转发到10.5.5.9
特定接口?
例如:
10.5.4.100 -> 10.5.5.9 @ wlan0
10.5.4.101 -> 10.5.5.9 @ wlan1
10.5.4.102 -> 10.5.5.9 @ wlan2
我希望任何解决方案甚至其他方法能够让我使用常规 HTTP GET/POST 方法在不同接口上调用相同的 IP。
答案1
我对于不同类型的设备也遇到了同样的问题,并找到了一种方法来解决这个问题。您需要 iptables mangle 和 ip Route 的组合
为每个接口指定一个与设备位于同一子网中的唯一 IP(以下为 192.168.44.8)。在此示例中,第一台设备的虚拟 IP 为 192.168.44.9
我的物理设备的 4 个不同接口均位于 192.168.44.1,通过这种模式和虚拟 IP,我可以可靠地与所有这些设备进行通信。
iptables -t mangle -A PREROUTING -d 192.168.44.9 -j MARK --set-mark 0x01
iptables -t nat -A PREROUTING -m mark --mark 0x01 -d 192.168.44.9 -j DNAT --to-destination 192.168.44.1
iptables -t nat -A POSTROUTING -m mark --mark 0x01 --destination 192.168.44.1 -j SNAT --to-source 192.168.44.8
完成此操作后,现在添加以下路线。
ip route add 192.168.44.0/24 dev eth4 table 1
ip rule add from all fwmark 1 table 1
ip route flush cache
您可以多次重复此模式,只需根据您拥有的接口数量不断增加标记和地址即可。
希望这对其他处理不同网络接口上重复地址的人有用。
答案2
我认为方法是使用 iptables,并为其设置路由。这是您提出的问题的类似答案:
https://serverfault.com/questions/345111/iptables-target-to-route-packet-to-specific-interface
这在 OpenBSD/pf 中稍微简单一些。
答案3
此线程上描述了完全相同的问题: https://forum.developer.parrot.com/t/multiple-parrot-anafi-control-via-olympe-on-linux-configure-ip/9590/2
它提供了一个完整的解决方案,确实使用了iptables
规则和路由