Web认证

仅允许经过Web认证的主机访问互联网的设定例。

首先对参加网络的主机赋予副网络的地址。副网络地址禁止访问RTX1200的GUI以外的地址。
主机可以用浏览器在RTX1200的认证画面上完成登录作为认证,认证成功后,主机将会暂时断开连接。之后,端口重新连接时、DHCP会分配一个主网络地址。使用主网络地址即可访问互联网。

并且、由于利用了DHCP的认证功能、因此也可以禁止手动设置主网络的地址的主机访问互联网。同时,认证画面中利用了自定义GUI功能

事先准备

在RTX1200中设置本设定例的config

请从设定例的连接中下载设定文档、添加设定到RTX1200中。

pp auth myname(连接ISP的ID) (连接到ISP的密码)
dns server(由ISP指定的DNS服务器的IP地址)

[说明]
如上所述,在设定例中用黄颜色记述的设定值,请改为适当的数值。

在RTX1200中,可使用TFTP从PC向路由器中拷贝设定文件。关于此方法,请参照使用说明书。

构筑结构

构建与位于本设定例页面起始部分的认证前的结构图相同的结构。

[说明]
结构图中的SWX2200使用的是SWX2200-8G,但即使使用了SWX2200-24G,也可以实现同样的动作。

向RTX1200拷贝认证画面的HTML文档

  1. 认证画面的HTML文档(此后,显示为HTML文档)下载到PC上。
  2. 将USB记忆装置连接到PC上,将下载的HTML文档拷贝到USB记忆装置中。
  3. 从PC中拔下USB记忆装置,连接到路由器上。路由器的USB灯点亮。
  4. 打开路由器控制台。

    [说明]
    路由器控制台用串行电缆或telnet连接,使用。
    使用方法请参考使用说明书。

  5. 以管理者权限登录、用指令向路由器中拷贝HTML文档。
    使用copy指令。
    从USB存储器的根目录向路由器的根目录拷贝HTML文档时:

    [路由器控制台]

    # copy usb1:/web_auth.html /web_auth.html
    #

    [说明]
    指令的详细情况,请参照这里
    也可将文档存放到路由器的根目录以外的地方 。
    这时,编写根目录后,即可拷贝到该根目录中。
    关于这些方法,请参照参考资料
    技术资料「RTFS」-「指令一览」-「根目录的制作」
    将模块文件拷贝到目录中时,请根据httpd custom-gui user命令变更指定路径。

执行Lua脚本

[说明]
从Lua脚本的下载,直至执行的程序,请参考Lua脚本引进顺数手册

Web认证的程序

本程序是针对Web浏览器使用了Intenet Explorer时的说明。

  1. 将PC连接到SWX2200上。PC需要设定为从DHCP服务器取得ID地址。

    [说明]
    认证前分配到的是副网络的IP地址。
    虽不能对外部进行访问,但可访问RTX1200的认证画面。

  2. 启动Web浏览器。
  3. 从[文档]菜单中选择「打开」,输入http://192.168.100.1。
  4. 显示认证画面后,输入用户名和密码,点击OK。

    [说明]
    设定例中,设定有用户名test,密码test。

  5. 认证成功后,显示自定义GUI的页面。
    由于要在此取得IP地址,因此请关闭Web浏览器,并稍等片刻

    [说明]
    认证后,直至分配主网络(1192.168.100.0/24)地址,最多可能需要1分钟左右的时间。

  6. 重启Web浏览器,确认是否可以访问互联网。

    [说明]
    如果短时间内,多个主机向认证画面集中访问,则可能无法向主网络地址的切换。针对认证画面的访问过于集中,无法用Lua脚本进行SUSLOG的确认时,即会发生这样的现象。
    此时,请尝试等待数分钟后,再访问认证画面。

RTX1200的设定例

以太网过滤的设定

ethernet filter 1 reject-log dhcp-not-bind 192.168.100.1
ethernet filter 2 pass-nolog *:*:*:*:*:* *:*:*:*:*:*
ethernet lan1 filter in 1 2

LAN的接口的设定
(使用LAN1端口)

ip lan1 address 192.168.100.1/24
ip lan1 secondary address 172.16.0.1/24

WAN接口的设定
(使用LAN2端口)

pp select 1
pp always-on on
pppoe use lan2
pppoe auto disconnect off
pp auth accept pap chap
pp auth myname(连接ISP的ID) (连接ISP的密码)
ppp lcp mru on 1454
ppp ipcp ipaddress on
ppp ipcp msext on
ppp ccp type none
ppp ipv6cp use off
ip pp mtu 1454
ip pp nat descriptor 1
pp enable 1
ip route default gateway pp 1

NAT的设定

nat descriptor type 1 masquerade

DHCP的设定

dhcp service server
dhcp server rfc2131 compliant except remain-silent
dhcp scope lease type 1 bind-only fallback=2
dhcp scope 1 192.168.100.100-192.168.100.200/24
dhcp scope 2 172.16.0.100-172.16.0.200/24 expire 0:01 maxexpire 0:01

DNS的设定

dns server(由ISP指定的DNS服务器的IP地址)
dns private address spoof on

登录用户的设定

login user test test
user attribute test login-timer=120

自定义GUI的设定

httpd custom-gui use on
httpd custom-gui user test directory=/ index=web_auth.html

SWX2200的设定

switch control use lan1 on

过滤的设定

ip filter source-route on
ip filter directed-broadcast on
ip filter 1000 pass 172.16.0.0/24 192.168.100.1 tcp * www
ip filter 1001 pass 192.168.100.0/24 *
ip filter 1002 pass 0.0.0.0 *
ip filter 1003 pass 172.16.0.0 172.16.0.1
ip filter 2000 reject * *
ip filter 3000 pass * *
ip lan1 secure filter in 1000 1001 1002 1003 2000
ip policy interface group 101 name=Private local lan1
ip policy address group 101 name=Private 192.168.100.0/24
ip policy address group 102 name=Any *
ip policy service group 101 name="Open Services"
ip policy service group 102 name=General dns
ip policy service group 103 name=Mail pop3 smtp
ip policy service group 104 name=IPsec ike esp
ip policy filter 1 reject-nolog * * 172.16.0.0/24 * *
ip policy filter 1100 reject-nolog lan1 * * * *
ip policy filter 1110 pass-nolog * * * * 102
ip policy filter 1122 static-pass-nolog * lan1 * * *
ip policy filter 1123 static-pass-nolog * local * * *
ip policy filter 1130 pass-nolog * tunnel* * * *
ip policy filter 2300 reject-nolog tunnel* * * * *
ip policy filter 2330 pass-nolog * tunnel* * * *
ip policy filter 2340 pass-nolog * local * * *
ip policy filter 2350 pass-nolog * lan1 * * *
ip policy filter 2360 reject-nolog * pp* * * *
ip policy filter 2400 pass-nolog local * * * *
ip policy filter 2410 static-pass-nolog * lan1 * * *
ip policy filter 2430 static-pass-nolog * pp* * * 104
ip policy filter 2600 pass-nolog * pp* * * *
ip policy filter 2650 reject-nolog pp* * * * *
ip policy filter 2660 static-pass-nolog * local * * 104
ip policy filter 2670 pass-log * lan1 * * 101
ip policy filter 3000 reject-nolog * * * * *
ip policy filter set 101 name="Internet Access" 1100 [1110 1123 1122 2600 [1] 1130] 2650 [2670 2660] 2300 [2340 2350 2360 2330] 2400 [2410 2430] 3000
ip policy filter set enable 101

Lua脚本的日程设定

schedule at 1 startup * lua /swx2200_lua_web_auth_rtx1200.lua

Lua 脚本的设定例

设定值

-- 所使用的路由器的LAN接口数量
num_lan = 1
-- 发送邮件失败时输出的SYSLOG日志等级 (info, debug, notice)
log_level = "info"
-- 断开端口的时间(秒)
down_wait = 5

主机搜索的函数

function search(mac, addr, lan)
  -- 存放主机搜索结果的路径
  route = nil
  -- 存放主机搜索结果的路径的前一个路径
  switchroute = nil
  -- 保存主机链接的端口编号(也保存主机的IP地址)
  hostport = nil

  -- 在LAN1的MAC地址表发现主机时
  if (lan == 1) then
    rtn,str = rt.command("show status switching-hub macaddress " ..mac)
    port = string.match(str,"port (%d):")
    if (port ~= nil) then
      route = "LAN1:" ..port
      switchroute = "RTX1200"
      hostport = port
    else
      route = nil
      switchroute = nil
      hostport = addr
    end
  else
    --在LAN2或者LAN3的MAC地址表发现主机时
    lan = tostring(lan)
    route = "LAN"..lan
    switchroute = "RTX1200"
    hostport = "LAN"..lan
  end

  --[[
  用以上任意一种方法发现主机时,直至以route值为基点在路径中发现主机为止,重复搜索
  ]]
  while (true) do
    if (route ~= nil) then
      rtn, str = rt.command("switch control function get status-macaddress-addr "
                     ..mac .." " ..route)
      if (rtn) and (str ~= "0 entry\r\n") then
        switchroute = route
        hostport = string.match(str,"%d+")
        route = route .."-" ..string.match(str,"%d+")
      else
        route = nil
      end
    else
      break
    end
  end
  return switchroute, hostport
end

switch control指令的执行函数

function exec_sw_cmd(route, cmd)
  rtn, str = rt.command("switch select "..route)
  if (rtn) then
    rtn, str = rt.command(cmd)
  end
  return rtn
end

主程序

local rtn, str, app, ipaddr, mac
local ptn = "Login succeeded for HTTP:"

while (true) do
  rtn, str = rt.syslogwatch(ptn)
  if (rtn) and (str) then
    -- 从SYSLOG提取IP地址,检索主机
    ipaddr, user = string.match(str[1], "(%d+%.%d+%.%d+%.%d+)%s+(.+)")
     if (ipaddr) then
      for i = 1, num_lan do
       rtn, str = rt.command("show arp lan" .. i .. " | grep " .. ipaddr)
       if (rtn) and (string.match(str, ipaddr) ~= nil) then
         mac = string.match(str, "(%x%x:%x%x:%x%x:%x%x:%x%x:%x%x)")
         if (mac ~= nil) then
           --[[
           为了获得主地址,需设定dhcp scope bind指令
           ]]
           rt.command("dhcp scope bind 1 * ethernet " .. mac)

           -- 搜索主机
           switchroute, hostport = search(mac, ipaddr, i)

           if (switchroute ~= nil) then
             --[[
             为了促使DHCP重新获得地址,将连接的SWX2200的端口暂时关闭
             ]]
             str = "switch control function set port-use " ..hostport .." off"
             rtn = exec_sw_cmd(switchroute, str)

             --[[
             强制切断对GUI的登录,删除残留于路由器中的用户信息。
            ]]
            rt.command("disconnect user "..user)

            if (rtn) then
              rt.sleep(down_wait)
              -- 将关闭的SWX2200端口连接
              rt.command("no switch control function set port-use " ..
                       hostport)
            end
            break
          end
        else
          -- 不能bind时的log输出
          rt.syslog(log_level, "[ERROR] not found MAC Address "..
                "swx2200_lua_web_auth_rtx1200.lua")
        end
      end
    end
  end
 end
end

返回顶部Return to Top

网络相关产品

服务支持

事业绍介