我们希望限制用户的每日互联网使用量,但不限制本地网络带宽。我们的用户使用不同的平台(Windows、Android、IOS),因此无法通过 Active Directory 等强制执行任何策略,如果可能的话,它会限制整个带宽。
剩下的唯一方法是在网络边缘对 IP 进行限制。这可以使用 Mikrotik 或其他防火墙来实现。但问题是,当达到限制时,用户可以更改其 IP,并且他们可以继续使用互联网带宽。
因此,我们的想法是确保用户只有当他们的 MAC 地址和通过我们的 DHCP 服务器分配的 IP 匹配时才能通过。这在思科交换机中应该是可能的,并且可以在核心交换机上完成。我想我已经读过一些关于思科交换机和 DHCP 服务器之间的连接的文章。
问题是这如何实现,或者是否存在其他更简单、更有效的解决方案?
我们使用 AP、Cisco 2960 交换机和 Cisco 4500 作为核心交换机。我们的 DHCP 是 FreeBSD,但如果需要,我们愿意更改它。我们的 AP 的身份验证方法是 802.1x。
编辑:
我们尝试使用 RADIUS 服务器的解决方案,这样我们就可以知道每个用户使用了多少流量(通过端口 1812/1813),但问题是限制用户的唯一方法是在达到限制时不让他连接。这意味着,在用户不重新连接之前,他可以不受任何限制地下载。
我们也考虑过使用代理服务器作为解决方案,但是遇到了两个问题:
- 我们在使用 squid 时遇到了性能问题,而且安装 squid 作为透明代理的工作量太大。
- 其他代理也存在性能问题,而那些表现良好的代理也没有用作透明代理的功能。
答案1
最好在第 7 层而不是第 2 层或第 3 层执行此操作。
设备的 MAC 地址和 IP 地址都可以更改。(用户更改 MAC 地址比较困难,但仍然有可能。)如果有人为了绕过限制而更改 IP 地址,那么他们更改 MAC 地址也只是时间问题。
我能想到的有几种解决方案。
强制门户要求用户使用每个用户凭证(例如,RADIUS 返回您的 Active Directory)进行身份验证,这将为您提供每个用户的责任制。市场上有各种各样的产品,包括商业产品和免费/开源产品,可以做到这一点。
强制用户使用每个用户凭证连接到 VPN,以获得无线子网之外的访问权限。
这两种方法都不需要繁琐的 IP 到 MAC 交叉引用,并且在添加新用户/设备时可以轻松扩展。
答案2
您可以使用 ebtables 根据 MAC 地址过滤 IP 错误的数据包,例如:
ebtables -N USER
ebtables -A FORWARD -p ip -i eth0 -j USER
ebtables -P USER DROP
ebtables -A USER -p ip --ip-src 192.168.0.52 -s 00:52:2c:be:ac:2a -j ACCEPT
ebtables -A USER -p ip --ip-src 192.168.0.23 -s 01:51:2d:be:pc:1b -j ACCEPT
在这里我们00:52:2c:be:ac:2a
只允许具有 MAC 的用户使用 IP 192.168.0.52
,其他用户也一样。但据我所知,iOS(我猜还有其他)手机重置 MAC 地址出于安全原因,每个连接都会被记录,这样就无法跟踪设备从一个 Wi-Fi 热点迁移到另一个 Wi-Fi 热点。因此,依赖 MAC 地址并不是 100% 正确的。
解决这个问题的另一种方法可能是引入 L2TP 并仅允许通过它进行互联网流量。您将为每个用户提供一个用户/密码对并分配静态 IP。然后您将能够通过 IP 监控流量。
答案3
快速解决方案是将该接口上的 ARP 配置为仅回复模式。然后允许 DHCP 服务器插入 ARP 记录。
所以客户端的静态IP配置将毫无用处,即使配置了和DHCP服务器之前分配的一样的数据。
在 Mikrotik ROS 上很容易实现,但我不知道 CISCO IOS 上的配置。