Skip to main content

第 10 课:AP隔离

校园网内的设备之间,互相 ping不通 也SSH不了的, 这是因为校园网内存在 AP 隔离,也就是在内网下的的设备禁止互相访问

原理:默认路由表让设备尝试在同一网段内直接通信

AP隔离 阻止了这种同一AP下设备之间的直接通信,但所有设备都能和网关通信

image-20250516191447716

破解方法

删除直连路由,修改路由强制所有通信都经过网关。这样以来,即使是同网段通信也会发送到网关

网关没有AP隔离限制,可以转发到目标设备

image-20250516191517989

服务器一:

输出IPv4 路由表

route print

输出

=================================================

活动路由:

网络目标 网络掩码 网关 接口 跃点数

0.0.0.0 0.0.0.0 10.107.128.1 10.107.131.120 35

10.107.128.0 255.255.224.0 在链路上 10.107.131.120 291

10.107.131.120 255.255.255.255 在链路上 10.107.131.120 291

10.107.159.255 255.255.255.255 在链路上 10.107.131.120 291

删除直连路由

route delete 10.107.128.0 mask 255.255.224.0 

添加直接通过网关访问的路由

route add 10.107.128.0 mask 255.255.224.0 10.107.128.1

更新后的新命令:

route delete 10.107.0.0 mask 255.255.128.0 

route add 10.107.0.0 mask 255.255.128.0 10.107.0.1


服务器二:

输出IPv4 路由表

route print

输出

====================================================

活动路由:

网络目标 网络掩码 网关 接口 跃点数

0.0.0.0 0.0.0.0 192.168.42.129 192.168.42.119 55

0.0.0.0 0.0.0.0 10.107.128.1 10.107.143.91 45

10.107.128.0 255.255.224.0 在链路上 10.107.143.91 301

10.107.143.91 255.255.255.255 在链路上 10.107.143.91 301

10.107.159.255 255.255.255.255 在链路上 10.107.143.91 301

删除直连路由

route delete 10.107.128.0 mask 255.255.224.0 

添加直接通过网关访问的路由

route add 10.107.128.0 mask 255.255.224.0 10.107.128.1

现在就可以远程访问了

ssh heihe@10.107.143.91 -p 6510
ssh heihe@10.107.54.247 -p 6510

启动脚本

如果重新连接这个网络,或者设备重启,这个路由表还是会变回默认的样子

因为直连路由优先级比直接访问网关的路由优先级更高

因此我们创建一个 bat 脚本文件来解决

创建文件 C:\Scripts\SetRoute.bat 内容为

@echo off
:: 提升权限为管理员
:: 如果不是管理员,则重新运行为管理员
net session >nul 2>&1 || (powershell -Command "Start-Process -FilePath '%~f0' -Verb runAs" && exit)


:: 删除原有路由
route delete 10.107.128.0 mask 255.255.224.0

:: 添加新的路由
route add 10.107.128.0 mask 255.255.224.0 10.107.128.1

操作步骤如下

  1. 按 Win + R,输入 taskschd.msc,回车,打开任务计划程序
  2. 在右侧点击 创建任务
  3. 常规 选项卡:设置任务名称,例如 SetRouteOnStartup
  4. 勾选 以最高权限运行
  5. 配置为适合的用户账户(如系统管理员)。
  6. 切换到 触发器 选项卡,点击 新建
  7. 开始任务 中选择 登录时系统启动时
  8. 切换到 操作 选项卡,点击 新建
  9. 操作 中选择 启动程序
  10. 程序或脚本 中输入:C:\Scripts\SetRoute.bat
  11. 条件 选项卡,取消勾选 只有计算机使用交流电源时才启动。
  12. 设置 选项卡,确保勾选 如果任务失败,重新启动任务。
  13. 点击 确定 保存任务。如果提示输入管理员密码,请输入以确认。

Ubuntu 配套命令

一、查看当前路由表

在终端中运行:

ip route show

示例输出可能类似:

default via 10.107.128.1 dev wlan0 proto dhcp metric 600
10.107.128.0/19 dev wlan0 proto kernel scope link src 10.107.131.120 metric 600

其中:

  • default via 10.107.128.1 是默认网关
  • 10.107.128.0/19 dev wlan0 是你要删除的直连路由(它让本地同网段的设备尝试直接通信)

二、删除直连路由

使用以下命令删除同网段的直连路由:

sudo ip route del 10.107.128.0/19

注意:这条命令可能会立即断开你和网络的连接,因为默认 DHCP 分配的直连路由也会被删掉。为避免这类问题,建议先创建一个新的等效路由。



三、添加强制通过网关的路由

sudo ip route add 10.107.128.0/19 via 10.107.128.1

这条命令的含义是:

  • 将发往 10.107.128.0/19 网段的所有数据包 强制通过网关 10.107.128.1 发送

这样你就可以实现通过网关绕过 AP 隔离。



四、验证结果

再次查看路由表:

ip route show

你应当看到:

default via 10.107.128.1 dev wlan0 proto dhcp metric 600
10.107.128.0/19 via 10.107.128.1 dev wlan0

你现在就可以尝试 ping 或 ssh 另一台处于同网段的设备了。



五、开机自动设置

路由设置在重启后会失效。你可以通过 创建 systemd 服务在 NetworkManager 的连接脚本中添加命令 来自动执行这些操作。

方法一:写一个启动脚本

创建脚本文件:

sudo nano /usr/local/bin/set_route.sh

内容如下:

#!/bin/bash

# 删除原有直连路由(如果存在)
ip route del 10.107.128.0/19

# 添加新路由,强制走网关
ip route add 10.107.128.0/19 via 10.107.128.1

保存并赋予可执行权限:

sudo chmod +x /usr/local/bin/set_route.sh

方法二:使用 systemd 自动运行

创建 systemd 单元文件:

sudo nano /etc/systemd/system/setroute.service

内容如下:

[Unit]
Description=Set static route to bypass AP isolation
After=network-online.target
Wants=network-online.target

[Service]
Type=oneshot
ExecStart=/usr/local/bin/set_route.sh
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

启用并启动服务:

sudo systemctl daemon-reexec
sudo systemctl enable --now setroute.service