IP 冲突:AP 与另一个网络接口具有相同的 IP

IP 冲突:AP 与另一个网络接口具有相同的 IP

我正在设计一款基于 Linux 的产品,该产品将具有两个无线网络接口(wlan0 和 wlan1)。该产品配置为 wlan0 为 STA,wlan1 为 AP。每个产品上的 AP 都有一个静态 IP 192.168.4.1,并且 DHCP 服务器配置为仅响应 wlan1 上的 IP 请求。计划是让客户购买多个设备并连接到(主)第一个设备的 AP。然后,主设备将查询其他设备 AP(从设备),连接并配置它们的 STA 以连接到其(主)AP。问题是,当主设备的 STA 连接到从设备的 AP(反之亦然)时,它倾向于将 IP 192.168.4.1 的数据包发送到它自己的 AP,而不是 STA 连接到的 AP。

我该如何解决这个问题?我为缺乏政治正确性而道歉。

答案1

一般来说这不是一个好方法,因为一旦 IP 在系统上是本地的,路由就会转到它。如果有其他选项可以做到这一点,请使用其他选项使其干净清晰 ;-)。

无论如何,让我们假设 192.168.4.1 只是默认网关,并且您希望其他流量通过“主”连接通过该网络传输......


NAT 正常(从“最后一个”客户端到“主”AP 的单向连接)

理论上,您可以将系统拆分为网络堆栈,并使用互连 IP 和 NAT 来实现此要求。通过这种方法,您甚至可以链接“子盒”。唯一的限制是,从“上层”AP 的角度来看,“子盒”后面的所有客户端都将共享“子盒”的 IP。

AP                                 "sub box"                          client
|                              _________________                             |
|              192.168.4.x(M) /                 \                            |
| --------------------------- |   "default NS"  |                            |
| 192.168.4.1                 |    10.10.0.1    |                            |
|                             | ====== | ====== |                            |
|                             |   10.10.0.2 (M) | 192.168.4.1                |
|                             |       NS2       | -------------------------- |
|                             \_________________/                192.168.4.x |
                              (M) ... MASQUERADE

添加具有名称的新命名空间ns2

ip netns add ns2

创建将命名空间互连的“虚拟”接口

ip link add pub-link type veth peer name loc-link

.... 将创建两个接口,名称为发布链接位置链接

移动位置链接到命名空间ns2

ip link set loc-link netns ns2

激活并设置 IP发布链接

ip link set pub-link up
ip address add 10.10.0.1/24 dev pub-link
sysctl net.ipv4.ip_forward=1

要激活(所有必要的内容)位置链接

ip netns exec ns2 ip link set loc-link up
ip netns exec ns2 ip address add 10.10.0.2/24 dev loc-link
ip netns exec ns2 ip route add default via 10.10.0.1
ip netns exec ns2 iptables -t nat -A POSTROUTING -o loc-link -j MASQUERADE
ip netns exec ns2 sysctl net.ipv4.ip_forward=1

移动WLAN1到命名空间ns2并“激活它”

ip link set wlan1 netns n2
ip netns exec ns2 ip link set wlan1 up 
ip netns exec ns2 ip address add 192.168.4.1/24 dev wlan1

所有相关的东西WLAN1 不得不在接口所在的同一命名空间中运行(因此在我们的例子中ns2) - 例如 dhcp 服务器WLAN1

ip netns exec ns2 <commnad>

最后但并非最不重要的是,我们必须在wlan0

iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE

不幸的是,这无法通过系统配置文件实现,因此它在系统重启后不会持久。您必须将其放入脚本中并在重启/网络重启时应用它。


双向通信(用于“新”连接)

在这种情况下,您需要重新映射它,并且您无法使用 192.168.4.0/24 作为一般连接的地址。如果可以使用其他网络范围访问(一旦它在每个单个节点的配置中仍然使用 192.168.4.0/24 网络),我会考虑例如使用网络地图桌上的目标纳特iptables代替化装舞会ns2(无论如何都需要命名空间来将其分开)...但它与原始请求相差甚远,所以我只将其保留为一个提示;)...

相关内容