作者: itgeeker

  • Synology群辉NAS Python 3如何安装PIP

    Synology群辉NAS Python 3如何安装PIP

    Python 3通过API给NAS里的电源获取电影字幕碰到的第一个问题就是:你的群辉NAS没有安装PIP,无法安装Python模块。

    通过群辉应用商店安装的python 3,pip path:cd /volume1/@appstore/py3k/usr/local/lib/python3.8/site-packages

    确认没有,那么开始安装吧:

    curl -k https://bootstrap.pypa.io/get-pip.py | python3

    或者

    curl -O https://bootstrap.pypa.io/get-pip.py
    sudo python3 get-pip.py

    如果发现网络连不上pypa.io, 连接超时错误,如果有代理的话就:

    export http_proxy=http://192.168.1.X:1080
    export https_proxy=http://192.168.1.X:1080

    没有的话也不要急,用镜像地址也可以:

    python3 get-pip.py -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

    确认一下pip或者pip3的安装路径,如果是/var/packages/py3k/target/usr/local/bin,那么:

    export PATH=$PATH:/var/packages/py3k/target/usr/local/bin

    或者

    echo "PATH=\$PATH:/var/packages/py3k/target/usr/local/bin" >> ~/.bashrc
    source ~/.bashrc 

    然后就可以用pip安装需要的模块了

  • Python 3通过API给NAS里的电源获取电影字幕[开源小工具]

    Python 3通过API给NAS里的电源获取电影字幕[开源小工具]

    此项目Gitee的开源地址:

    git clone git@gitee.com:itgeeker/python3_grab_subtitle.git

    项目的测试环境

    • 硬件环境:Synology 418play DSM6.2.3群辉系统
    • Python版本: Python3.8.2
    • Python模块:
           json, pathlib, platform, requests, urllib.request

    项目实现的功能

    • !!!会自动删除目录里文件总大小 < 100M的目录
    • 适用于视频文件有单独目录的电影,例如中国高清网下载的影片
    • 搜索电影名称依据目录名称来进行,不是视频文件名

    群辉Synology NAS需要引入的Python3模块

    import json
    #python3.4版本之后才支持pathlib
    from pathlib import Path
    from sys import platform
    import requests
    import urllib.request
    • 如果你碰到Synology群辉NAS Python3没有PIP

    Synology群辉NAS Python3如何安装PIP

    使用pathlib获取或设定NAS电影的目录

    def get_root_dir():
        root_dir = ''
        if platform == "linux" or platform == "linux2":
            print('linux')
            root_dir = Path('/volume1/video/film_new')
        elif platform == "darwin":
            print('OS X')
        elif platform == "win32":
            print('# Windows...')
            # root_dir = Path(r'D:\test')
            root_dir = Path(r'\\YOUR_NAS\video', 'film_new')
        return root_dir
    if __name__ == '__main__':
        root_dir = get_root_dir()
        print(root_dir)

    这里要注意的是,如果你在自己电脑上用win10来调试的时候,NAS的局域网路径的写法是:root_dir = Path(r’\\YOUR_NAS\video’, ‘film_new’)

    by itgeeker.net
  • 树莓派刷原生OpenWRT 安装V2ray作为旁路由(网关或透明代理)让全屋免配置走代理

    树莓派刷原生OpenWRT 安装V2ray作为旁路由(网关或透明代理)让全屋免配置走代理

    ITGeeker之前有配置过OpenWRT使用SS+ChinaDNS+DNS-Forwarder来做代理:

    虽然obfs混淆不被ss支持了,但使用起来还是没有问题的。不过最近服务器支持V2ray了,所以又用OpenWRT配置了V2ray的透明代理,或者说是网关,ITGeeker喜欢把它叫成旁路由,你喜欢怎么称呼都可以,技术奇客这里安装再旁路由器里,就称旁路由了。

    先来个简化的拓扑图,具体配置图文的确比较繁杂,看的懂下面的完整配置文件的应该可以自己配置。有需要图文说明的请留言将优先更新。

    by itgeeker.net

    V2ray其实相当于打包了好多上面的应用,安装起来比较方便,功能强大了很多,但配置起来却不是更方便,幸亏openwrt版的预先内置配置很有用。

    完整配置文档

    来自/var/etc/v2ray/v2ray.main.json文件,我这里配置了6个自有的outbond服务器,4个v2ray+2个ss。只要替换上你自己的服务器地址、ID、alterId、security或者SS的密码,理论上就可自动实现代理了。

    在V2ray的全局设置中,设置config文件应该可以实现,但还未亲自测试。
    {
    	"log": {
    		"access": "/dev/null",
    		"loglevel": "warning",
    		"error": "/var/log/v2ray-error.log"
    	},
    	"dns": {
    		"hosts": {
    			"example.com": "127.0.0.1"
    		},
    		"servers": [
    			"1.1.1.1",
    			"8.8.8.8",
    			{
    				"address": "114.114.114.114",
    				"port": 53,
    				"domains": [
    					"geosite:cn",
    					"ntp.org"
    				]
    			},
    			{
    				"address": "223.5.5.5",
    				"port": 53,
    				"domains": [
    					"geosite:cn"
    				]
    			},
    			"202.96.209.5"
    		]
    	},
    	"routing": {
    		"domainStrategy": "IPOnDemand",
    		"rules": [
    			{
    				"type": "field",
    				"ip": [
    					"geoip:private",
    					"geoip:cn"
    				],
    				"outboundTag": "direct"
    			},
    			{
    				"type": "field",
    				"domain": [
    					"geosite:cn"
    				],
    				"outboundTag": "direct"
    			},
    			{
    				"type": "field",
    				"protocol": [
    					"bittorrent"
    				],
    				"outboundTag": "direct"
    			},
    			{
    				"type": "field",
    				"domain": [
    					"geosite:category-ads-all"
    				],
    				"outboundTag": "block"
    			},
    			{
    				"type": "field",
    				"port": "53",
    				"network": "udp",
    				"inboundTag": [
    					"transparent"
    				],
    				"outboundTag": "dns_out"
    			},
    			{
    				"type": "field",
    				"ip": [
    					"114.114.114.114",
    					"223.5.5.5"
    				],
    				"outboundTag": "direct"
    			},
    			{
    				"type": "field",
    				"ip": [
    					"1.1.1.1",
    					"8.8.8.8",
    					"208.67.222.222"
    				],
    				"outboundTag": "proxy"
    			},
    			{
    				"type": "field",
    				"port": "123",
    				"network": "udp",
    				"outboundTag": "direct"
    			}
    		],
    		"balancers": [
    			{
    				"tag": "balancer",
    				"selector": [
    					"server1",
    					"server2",
    					"server3",
    					"server4",
    					"proxy"
    				]
    			}
    		]
    	},
    	"inbounds": [
    		{
    			"port": 10800,
    			"protocol": "socks",
    			"settings": {
    				"auth": "noauth",
    				"udp": true,
    				"ip": "0.0.0.0"
    			},
    			"streamSettings": {
    				"sockopt": {
    					
    				}
    			},
    			"tag": "in_proxy",
    			"sniffing": {
    				"enabled": true,
    				"destOverride": [
    					"http",
    					"tls"
    				]
    			}
    		},
    		{
    			"port": 10811,
    			"protocol": "dokodemo-door",
    			"settings": {
    				"followRedirect": true,
    				"network": "tcp,udp",
    				"timeout": 30
    			},
    			"streamSettings": {
    				"sockopt": {
    					
    				}
    			},
    			"tag": "transparent",
    			"sniffing": {
    				"enabled": true,
    				"destOverride": [
    					"http",
    					"tls"
    				]
    			}
    		}
    	],
    	"outbounds": [
    		{
    			"protocol": "vmess",
    			"settings": {
    				"vnext": [
    					{
    						"address": "server3.domain.com",
    						"port": YOUR SERVER ID PORT,
    						"users": [
    							{
    								"id": "YOUR SERVER ID“
    								"alterId": 0,
    								"security": "auto"
    							}
    						]
    					}
    				]
    			},
    			"streamSettings": {
    				"sockopt": {
    					"mark": 255
    				}
    			},
    			"tag": "proxy",
    			"mux": {
    				"enabled": true,
    				"concurrency": 8
    			}
    		},
    		{
    			"protocol": "freedom",
    			"settings": {
    				
    			},
    			"streamSettings": {
    				"sockopt": {
    					"mark": 255
    				}
    			},
    			"tag": "direct",
    			"mux": {
    				"enabled": true,
    				"concurrency": 8
    			}
    		},
    		{
    			"protocol": "blackhole",
    			"settings": {
    				
    			},
    			"streamSettings": {
    				"sockopt": {
    					"mark": 255
    				}
    			},
    			"tag": "block"
    		},
    		{
    			"protocol": "dns",
    			"settings": {
    				
    			},
    			"streamSettings": {
    				"sockopt": {
    					"mark": 255
    				}
    			},
    			"tag": "dns_out"
    		},
    		{
    			"protocol": "vmess",
    			"settings": {
    				"vnext": [
    					{
    						"address": "server5.domain.com",
    						"port": YOUR SERVER ID PORT,
    						"users": [
    							{
    								"id": "YOUR SERVER ID“
    								"alterId": 0,
    								"security": "auto"
    							}
    						]
    					}
    				]
    			},
    			"streamSettings": {
    				"sockopt": {
    					"mark": 255
    				}
    			},
    			"tag": "server5",
    			"mux": {
    				"enabled": true,
    				"concurrency": 8
    			}
    		},
    		{
    			"protocol": "vmess",
    			"settings": {
    				"vnext": [
    					{
    						"address": "server4.domain.com",
    						"port": YOUR SERVER ID PORT,
    						"users": [
    							{
    								"id": "YOUR SERVER ID“
    								"alterId": 0,
    								"security": "auto"
    							}
    						]
    					}
    				]
    			},
    			"streamSettings": {
    				"network": "tcp",
    				"tcpSettings": {
    					"header": {
    						"type": "none"
    					}
    				},
    				"sockopt": {
    					"mark": 255
    				}
    			},
    			"tag": "server4"
    		},
    		{
    			"protocol": "vmess",
    			"settings": {
    				"vnext": [
    					{
    						"address": "server801.domain.com",
    						"port": YOUR SERVER ID PORT,
    						"users": [
    							{
    								"id": "YOUR SERVER ID“
    								"alterId": 0,
    								"security": "auto"
    							}
    						]
    					}
    				]
    			},
    			"streamSettings": {
    				"network": "tcp",
    				"tcpSettings": {
    					"header": {
    						"type": "none"
    					}
    				},
    				"sockopt": {
    					"mark": 255
    				}
    			},
    			"tag": "server801",
    			"mux": {
    				"enabled": true,
    				"concurrency": 8
    			}
    		},
    		{
    			"protocol": "shadowsocks",
    			"settings": {
    				"servers": [
    					{
    						"address": "server1.domain.com",
    						"port": YOUR SERVER ID PORT,
    						"method": "aes-256-gcm",
    						"password": "YOUR SS PASSWORD",
    						"ota": false
    					}
    				]
    			},
    			"streamSettings": {
    				"sockopt": {
    					"mark": 255,
    					"tcpFastOpen": true
    				}
    			},
    			"tag": "server1"
    		},
    		{
    			"protocol": "shadowsocks",
    			"settings": {
    				"servers": [
    					{
    						"address": "server2.domain.com",
    						"port": YOUR SERVER ID PORT,
    						"method": "aes-256-gcm",
    						"password": "YOUR SS PASSWORD",
    						"ota": false
    					}
    				]
    			},
    			"streamSettings": {
    				"sockopt": {
    					"mark": 255,
    					"tcpFastOpen": true
    				}
    			},
    			"tag": "server2"
    		}
    	]
    }
    

    防火墙iptables配置

    命令行输入执行或者添加到OpenWrt 管理界面面 Network -> Firewall -> Custom Rules

    ipset -N gfwlist iphash
    iptables -t nat -A PREROUTING -p tcp -m set --match-set gfwlist dst -j REDIRECT --to-port 1081
    iptables -t nat -A OUTPUT -p tcp -m set --match-set gfwlist dst -j REDIRECT --to-port 1081
    ipset add gfwlist 8.8.8.8

    开启UDP需要 iptables-mod-tproxy 模块,请确保已经安装好。

    opkg install iptables-mod-tproxy

    OpenWRT dnsmasq-full配置

    可参考:OpenWRT dnsmasq-full配置

    cd /etc/dnsmasq.d && wget https://cokebar.github.io/gfwlist2dnsmasq/dnsmasq_gfwlist_ipset.conf
    
    #若下载错误,请安装
    opkg install libustream-mbedtls coreutils-base64 ca-certificates ca-bundle

    这里我们需要把dnsmasq_gfwlist_ipset.conf里类似server=/hp.com/127.0.0.1#5353的行全部删除,在win10可用vsc等编辑软件,正则搜索

    server=/(.*)

    替换为空就行。记得

    # 重启dnsmasq
    /etc/init.d/dnsmasq restart

    dnsmasq-china-list安装(可选)

    作为前置优化国内外网站用,请参考官方发安装方法,国内外各大代码网站都有他们的官方代码:

    V2ray透明代理的问题解决

    如果重启主路由和旁路由了还不能上网,可以按以下方式检查:

    • 旁路由配置是否正确?可以参考

    刷了OpenWRT的路由器+旁路由配置方法+无缝漫游配置(树莓派3B/3B+/4B使用OpenWRT系统做旁路由)

    • 旁路由是否开启 IP 转发?
    echo "net.ipv4.ip_forward=1" >> /etc/sysctl.d/10-default.conf
    sysctl -p
    • 测试旁路由自身是否可以通过代理上网?
    curl -x socks5://127.0.0.1:1080 google.com

    结果应为:

    <HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
    <TITLE>301 Moved</TITLE></HEAD><BODY>
    <H1>301 Moved</H1>
    The document has moved
    <A HREF="http://www.google.com/">here</A>.
    </BODY></HTML>
    • 再检查一遍iptables命令是否被正确执行?
    • 还不行,找个高手指导一下吧

    这里用的是redirect的方式走代理,不支持ipv6,据说tproxy的方式可以支持ipv6

    by itgeeker.net

  • OpenWRT dnsmasq-full配置

    OpenWRT dnsmasq-full配置

    此配置dnsmasq的主要作用是ipset需要代理的域名,传递给iptables使用。

    dnsmasq-full安装

    openwrt的默认dnsmasq并不支持ipset,需要安装dnsmasq-full版本。ipset是为了支持对域名的转发代理,而chinadns是对ip进行转发代理。所以如果你选择域名匹配的方式走代理,则需要安装dnsmasq-full版本。这里就有了一个问题,当卸载dnsmasq之后,无法解析域名,也就无法安装dnsmasq-full了。这里需要卸载和安装同步进行以避免此类问题。代码如下:

    opkg remove dnsmasq && opkg install dnsmasq-full

    OpenWRT dnsmasq-full配置

    mkdir -p /etc/dnsmasq.d
    
    uci add_list dhcp.@dnsmasq[0].confdir=/etc/dnsmasq.d
    uci commit dhcp
    uci get dhcp.@dnsmasq[0].confdir

    dnsmasq-full配置文件下载

    cd /etc/dnsmasq.d && wget https://cokebar.github.io/gfwlist2dnsmasq/dnsmasq_gfwlist_ipset.conf
    
    #若下载错误,请安装
    opkg install libustream-mbedtls coreutils-base64 ca-certificates ca-bundle

    dnsmasq_gfwlist_ipset.conf的每条命令是这样

    server=/hp.com/127.0.0.1#5353
    ipset=/hp.com/gfwlist

    如果使用DNS-Forwarder转发,请填写相应端口,比如#5353

    ipset后面的gfwlist要和下面的防火墙iptables命令行相对应。

    by itgeeker.net
    # 重启dnsmasq
    /etc/init.d/dnsmasq restart
  • 华为MatePad Pro安装GMS成功 比之前Mate30 Pro安装时更方便了

    华为MatePad Pro安装GMS成功 比之前Mate30 Pro安装时更方便了

    在HMS还未成熟的情况下,装个GMS还是能方便不少,毕竟全家桶还是离不开它作为基础来安装和使用。期待HMS的快速成长。

    2019年Mate30 Pro安装GMS方法

    非冠疫情以来,MatePad Pro大容量存储的套装一直缺货,在4月底终于抢到了。华为MatePad Pro的制造工艺还是非常不错,非但打破了iPad死板的外观,把手机的窄边应用到了平板上,其中的多屏互动非常好,华为如果能推出其他平台或者普通PC也能用的多屏互动功能,那么技术奇客就不一定需要使用srccpy比较单一的功能了,参看:

    技术奇客(ITGeeker)认为,如果华为的多屏互动是通过蓝牙来实现的,理论上是可以实现的,期待中。。。。。。

    by itgeeker.net

    GMS安装方法的参考来源:

    Google Play Store and Mobile Service (GMS) on Huawei MatePad Pro

    ITGeeker won’t be responsible for any kind of issue that may occur to your handset by following this guide. Proceed at your own risk.

    通过非官方渠道安装应用,重要提示你一下会有风险,而且后果自负,技术奇客也同样给出警告。

    by itgeeker.net

    设备需求条件:

    • 1台能上网的PC
    • 1根type C接口的数据线
    • 华为MatePad Pro

    华为MatePad Pro安装GMS步骤

    1. 确保电脑已安装“华为手机助手”,英文”HiSuite”

    官方下载链接:https://consumer.huawei.com/cn/support/hisuite/

    1. 连接手机到你的电脑,然后在手机端打开“设置”,搜索HDB,选择“允许HiSuite通过HDB连接设备,bala,bala”,选择打开该项。此时华为手机助手应该显示连接MatePad Pro成功
    此截图为Mate30 Pro手机截图,MatePad Pro应该类似
    1. 下载压缩包LZPlay & Google Apps Pack

    原始为OneDrive Link下载,技术奇客未做搬运,如果下载有困难,请下面留言。打开是两个文件夹。

    因要求添加百度网盘下载:

    链接: https://pan.baidu.com/s/18NyolTytun-xNtj-PDCH3w 提取码: 5s7p

    by itgeeker.net @ 2020年06月22日
    1. 在PC上解压缩LZPlaybackup.zip,建议关闭杀毒软件,比如360杀毒之类的,容易误报。
    2. 然后在华为手机助手选择恢复恢复选项 > 然后选择编辑,再选择刚才解压缩的LZPlaybackup文件。(注意文件解压缩时的目录结构问题)
    3. 如果询问密码password输入a12345678,就会在MatePad Pro安装LZPlay app.
    4. 在PC上解压缩下载的另外一个googleapps.zip文件,通过华为手机助手把整个解压缩的目录拷贝或上传到平板内部存储,可以放到下载目录或其它目录。
    5. 在Pad上打开文件管理应用,华为自带的,找到刚才拷贝的Google Apps (APK)文件。
    1. 逐个点击安装全部6个APK文件吧
    2. 在应用里搜索google,然后给这些应用足够的权限,这些都是Google的官方应用。
    3. 完成后,在华为MatePad Pro上打开恢复安装的LZPlay app,选择激活(Activate,会有个提示,然后回到主屏)
    1. 最后重启设备,登入你的Google账号,打开Play,安装一个谷歌地球,随便飞到一个地方look,look

    此方法应该适用大部分手机或平板设备,但未做测试。实测Wifi版8G+256G 华为MatePad Pro安装成功。

    by itgeeker.net

    另外安装好google应用后可以卸载LZPlay app,如果你认为现在它是多余的,那就卸载吧。之所以说比之前的方便,因为这次的方法不用在安装过程中去下载google的app,可以使用离线下载传输到手机,从而避免之前安装中下载经常失败的窘境。

    by itgeeker.net

    这部装置未通过Play安全防护认证的问题

    以上问题是博友提出在登陆Play商店时会有此提示错误,本人还未测试,之前已登录的还是可以正常使用。不知是否是Google实施了更严格的认证制度所引起的。

  • OpenWRT ChinaDNS配置

    OpenWRT ChinaDNS配置

    本文作为树莓派3B/3B+刷OpenWRT原生img 作为旁路由让全屋免配置上机场(二)的分支部分,填补ChinaDNS的配置说明。

    by itgeeker.net

    在技术奇客网站关于树莓派作为旁路由的方案中,Dnsmaq 接收来自局域网的 DNS 请求后直接转发给 ChinaDNS 处理;ChinaDNS通过上级服务器(Upstream Servers)进行DNS查询。

    ChinaDNS安装

    opkg update
    
    opkg install ChinaDNS
    opkg install luci-app-chinadns

    ChinaDNS启动

    /etc/init.d/chinadns start

    ChinaDNS原理及配置

    ChinaDNS 分国内 DNS 和国外DNS。ChinaDNS 会同时向国内 DNS 和国外的 DNS 发请求,如果国外的 DNS 先返回,则采用可信 DNS 的数据;如果国内 DNS 先返回,又分两种情况,返回的数据是国内的 IP, 则采用,否则丢弃并转而采用国外 DNS 的结果。


    所以ChinaDNS 需要配置至少两个上游 DNS,并且至少一个为国内 DNS,一个为国外 DNS;当 ChinaDNS 解析一个域名时,它会同时向这些 DNS 服务器发送解析请求,如果国内 DNS 返回的地址是国外的,则过滤掉这个结果,使用国外 DNS 返回的地址;做到智能解析。

    使用 chnroute 区分国内外IP地址


    我们可以通过建立国内 IP 路由表来区分,可以从网上获取文件并保存到/etc/chinadns_chnroute.txt

    wget -O /tmp/delegated-apnic-latest 'http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest' && awk -F\| '/CN\|ipv4/ { printf("%s/%d\n", $4, 32-log($5)/log(2)) }' /tmp/delegated-apnic-latest > /etc/chinadns_chnroute.txt

    编辑 crontab 任务计划,每周一凌晨 3 点更新 ,以便保持名单的更新:

    chinadns_chnroute.txtcrontab -e
    # 输入
    0 3 * * 1    wget http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest -O /tmp/delegated-apnic-latest && awk -F\| '/CN\|ipv4/ { printf("%s/%d\n", $4, 32-log($5)/log(2)) }' /tmp/delegated-apnic-latest > /etc/chinadns_chnroute.txt
    /etc/init.d/cron start
    /etc/init.d/cron enable
    # 验证 crontab 任务是否正确执行
    logread | grep crond

    另外一个备选的IP清单,孰好孰坏就自己选择了,ITGeeker只提供一个备选:

    cp /etc/chinadns_chnroute.txt /etc/chinadns_chnroute_apnic.txt
    wget --no-check-certificate https://raw.githubusercontent.com/17mon/china_ip_list/master/china_ip_list.txt -O /tmp/china_ip_list.txt && mv /tmp/china_ip_list.txt /etc/chinadns_chnroute.txt

    配置 ChinaDNS(参看插图)

    1. 勾选 Enable Bidirectional Filter
    2. 勾选Also filter results inside China from foreign DNS servers
    3. 将上游 DNS (Upstream Servers)修改为 202.96.209.133,127.0.0.1:5353。(前者用于解析国内域名,可选择自己当地最快的DNS服务器;后者为 ss-tunnel 提供的 DNS 端口转发或者DNSForwarder的端口 ,由远程服务器解析国外网站,ITGeeker的树莓派路由器建议使用DNSForwarder的端口,实测效果比ss-tunnel好) 
    4. 选择启用 ChinaDNS
奇客罗方公众号 奇客罗方小程序 奇客罗方客服 ITGeeker Telegram

网站由ITGeeker技术奇客开发并管理;隶属于GeekerCloud奇客罗方智能科技
Site designed and developed by ITGeekerwhich is a sub-website of GeekerCloud
网站地图 | 沪ICP备2021031434号-4