我正在设计一款基于 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(无论如何都需要命名空间来将其分开)...但它与原始请求相差甚远,所以我只将其保留为一个提示;)...