portal功能实现方式多样;
今天我介绍一种常用的方式:
要求:路由器在断网的情况下(Pon链路断开的情况)当PC访问外网的时候(可以通过ip 地址或者域名这两种情况访问)会弹出一个Pon链路断开状态的页面,提醒用户检查Pon链路是否正常;
实现方法:
1.分析:怎样将访问外网的数据包转交web服务器
当我们在通过浏览器访问外网(以www.baidu.com为例)时,首先PC先发送dns 数据包给dns 服务器进行域名解析成相应
在将ip地址封装到http 的数据包中发送出去;
思路:我们在访问外网的时候,在断网的情况下,我们需要做的是 路由器 dnsmasq进程收到dns 报文时,将所有的外网的域名映射成本地的IP地址。
然后通过iptables 进程将数据转发到web 服务器的80端口,web 服务器返回浏览器一个网络断开的状态页面!
在这段过程中:
dnsmasq 进程处理:
iptables 处理: 主要作用添加一个iptables规则,使得在断网的情况下,添加将外网的数据包转发到80 端口的进程那儿去
在有网络的情况下,删除该规则,定期执行,保证能够及时的更新规则(该程序在cfg_manager cc.c中循环中执行(间隔一秒));
web(Boa )处理:判断是否为本地IP,不是则返回断网状态页面(hostname 为域名)