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 整理编辑,转载请注明出处