Wifidog流程wifidog网关协议 V2结构

线程

主程序

  • 启用“status”或者“autheserv”线程
  • 等待状态线程在初始化网络和拒绝客户端之前,成功的下载配置
  • 一旦被初始化,等待连接到它的节点
  • 用以前的方法处理流量(访问登录页面…获取标识,用认证服务器测试标识,提供防火墙规则)

状态线程

  • 连接认证服务器并且每五分钟(默认)发送一次状态
  • Wiifdog uptime
  • System uptime
  • System free memory
  • System load average
  • System network interface list(ifconfig –a).(需要选择wifidog将要使用的接口)

http客户端线程
  当一个新的连接被初始化时,启用此线程。如果有80个人连接到认证服务器,同时就会有80个线程被启用。最好是有个threads pool,但99%的情况都没用,并且会花费很多时间在代码和调试上。

命令行的选项

用所需的数值设置:--auth Authserver’s hostname –lan LAN interface

当wifidog初始化他的config,它应该看到一些选项,如“这是连接登录页面的URL”…

  • 全球化宽带设置
  • 登录页面URL
  • 门户页面URL
  • 计时器

协议的JOSN
如何创建JOSN:

struct json_object *status_object = json_object_new_object();

json_object_object_add(status_object, "wifidog_version", json_object_new_string(VERSION));

json_object_object_add(status_object, "protocol_version", json_object_new_double(2.0));

json_object_object_add(status_object, "node_id", json_object_new_string(node_id));

json_object_object_add(status_object, "fetch_config", json_object_new_boolean(1));
       
struct json_object *node_status_object = json_object_new_object();

json_object_object_add(node_status_object, "wifidog_uptime", json_object_new_int(25));

json_object_object_add(node_status_object, "sys_uptime", json_object_new_int(get_sys_uptime()));

json_object_object_add(node_status_object, "sys_loadavg", json_object_new_double(get_sys_loadavg()));

json_object_object_add(node_status_object, "sys_memfree", json_object_new_int(get_sys_memfree()));

char * json = json_object_to_json_string(status_object);

回复了JOSN字符串

解析:

struct json_object * json_object = json_tokener_parse(the_string);

struct json_object * value_json_object = json_object_object_get(json_object, "node_id");

printf("%s\n", json_object_get_string(value_json_object));

这将在树结构的第一级检索“node_id”。

测试所需防火墙规则的运行(Linux)
这些命令行需要测试试我们所需的所有模块:

iptables -A INPUT -m mac --mac-source 00:00:00:00:00:00 -j ACCEPT

iptables -D INPUT -m mac --mac-source 00:00:00:00:00:00 -j ACCEPT

iptables -t nat -A PREROUTING -p tcp --dport 9999 -j REDIRECT --to-ports 2060

iptables -t nat -D PREROUTING -p tcp --dport 9999 -j REDIRECT --to-ports 2060

如果运行,我们可以继续操作。我确信还有许多尝试,但这只是个开始。

防火墙规则(Linux)
我们曾使用MARKs来标记流量是已知,未知或是在验证。
现在流量就简单的是已知或未知,指定拒绝规则应该被发送为“拒绝acl规则”。
我们应该尝试停止使用MARKs,因为我们只有255个。
这是我的经验,不全面但还是发布一下:

iptables -t filter -N wd_lan2wan

iptables -t filter -N wd_lan2wan_fromauth 

iptables -t filter -N wd_lan2wan_clients

iptables -t filter -N wd_lan2wan_defaults

iptables -t filter -N wd_incoming_stats

iptables -t filter -I FORWARD 1 -i LAN_INTERFACE -o WAN_INTERFACE -j wd_lan2wan

iptables -t filter -I FORWARD 1 -j wd_incoming_stats

iptables -t filter -A wd_lan2wan -j wd_lan2wan_clients

iptables -t filter -A wd_lan2wan -j wd_lan2wan_defaults

iptables -t nat -N wd_redirect

iptables -t nat -I PREROUTING 1 -j wd_redirect

iptables -t filter -A wd_lan2wan -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

iptables -t filter -A wd_lan2wan_defaults -p tcp --dport 53 -j ACCEPT

iptables -t filter -A wd_lan2wan_defaults -p udp --dport 53 -j ACCEPT

iptables -t filter -A wd_lan2wan_defaults -d AUTHSERV_HOSTNAME -j ACCEPT

iptables -t filter -A wd_lan2wan_defaults -j REJECT

iptables -t filter -A wd_incoming_stats -d 192.168.1.10 -j RETURN

iptables -t filter -A wd_lan2wan_clients -s 192.168.1.10 --match mac --mac-source 01:02:03:04:05:06 -j ACCEPT

iptables -t nat -I wd_redirect 1 -s 192.168.1.10 --match mac --mac-source 01:02:03:04:05 -j ACCEPT

我只添加一个规则来允许客户端,但我们需要计算出这些数据。如果我们能够有两个规则,这样会比较规整,但如果想避免使用REDIRECT规则的话,我们将要在相同的热点来MARK流量。我们能够做到,但需要像以前一样能够获得“magic number”MARK才行。

本文章由 http://www.wifidog.pro/2015/03/31/wifidog%E6%B5%81%E7%A8%8Bwifidog%E5%88%86%E6%9E%90.html 整理编辑,转载请注明出处

标签: wifidog认证 wifidog安装 wifidog原理 wifidog分析 wifidog配置 wifidog流程 wifidog服务器 wifidog-ddwrt wifidog openwrt