小型网络的半径替代方案

图片

众所周知,在运营商网络中使用RADIUS协议对订户进行授权会带来很多机会-这些是考虑到流量的费率,访问网络时组织授权的能力,Wi-Fi网络中的热点以及如果没有RADIUS则很难实现的许多其他事情。

通常,运营商之所以仅使用RADIUS,是因为他们只是不知道其他授权方法,或者没有使用通用协议以外的任何风险。 在这种情况下,由于服务器保留的复杂方法或它们不存在,RADIUS的所有优点都无法发挥。 计费意外断开会导致在网络设备正确运行期间Internet与订户断开连接。

因此,我想谈谈电信运营商如何避免在具有RouterOS操作系统(MikroTik)的路由器上通过RADIUS协议进行授权。 我们将使用LanBilling 2.0作为计费系统,其中实现了对启用,禁用,编辑,创建和删除订户事件的支持。 具有类似事件机制的任何系统都适合通过改进来实现此角色。

通过API与RouterOS进行交互。 首先,您需要在路由器上创建一个专用用户,该用户将执行远程控制。

访问详细信息如下:
登录:api
密码:ap​​i
仅从计费服务器访问:192.0.2.2

图片
下一步是配置防火墙,它将执行阻止用户和转发的重要工作。 为此,必须允许所有订阅者使用选定的资源(外部DNS服务器,公司网站)。

#完全访问所选资源
/ ip防火墙过滤器添加链=转发\
dst-address-list =允许的目的地\
出接口=以太网
此外,我们使用地址列表允许的目的地。 如有必要,将向其添加地址,并且防火墙规则将保持不变。
接下来,您需要允许订阅者访问资源以支付服务费用。 下述机制将为订户提供对付款所需的所有资源的访问权限。
#阻止不需要支付的热门资源
/ ip防火墙layer7-protocol添加名称=社交网络\
regexp = vk.com | mail.ru | ok.ru
#我们在向https-resources付款的过程中跳过订户
/ ip防火墙过滤器添加链=转发\
dst端口= 443 \
layer7-protocol =!社交网络\
外接口=以太网
协议= TCP
src-address-list =付款人列表
接下来,我们禁止那些尚未为服务付费的人访问Internet。 在阻止时,计费会将订户的IP添加到被阻止的地址列表中。
#阻止默认值
/ ip防火墙过滤器添加操作=拒绝链=转发\
外接口=以太网
reject-with = icmp-admin禁止\
src-address-list =已阻止

接下来,配置NAT。 必须将订户重定向到带有有关订户访问Internet的阻止和广播地址的通知的页面。

#我们广播所有灰色地址
/ ip防火墙nat添加操作=相同的链= srcnat \
出接口=以太WAN相同-不是通过DST =是\
src-address-list = nat-all-bonbons \
收件人地址= 203.0.113.0 / 26
#不要重定向到乞讨那些正在付款的人
/ ip防火墙nat添加操作=接受链= dstnat \
src-address-list =付款人列表
#其他所有人转发给乞g(192.0.2.3)
#非付款人,不要忘记所选资源
/ ip防火墙nat添加操作= dst-nat链= dstnat \
dst-address-list =!允许的目的地\
协议= TCP src-address-list =已阻止\
到地址= 192.0.2.3到端口= 80

前向链中上面列出的规则足以提供Internet访问。 为了限制对路由器的访问并提供额外的安全性,您可以在输入链中添加一些规则

经过这些操作后,路由器无需RADIUS即可执行访问用户到网络的基本功能。 收费速度受到限制/在此中进行简单的计费处理。 非付款人将被自动阻止,他们的请求将重定向到提醒站点。 同时,债务人仍然可以使用外部选定的资源(支付服务)。

我们准备帐单


计费的准备工作涉及编写脚本以处理事件,以启用,禁用,创建,删除和编辑订户帐户。 我们将以Lanbilling为例。

图片

此外,您需要确保负责帐户的是LBarcd代理。

图片

首先,我们向计费显示将使用的脚本和事件。 这是通过更改/etc/billing.conf.LBarcd文件中的参数来完成的。

每个脚本都使用一组特定的参数来调用,对于每个脚本,该组参数是相同的:

登录名(帐户中的用户名)
密码(帐户中的用户密码)
段(帐户IP地址)
netmask(掩码,点号十进制表示的IP地址。例如255.255.255.255)
费率限制(此帐户的费率以千位数为单位。例如10240)

代理事件配置文件可以从github上的存储库下载。
每个事件处理脚本都包含一个函数库,该函数库随后使用PHP类通过API与RouterOS一起使用。 github存储库中提供了每个脚本,函数库和API类的源代码。
对“ config”系统进行更改后,即可开始工作。 帐户余额为正的订户可以轻松使用该服务,非付款人只能使用本地网络和允许的站点。
经常会发生这样的情况,运营商需要能够为订户提供自动的临时临时访问权限,或者使用所有已知支付系统的IP填充允许的资源列表。

为此,需要对订户的个人帐户中的源代码进行少量编辑。 已经配置了其他功能-MikroTik上的地址列表付款人列表,以及库functions.php中的附加功能allow_payment。

在我们的例子中,使用Yandex.Checkout接受付款,这意味着我们将编辑文件
/usr/local/billing/phpclient/client2/client/components/payment/yandex/Payment_Yandex_Pay.php的处理方法,用于单击用户个人帐户中的“付款”按钮。

图片

您必须插入一行

file_get_contents(“ billing.example.com/tmp_access.php?ip=”。$ _SERVER [“ REMOTE_ADDR”]));
行前
$ this-> post($ params,$ this-> conf(“ operatorURL”));
其中billing.example.comLanbilling管理Web界面地址。

因此,我们在帐单上向脚本发送GET请求,并作为参数传递客户的IP地址,该客户位于他的个人帐户中,然后单击“付款”按钮。 可以在github上查看和下载tmp_access.php脚本的内容。 远程脚本将用户的IP地址添加到付款人列表中(超时20分钟),此后,没有任何问题的用户将转到任何页面进行付款。

如果订户通过移动互联网进入,则移动网络的“左侧”地址将进入列表,列表将在20分钟后自动删除。 如果订户来自运营商的局域网地址,则系统将按规定运行。 实际上,可以在付款警告页面上插入相同的脚本,在该页面上放置用于输入合同编号,付款金额和“付款”按钮的字段。

上面的说法可以引起争议,但是值得考虑的事实是,该解决方案不适用于大型网络。 实际上,就像带有RouterOS的MikroTik一样。 如果您的网络上的订户不超过3000,则此方法将是最合适的。

Artyom Deulin编写

Source: https://habr.com/ru/post/zh-CN404563/


All Articles