一个人的角落,也许并没人会看到这里~~ 祝福你,工作顺心,学习快乐~

群晖利用公网服务器ip中转流量与内网无缝切换

最近想起nas的公网访问一直是个问题。中转网络一直不通畅,如果走公网转nas又会过度暴露而被自动扫描攻击,导致硬盘频繁唤醒。

这里实现一套方案,利用公网服务器的ip进行流量转发,并且添加一道简单的防火墙来过滤网络扫描。可以在回家以后自行将流量切换到内网。

在使用公网ip转发的时候,流量和带宽受公网服务器上限所限制。在家中互联场景,本地路由器可以通过拦截公网ip流量,自动转发到nas。免去内外网ip来回切换的问题。

graph TD User1(["User1/Phone/PC"]) -->|Access from local NetWork| B{Router} NAS["NAS lisening:5000(http)/5001(https)"] <-->|In local NetWork| B{Router} Internet{Internet} <--> PubServer[PubServer onPort:80/443/5001] Internet <--> B{Router} User2(["User2/DS File/Photo"]) --> |Access to PubServer:5001| PubServer

主要有以下几个部分实现:

在nas上,将本地端口5000映射到公网ip上,通过 ssh -R 转发。

在计划任务中添加一个bash脚本,建立公网服务器的ssh连接用于端口转发,并设置为开机启动。内容如下:

#!/bin/bash

while true; do
sleep 1
echo "Start Port Forward 5000 @ " `date`
ssh -R 5000:127.0.0.1:5000 yourAccount@YourServer.com -C -q -N -o ServerAliveInterval=60 -o ServerAliveCountMax=10
echo "End of Port Forward 5000 @ " `date`
done;

该脚本启动后会将公网服务器所有来自5000端口的流量转发到nas本身。

5000端口为nas的http服务的连接端口,5001端口为nas的https服务的连接端口。

接下来在公网服务器上配置nginx来实现http流量转发并且配置https端口为5001,通过白名单机制将流量转发到nas。

server {
    server_name yourServerName;
    location / {

#       set $pass_url http://127.0.0.1:8000; # for enter password.
#       if ( $http_user_agent ~ 'Synology-' ) { 
#          // we can also use UA to imp more filters.
           set $pass_url http://127.0.0.1:5000;
#       }
        proxy_pass $pass_url;
        proxy_set_header Host $host:80;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        include <your_list_path>/nas_allow_list.conf;
        deny all;
    }

    location /log {  // 
        set $pass_url http://127.0.0.1:8000; # for enter password
        proxy_pass $pass_url;
        proxy_set_header Host $host:80;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    listen 443 ssl; # managed by Certbot
    listen 5001 ssl; # managed by Certbot
    <the ssh certs config >
}

在上述conf中/log访问点的流量反代到白名单配置程序,可以用于动态更新 nas_allow_list.conf白名单。

一个简单的基于白名单配置程序:

from werkzeug.wrappers import Request, Response
import subprocess

@Request.application
def application(request):
    auth_html = '''<body style="margin: 0;"><div style="margin: auto ; width: 100%; height:100%; border: 2px solid green; padding: 50px 0; text-align: center; "><form  method="POST">
            <input type="password" name="psw" style="line-height: 25px;" value="" required placehold="Enter Text..." />
            <input type="submit" style="width: 90px;height: 30px;" value="Submit" />
        </form></div>'''
    if request.method != "POST":
        return Response(auth_html, content_type="text/html")

    data = request.get_data(cache=False,parse_form_data=True)

    input = request.form.get("psw", None)
    if input != "<Your Pass Word>":
        return Response(auth_html[:-6] + "<red>N/a</red></div>", content_type="text/html")

    iplist = ",".join(request.access_route)
    if request.remote_addr == "127.0.0.1": // the traffic is came from nginx.
        record_addr = request.access_route
    else:
        record_addr = [request.remote_addr]
    for ipaddr in record_addr:
        ipaddr = ''.join(i for i in ipaddr if i in '0123456789.')
        # also we can use firewall to filter te trific
        #cmd = ["firewall-cmd","--zone=sszone","--add-source="+ipaddr+"/32"]
        cmd = ["bash","-c", "echo 'allow "+ipaddr+";'>> <your_list_path>/nas_allow_list.conf"]
        subprocess.check_call(cmd)
        cmd = ["nginx", "-s", "reload"]
        subprocess.check_call(cmd)

    return Response("<h1>You are grand to access, IP<" + iplist + "> has record.<h1>")

if __name__ == "__main__":
    from werkzeug.serving import run_simple
    run_simple("0.0.0.0", 8000, application, threaded=True)

在路由器配置iptables , 将内网client到公网服务器的流量直接转发到local nas:

iptables -t nat -A PREROUTING -d <yourPubServerIP> -p tcp --dport 5001 -j DNAT --to-destination <yourLocalNasIP>:5001

记一次黑群晖系统升级失败之后的数据恢复

最近折腾了一下群晖系统的硬盘休眠, 由于不小心动到了硬盘的RAID设置, 导致系统认定系统盘和数据盘中的系统出现了diverge. 重启之后, 提示需要重装安装系统, 重装失败后系统丢失.

群晖系统要求的重装安装时,操作界面给出了两个选项: 迁移和重新安装.

群晖崩溃出现的安装界面

虽然都提示数据不会改动, 因此没有太在意细节 . 而不小心点到了重新安装, 并且选到了自动更新,(没有手动从官网下载安装包), 没想到安装包没自动下载成功, 直接就安装失败了. 当时也没管,直接强制断电关机睡觉了(这也许是最好的保护软件损毁数据的方法), (原本只需抹去并从启动盘中重新sync一份系统到数据盘, 现在事情弄复杂了.)

第二天起来,发现惊奇的是, 群晖已经将所有系统整个/dev/dm0格式化了.. 格式化这种敏感的操作, 居然不是放在最后等必要条件准备就绪才做. 这波操作让人着迷, 恐怕只有印度小伙能干出来.

Linux数据救援不同于win平台使用PE, 搜寻了一蕃LiveCD的解决方案, systemrescue(https://www.system-rescue.org/) 看起来可以不错,后续使用过程中也都满足了需求,.

基本的disk io操作工具都有,包括testdisk, photorec, parted, mdadm, cifs.

注意: Ubuntu的server版liveCD似乎由于内核没有编译RAID模块, 无法操作raid分区, 已踩坑,不建议用作数据救援.

图片伪造技术 - 使用exiftool对图片描述信息进行增删查改

通常,一张图片本身包含其所应该包括的图像像素内容以外,还包含了很多其它描述该图片元信息,比如图片大小,图片拍摄设备,拍摄时间,焦距,地理位置等,若经过中间处理,还可能包含剪辑软件名称,版本号,版权等信息。

图片在互联网上转发的过程中,也可能经过服务器的有陨/无损压缩,格式转换,大小裁剪,水印添加。根据服务器所使用的不同处理程序也有可能对元数据进行增删改等操作。

因此简单通过分析图片的元数据可以获得除本身所能代表的信息以外,还可能可以初步确定图片是否直接来自于手机或相机拍摄,是否经过修改之类。

exIftool是一个功能强大的命令行执行工具,exiftool.org,支持对大量常见的图片格式进行操作。具体信息见其官方网站说明。

一张经过ps处理的图片文件头如下:

1_raw_meta_info_ps_processed

传统文化之偏见

我对传统文化的偏见始于一部名为《天道》的电视剧,剧中主角对养儿防老问题的看法,掀开了我对传统文化的重新认识。

我所认为的传统文化,不仅限于语文教科书中儒道法默等众家,被封建帝王所用于奴隶人民的思想,还包括一部分近代,近现代以及改开之后,老一辈所灌输的某些受封建文化影响的思想。更具体的是指那部分盛行于现代生活之中的。

正如马克思所树立的形面上学的思想一样,传统文化中大部分内容是片面的,是孤立的,是静止。甚至有时候,它伪装成所谓正确的言论,印入脑中,使得无法分辨。“有朋自远方来,不亦说乎”,看起来没有错误,但它并没有强调什么是朋友,而机械式的强调对待朋友的应该友善。在如今的现实生活中,事情并不是非黑既白,人性的多样化,区分不同的人,对待不同的人使用不同的态度,显然更加重要。

因此,传统文化是片面的而非普遍的,是感性的而非理性的,是奴役的而非真理的。人在什么样的文化渲染下成长,便会在其文化下形成某种固有的思维方式,并形成群体性思想。在群体性思想的渲染下,又会反过来影响个人。

我认为文化的作用,应该是对人的方方面面有所启发,引发人的思考,塑造人的价值观,真理观。

我们国家的社会发展,从过去到今天,社会决策,政府运作,也大多在这种文化渲染下进行。一些人口中的政治正确,在一定程序上也就成了传统文化正确。为此,我们是否应该反思,在工业自动化,农业自动化经历了高速发展的今天,人的基本物质得到极大保障的今天,传统文化是否还能肩负得起,解决现代社会问题的重任?

下面总结一些,我认为的传统文化的某些观点,具有误导性,或者不满足现代社会下的应用。

一款小型哺乳动物仓笼体温监测与活动检测的装置以及部署方案

本方案使用物联网技术,通过高精度嵌入式红外摄像头,持续采集仓笼内热源信号,以及动物运动状态,使用嵌入式MCU对感知数据进行前端采集与简单分析,通过Wifi网络上传到数据中心,可形成数据汇总,采集时间跨度短可几周,长则跨年。装置。可按照需求,定制化按时按天按月或按年,生成可视化温度变化曲线,成本低廉,可供学术研究参考,或生物实验佐证使用。

单套设备仅需人民币300~500左右,约合美元60~80,成本低廉。对于单个仓笼,可同时部署多套设备,多套设备数据融合处理,以达到最佳采样角度,确保检测无死角。

方案包含完整装置采购清单,设备运行程序以及设备程序烧录指导,设备联网方法,现场部署指导等一系列指导文档,以及售后指导服务。

方案主体框架如下:

system_flow

一些国内用户的使用范例:

example_all

view_2

example_view

类似竞品论文参考:

https://journals.plos.org/plosbiology/article?id=10.1371/journal.pbio.3000406 http://journals.plos.org/plosbiology/article/asset?unique&id=info:doi/10.1371/journal.pbio.3000406.s014

合作洽谈可联系:iziy#mypre.cn / c834606877#163.com

一例MusicBox的固件简单分析,基于STM32芯片固件分析总结(待续)

从硬件到软件,制作一个高还原性,高保真的音乐盒子一直是我的兴趣之一。因此,我尝试在淘宝买一些音乐盒子做为设计参考,从双轨正负电压供电电路,电池充放电电路,stm32核心电路,到dac的解码电路,前极放大电路。到USB声卡,sdcard播放等功能。

最近发现某款音乐播放器的固件很有趣,因此,我在这简单记录一下分析过程,顺便总结一下从中学到的一些分析经验。

固件是通过SDcard更新的,商家发布新固件后,将固件放入SDcard后,芯片上的bootloader会检测并触发更新。

固件的部分内容如下:

bin-img

经过分析,固件使用了简单的压缩,一来减少固件体积,二是有校验机制。

通常,固件前一部分内容是,固件定义的栈顶指针以及芯片的中断向量表,均为4字节对齐。

在Padavan上实现支持RTSP网络摄像头的录像机功能

基于mt7621处理器的路由器通常都具有一个可扩展的USB接口,可以转接U盘,硬盘或者USB网卡之类。

既是路由器也是一个小型网络存储器,可省去额外配置一个nas,相比nas功能比较少,但也具有一定的可配置性。

这里简单介绍如何在运行类openwrt系统的路由器上实现网络录像机(NVR)的功能。

如今网络上的云摄像头已经卖到100元上下了,有萤石云摄像头,360摄像头,小米摄像头,TP-Link等,但这类型的摄像头都需要额外购买云存储服务才存储回放录像,显然这部分附加服务不具有性价比。

按照专物专用的原则,一台群晖也可以解决,但毕竟要多出一个东西。因此在路由器上实现类似NVR功能是最经济的做法。

很多云摄像头的商品描述页面,并不会直接写明支持RTSP传输,但会写支持NVR功能。

据我了解,TPLink全系均支持NVR功能,莹石云摄像机官方未显式支持但C2C/C3C/C6C等几个型号存在RTSP协议。

下面开始正文。