1. 背景介绍
1.1 目标
校园网中通过域名访问内网资源,比如通过域名访问博客,通过域名直接连接内网远程桌面等等
1.2 可以白嫖的资源:
瞅了瞅手上的东西只有一台树莓派
一个pptp-vpn
一个宿舍里面用来提供无线的TP-LINK
向freemyip申请一个免费的域名
隔壁宿舍的wifi
隔壁的wifi不能搞,只能在自己的TPlink上想办法
2. 网络结构
2.1 网络分区
WEB应用区(宿舍肥宅区):树莓派+wordpress 出口网关:唯一的TP-LINK
实验室区:双网关拨号校园网+易迅,内置一个PPTP的vpn
公网监控区:公网一台zabbix监控树莓派的性能,放在公网方便发告警
2.2 数据流传递
校园网访问博客:向校园网dns请求域名->dns指向校园网拨号IP->数据流传到TPlink- >TP-link将流量转发到树莓派上
公网访问博客:PPTP接入实验室->(同校园网访问路径一样)
此架构图中所有交换机都是我根据现象YY出来的,很可能与正确的拓扑不符
树莓派左边三个点分别代表网线、无线和共享网络,意为多路径上网
分得稍微整齐一点,描述起来比较方便,下图为架构图
3. 环境搭建
3.1 TP-link设置虚拟服务器
解决问题:做端口映射,使外网可以通过(IP+映射出去的端口)访问内网资源
TP-LINK的好处是可以设置虚拟服务器,也可以设置dmz,这里设置将树莓派的80端口映射到TP-link上,非常地方便,基本上一键操作,坏处就是不能像openwrt一样执行命令,访问服务数据还需要通过别的手段去获得(例如爬虫)
虚拟服务器和dmz的区别就是设置虚拟服务器相当于做自己想要的端口映射,设置dmz相当于树莓派全端口静态映射到pi上
3.2 python爬虫获取TP-link拨号IP
解决问题:获取IP
抓了一下访问TP-link的包,找到了获取IP的接口
经过一波抓包分析,TP-link与客户端的通信模式是:
C->S:(POST,method,password)
S->C:(res,stok)
C->S:(POST,header,cookie,json-request,stok)
S->C:(code-status,json-response)
果断写python爬数据,代码如下:
1 | def main(): |
执行结果如下图:
在生产环境中出现一个问题,如果由于拨号断线或者某段时间内网络故障导致登陆过期,登陆就会失败,失败次数过多就会触发账户锁定,必须重启路由器。(这块安全做的还是不错的)
于是就需要我们随时检查stok的有效性,以及过期自动更新。于是添加以下代码:
1 | def main(): |
使用data.txt去保存stok,看起来有点笨,应该有更好的办法的,最终效果如下:
这样就实现了登录IP的爬取。
3.3 设置CRONTAB更新DNS
解决问题:绑定域名和DNS,使得通过访问域名就可以访问到服务
更新dns指向IP的办法是使用crontab定时执行更新,这里使用的是freemyip的域名,这个域名不但免费,而且提供由client端主动更新dns的接口,还可以加A记录等等,对学生党来说很赞
我把相应的命令也放在了python里,执行一次curl即可,包含参数为curl(proxy,domain,token,ip,outputfile)
/dev/null 2&>1
该命令是说标准输出重定向到 /dev/null,再将标准错误输出到/dev/null,即不管什么返回结果都不保存的意思。
放上crontab的截图,通过/var/log/syslog可以查看每分钟crontab的执行记录,这里的No MTA installed,指的应该是说crontab执行的程序有输出打印到了屏幕上,但是被丢弃了,因为我们没有设置output_file
crontab设置
tail -f /var/log/syslog
使用命令
1 | curl --socks5 127.0.0.1:1080 \"https://freemyip.com/update?token=9aa30b01087aaf16ccf80dab&domain=xidian111.freemyip.com&myip={}\">/dev/null 2>&1".format(ip) |
4. 未完成部分
到这里实际上校园网内访问blog已经完成了,但是还有很多需求是待解决的
写写以后需要继续完成的东西
树莓派的资源有限,需要做监控,需要解决公网zabbix拉取内网服务器数据的问题
zabbix与微信联动告警,这属于SOC的范畴,还有待进一步开发
5. 参考链接
https://blog.csdn.net/u010629610/article/details/84573402
https://zhuanlan.zhihu.com/p/44213627