分类: 树莓派Raspberry Pi

  • 树莓派刷原生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

  • 树莓派3B/3B+刷OpenWRT原生img 作为旁路由让全屋免配置上机场(二)

    树莓派3B/3B+刷OpenWRT原生img 作为旁路由让全屋免配置上机场(二)

    接上部分:树莓派3B/3B+刷OpenWRT原生img 作为旁路由让全屋免配置上机场(一)

    这部分是安装工具和应用部分,ITGeeker在不下于两套系统做了测试,该套方案全部可行。根据实践已完成技术奇客原创网络拓扑图设计v1:

    具体如何配置以后补上,估计会涉及一些敏感词汇,所以会尽量避开具体软件的名称。

    2020年4月20日 更新

    by itgeeker.net

    OpenWRT先更改一下国内镜像

    可以参看:OpenWRT如何使用国内镜像

    这对后面顺利安装组件及依赖包很重要。

    添加OpenWrt-dist源

    官方介绍在此: OpenWrt-dist 是专门针对OpenWRT的一个源,里面包含了很多已编译好的ipk文件,极大的方便了OpenWRT的用户。

    通过此源可以方便安装诸如以下组件:

    • opkg update
    • opkg install ChinaDNS
    • opkg install luci-app-chinadns
    • opkg install dns-forwarder
    • opkg install luci-app-dns-forwarder
    • opkg install shadowsocks-libev
    • opkg install luci-app-shadowsocks
    • opkg install simple-obfs
    • opkg install ShadowVPN
    • opkg install luci-app-shadowvpn

    OpenWRT获取设备架构命令:

    opkg print-architecture | awk '{print $2}'

    此处我们讨论的树莓派3B/3B+是同一个架构aarch64_cortex-a53,所以可以通过sed来添加对应的源:

    echo "src/gz openwrt_dist http://openwrt-dist.sourceforge.net/packages/base/aarch64_cortex-a53
    src/gz openwrt_dist_luci http://openwrt-dist.sourceforge.net/packages/luci" >> /etc/opkg/customfeeds.conf

    通过OpenWrt-dist安装代理相关组件

    opkg update
    
    opkg install ChinaDNS luci-app-chinadns dns-forwarder luci-app-dns-forwarder shadowsocks-libev luci-app-shadowsocks simple-obfs

    这里技术奇客ITGeeker同时安装了simple-obfs混淆插件,不过后面如果通过luci界面配置ss时添加obfs参数后无法正常启动ss,但是可以通过修改或添加新的服务启动ss命令,绕过luci界面配置可以实现正常启动。

    使用混淆是因为我的代理服务器支持obfs配置,而且工作的非常好。

    by itgeeker.net
    OpenWRT通过luci界面的services服务菜单配置组件出错的解决方案

    OpenWRT 19.07.2在通过luci的服务菜单配置组件,会抛出一堆错误,无法打开组件配置界面的问题,类似:

    Failed to execute cbi dispatcher target for entry '/admin/services/v2ray/global'.
    The called action terminated with an exception:
    /usr/lib/lua/luci/dispatcher.lua:938: module 'luci.cbi' not found:
    	no field package.preload['luci.cbi']
    	no file './luci/cbi.lua'
    	no file '/usr/share/lua/luci/cbi.lua'
    	no file '/usr/share/lua/luci/cbi/init.lua'
    	no file '/usr/lib/lua/luci/cbi.lua'
    	no file '/usr/lib/lua/luci/cbi/init.lua'
    	no file './luci/cbi.so'
    	no file '/usr/lib/lua/luci/cbi.so'
    	no file '/usr/lib/lua/loadall.so'
    	no file './luci.so'
    	no file '/usr/lib/lua/luci.so'
    	no file '/usr/lib/lua/loadall.so'

    可以通过安装以下组件予以解决:

    opkg install luci luci-base luci-compat

    可选和必选组件安装

    opkg install vsftpd openssh-sftp-server ipset libustream-mbedtls wget bind-dig ca-certificates iptables-mod-tproxy ip-full ca-bundle coreutils-base64 iptables-mod-nat-extra libpthread curl 

    这里包含了一些必须的组件,比如wget,https支持,ipset以及curl等后面必要的组件,也有一些可选的,比如fsftpd就是使用sftp软件,比如使用filezilla连接到树莓派就可以使用该服务。

    by itgeeker.net
    OpenWRT启动sftp服务
    /etc/init.d/vsftpd enable && /etc/init.d/vsftpd start

    重要的dnsmasq-full安装

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

    opkg remove dnsmasq && opkg install dnsmasq-full

    至此,技术奇客已完成了相关的组件及应用的安装,接下来会发布针对各个应用/服务组件的配置指导。

    by itgeeker.net

    ITGeeker这介绍一下关于拓扑图的逻辑思路:

    shadowsocks-libev包含 ss-local、ss-redir 和 ss-tunnel 三个组件。

    by itgeeker.net
    • ss-redir 负责将 OpenWrt 的 TCP/UDP 出口流量透明地转发至ss代理服务器;
    • ss-local 是本地 SOCKS5 代理服务器,可额外地为浏览器等客户端应用提供 SOCKS5 代理服务;
    • ss-tunnel 负责转发本地 DNS 请求至 ss-server,借由 ss-server 连接指定的境外 DNS 服务器。
    • Dnsmaq-full 是 OpenWrt 的系统级 DNS 转发服务器,本方案下 Dnsmaq 接收来自局域网的 DNS 请求后直接转发给 ChinaDNS 处理;
    • ChinaDNS 利用国内 DNS 和 ss-tunnel 链接的ss-server的DNS,可解决 DNS 污染问题;
    • dns-forwared和ss-tunnel 作用类似,但似乎比后者更好用些。

    OpenWRT代理配置方法:

    OpenWRT SS服务配置

    OpenWRT安装的SS使用luci界面设置参数比较少,建议分三个配置设置:

    ss-local -c /etc/shadowsocks_local.json -u -v
    ss-redir -c /etc/shadowsocks_redir.json -u -v
    ss-tunnel -c /etc/shadowsocks_tunnel.json -L 8.8.8.8:53 -u -v

    下面是ss-local的配置示例,可用上面的命令测试是否能成功连接,确定端口61080是否打开,ss-local和ss-tunnel配置类似,local_port一定不同。

    echo '{
      "server":"xxx.xxx.xxx",
      "local_address": "0.0.0.0",
      "local_port":61080,
      "server_port":9999,
      "password":"PPPpppPPP",
      "timeout":300,
      "method":"aes-256-gcm",
      "remarks": "Your-SS-Server",
      "plugin": "obfs-local",
      "plugin_opts": "obfs=tls",
      "plugin_args": "obfs=http;obfs-host=www.baidu.com;fast-open",
      "fast_open": true
    }' > /etc/shadowsocks_local.json
    cat /etc/shadowsocks_local.json

    添加ss openwrt启动脚本:

    echo "#!/bin/sh /etc/rc.common
    
    START=95
    
    SERVICE_USE_PID=1
    SERVICE_WRITE_PID=1
    SERVICE_DAEMONIZE=1
    SERVICE_PID_FILE=/var/run/ss_local.pid
    CONFIG=/etc/shadowsocks_obfs.json
    
    start() {
     # Proxy Mode
     service_start /usr/bin/ss-local -c /etc/shadowsocks_local.json -f /var/run/ss_local.pid
     service_start /usr/bin/ss-redir -c /etc/shadowsocks_redir.json -u -v -f /var/run/ss_redir.pid
     service_start /usr/bin/ss-tunnel -c /etc/shadowsocks_tunnel.json -L 8.8.8.8:53 -u -v -f /var/run/ss_tunnel.pid
    }
    
    stop() {
     # Proxy Mode
     service_stop /usr/bin/ss-local
     service_stop /usr/bin/ss-redir
     service_stop /usr/bin/ss-tunnel
    }" > /etc/init.d/ss
    cat /etc/init.d/ss
    ```
    chmod +x /etc/init.d/ss
    /etc/init.d/ss start
    /etc/init.d/ss enable
    
    killall ss-local
    killall ss-redir
    killall ss-tunnel
    killall ss-redir ss-local ss-tunnel

    OpenWRT DNS-Forwarder配置

    Listen Port         5353   #默认是5300

    Listen Address      0.0.0.0

    DNS Server          8.8.8.8

    OpenWRT dnsmasq-full配置

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

    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

    如果不是#5353,请修改为DNS-Forwarder的监听端口

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

    by itgeeker.net
    # 重启dnsmasq
    /etc/init.d/dnsmasq restart

    OpenWRT luci路由、防火墙ipset配置

     把dnsmasq中 ipset为 gfwlist的流量转发到ss-redir端口60800,命令行输入

    ipset -N gfwlist iphash
    iptables -t nat -A PREROUTING -p tcp -m set --match-set gfwlist dst -j REDIRECT --to-port 60800
    iptables -t nat -A OUTPUT -p tcp -m set --match-set gfwlist dst -j REDIRECT --to-port 60800
    ipset add gfwlist 8.8.8.8
    # 重启防火墙
    /etc/init.d/firewall reload

    把上面的iptables命令添加到OpenWrt 管理界面面 Network -> Firewall -> Custom Rules,以后就不用每次输入了。

    理论上到此配置就完成了,可以自由通过代理上网了,如果还不行:

    1. 试着把主路由Lan口的自定义DNS设为旁路由的ip地址例如:192.168.1.2;
    2. 检查旁路由的端口 netstat -nplt,看看是不是所有服务都起来了;
    3. 试着重启主路由和旁路由再试试;
    4. 重启电脑再试试;
    5. 手机使用谷歌Play前需断开wifi重连,油管不用;
    6. 比较好的测试方式是用手机的chrome浏览器打开https://twitter.com
    7. 检查ss-local的socks5是否连通:curl -x socks5://127.0.0.1:61080 google.com
    8. 找个懂的人问问吧

    虽然obfs混淆不被ss支持了,但使用起来还是没有问题的。不过最近服务器支持V2ray了,所以又用OpenWRT配置了V2ray的透明代理,或者说是网关,ITGeeker喜欢把它叫成旁路由,但是这有区别吗?

    by itgeeker.net

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

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

    by itgeeker.net
  • 树莓派3B/3B+刷OpenWRT原生img 作为旁路由让全屋免配置上机场(一)

    树莓派3B/3B+刷OpenWRT原生img 作为旁路由让全屋免配置上机场(一)

    ITGeeker之前有发表过树莓派刷第三方编译好了的OpenWRT作旁路由的方法,具体请参看: 刷了OpenWRT的路由器+旁路由配置方法+无缝漫游配置(树莓派3B/3B+/4B使用OpenWRT系统做旁路由)

    旁路由拓扑图 by itgeeker.net

    但是ITGeeker发现第三方img总有各种各样的问题:

    1. 过于臃肿,安装了太多不需要的服务。
    2. 通过opkg安装想用的应用会有各种依赖问题。
    3. 有些组件不好用的时候很难更改,比如给SS添加obfs-local混淆功能就很难做到。
    4. 可能会夹带一些私货你也很难察觉。
    5. OpenWRT19.07.2原生已经支持树莓派3B/3B。Raspberry Pi 4B也在路上了,目前已有无界面的snapshot版本发布。
    6. 其他各种问题。。。。。。

    OpenWRT安装部分

    OpenWRT最新版本已来到19.07.2,技术奇客认为一般到大版本的第二版就会比较稳定了。

    OpenWRT版本选择

    有两个地方都可以下载:

    1. Table of Hardware: Firmware downloads:https://openwrt.org/toh/views/toh_fwdownload?dataflt%5BBrand*%7E%5D=raspberry
    2. Index of (root) / releases / 19.07.2 / targets:https://downloads.openwrt.org/releases/19.07.2/targets/

    第一个可以根据产品品牌(brand)、型号(Model)、CPU等信息进行筛选,比较直观,而且筛选功能做的很完善。

    第二个只是根据CPU的型号和架构来选择,另外在对应的产品里面(packages目录)找可以到已经编译好的ipk进行直接下载。

    by itgeeker.net

    树莓派3B和3B+的CPU型号:brcm2708

    树莓派3B和3B+都是Broadcom的cpu,3B是BCM2837A0,3B+是BCM2837B0; Raspberry Pi 4B的cpu型号:Broadcom BCM2838. OpenWRT里对应型号是brcm2708

    树莓派3B、3B+和4B的Target是brcm2708

    树莓派3B和3B+的Subtarget都是bcm2710

    树莓派4B的Subtarget都是bcm2711

    by itgeeker.net

    树莓派3B和3B+的img路径

    Index of (root) / releases / 19.07.2 / targets / brcm2708 / bcm2710 /

    树莓派3B和3B+的img文件选择和区别

    基本上OpenWRT针对每个型号的产品都有4个文件:

    • rpi-3-ext4-factory.img.gz
    • rpi-3-ext4-sysupgrade.img.gz
    • rpi-3-squashfs-factory.img.gz
    • rpi-3-squashfs-sysupgrade.img.gz

    1. 带ext4的是可以利用Linux命令把你的tf卡空余空加拿回来做其他用途,毕竟img才几十M大小而已,一般现在的tf卡都要16G起了吧;这个下次再开一篇讲解;

    2. 带squashfs的相当于品牌路由器的rom,当你对自己安装的应用或配置不满意的时候,可以直接重置系统,就像回到初始状态一样;

    3. 带factory的是给之前不是用OpenWRT系统的用户初始刷tf卡用的;

    4. 带sysupgrade的是针对原先使用OpenWRT的用户,可以用cmd命令或者GUI界面直接升级用。

    by itgeeker.net

    树莓派3B和3B+刷OpenWRT

    首先:直接把tf卡插入电脑,可以使用以下软件的任何一种把OpenWRT文件写入:

    刷tf卡工具:
    • balenaEtcher
    • rufus
    • win32diskimager

    然后:把tf卡插入树莓派,把网线插入树莓派网口并和你使用的终端连接到同一局域网就行,原生的img初始默认是不开启wifi的,所以这是必须的。

    把你的终端,不管你使用pc、phone或者pad之类,需要把自己的ip地址手动设置到除了192.168.1.1之外的192.168.1.xxx

    打开浏览器输入:http://192.168.1.1 进入OpenWRT登录界面,初始密码为空,点击登录就可以开始密码设置,密码设置好之后,ssh就可以用相同密码进行登录。

    ssh root@192.168.1.1

    这个时候还需要设置一下市区time zone,默认是utc时间,应该选择Asia/Shanghai如果你在中国, 然后点击同步时间就可以了。

    下一篇开始介绍使用opkg安装常用工具及机场应用的安装及配置:

    树莓派3B/3B+刷OpenWRT原生img 作为旁路由让全屋免配置上机场(二)

  • Berryboot2.0多系统启动Raspbian 安装的Kodi18.6开启DLNA后仍无法找到设备

    Berryboot2.0多系统启动Raspbian 安装的Kodi18.6开启DLNA后仍无法找到设备

    Berryboot作为ARM设备的多系统启动器,可以为树莓派用户节约很多TF卡用量,从而减少大量的时间用于更换TF卡。特别是由于TF卡太小,无法为其贴上标签,有时非常难于管理和保存。

    Berryboot除了支持多系统启动,还可以把系统安装到USB移动盘或者NAS上面,技术奇客认为它为树莓派爱好者提供了诸多的方便。三者存储介质分别为:

    • datadev=iscsi
    • datadev=sda1
    • datadev=mmcblk0p2

    第一个是NAS安装的介质,第二个为USB盘,最后一个代表是TF看,当然具体代码可能有所不同。

    Berryboot2.0使用键盘鼠标安装

    Berryboot2.0官方连接: https://www.berryterminal.com/doku.php/berryboot

    下载的文件很小,安装也非常方便,直接把文件拷贝到FAT/FAT32格式的TF卡,然后插入树莓派启动就可以了。然后根据图形界面直接操作就好了,非常简单和方便。

    Berryboot2.0使用VNC远程安装

    可编辑刚才拷贝的文件中的cmdline.txt文件,添加vncinstall ipv4=192.168.88.88/255.255.255.0/192.168.88.1,ip地址根据你的实际情况填写。cmdline.txt文件完整内容示例:

    elevator=deadline quiet bootmenutimeout=10 fstype=btrfs datadev=iscsi vncinstall ipv4=192.168.88.22/255.255.255.0/192.168.88.1

    如果是通过WIFI连接,可以改为:

    vncinstall ipv4=192.168.88.23/255.255.255.0/192.168.88.1/wlan0

    然后在刚才的根目录添加wpa_supplicant.conf文件:

    country=CN
    ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
    ap_scan=1
    
    update_config=1
    network={
    	ssid="ITGeeker-WIFI-5G"
    	psk="itgeeker-wifi-password"
    }

    ssid和密码根据您的实际情况填写

    by itgeeker.net

    在启动树莓派之前,先启动本机的VNC客户端,可以使用RealVNC(https://www.realvnc.com/)的客户端,添加刚才的IP地址后就可以点击连接,然后把TF卡插入并启动树莓派,VNC客户端会自动连接到Berryboot的图形启动界面。

    这样你就可以不用鼠标和键盘,也不需要给树莓派连接显示器就可以安装系统了。

    具体怎么安装在这一章就不详细讨论了,可以有很多种方法:

    1. 可以直接通过官方的下载支持的系统,下载并安装一步到位,就是选择面少一些。
    2. 可以通过官方的sourceforge下载https://sourceforge.net/projects/berryboot/files/os_images/,有时官方直接下载会卡壳,这个包含更多的老版本系统。
    3. 自己把正在使用的系统转换成Berryboot支持的img文件,官方有具体步骤,一般系统有两个分区,基本原理是把他们合并成一个分区以兼容Berryboot.
    4. 从之前备份的地方恢复系统,这是树莓派最方便的系统备份和恢复方式了,有点相当于Ghost时期的整盘备份。
    5. 克隆已经安装的系统,并可重命名系统显示的名称,以便用于安装不同的应用。
    6. 其它方式。。。。。。
    Berryboot screenshot

    Kodi18.6开启DLNA后仍无法找到设备

    标题的关键问题,ITGeeker一开始以为是Berryboot的问题会导致Kodi的某些功能不可用。例如Berryboot会导致树莓派的sudo rpi-update命令无法更新树莓派firmware.

    后来才发现如果你在上面配置VNC控制时设置的ip地址很有可能和之前该设备在路由器上分配的地址不一致引起的,验证方式你会发现可以用上面设置的192.168.88.22登录ssh,也可以用路由器分配的地址,例如192.168.88.123来登录,从而导致DLNA服务失败。

    DLNA解决方案:
    • 更改上面的ip地址和路由器分配的ip地址一致。
    • 路由器上绑定mac地址的ip地址和上面设置的ip一致。

    此二法可任选其一。

  • 女儿的抗疫项目第二弹 基于Scratch3.0的新冠肺炎知识游戏

    女儿的抗疫项目第二弹 基于Scratch3.0的新冠肺炎知识游戏

    是基于畅学编程( https://class.istemedu.com/ )网页版Scratch3.0来完成的,如果你有树莓派安装了Raspbian Full Desk版本,也可以用自带的Scratch3.0来打开。

    女儿基本上比较独立的完成了编程的过程,查找图片及素材的下载等等。当然有些方面还是给予了一些指导,比如如何去除图片的背景,还有配音默认是wav格式太大无法保存,需要压缩成mp3,甚至需要降低音质来满足游戏背景音乐的需要等,噢,还有一点点的录音。

    让我们来欣赏一下小宝贝的杰作吧!

    (基于b站的iframe嵌入)

    来点截图预览一下吧

    (基于Youtube的iframe嵌入) https://youtu.be/lBNEMitMqR4

  • 树莓派如何安装最新版Kodi 18.6 及树莓派4B针对Kodi的优化

    树莓派如何安装最新版Kodi 18.6 及树莓派4B针对Kodi的优化

    树莓派版本:4B - 4G版
    系统: Raspbian Buster with desktop full version

    如果你的树莓派正在吃灰,那么可以把它们接到你的客厅,或者卧室的电视机,装个Kodi把它变成媒体中心,可以有效的成为你的机顶盒的补充。技术奇客因此已经很少使用ChromeCast和Apple TV了。

    最近(2020年3月)Kodi 18.6已经发布,但是官方针对树莓派的编译版本还是停留在17.3,如果无所谓版本的话,可以直接安装:

    sudo apt-get update
    sudo apt-get install kodi
    
    2.1 Raspbian (Current Version - 17.3)
    来自官方Wiki: https://kodi.wiki/view/HOW-TO:Install_Kodi_on_Raspberry_Pi
    Kodi OpenSource:https://github.com/PIPplware/xbmc
    Kodi Wiki: https://kodi.wiki/view/Main_Page

    树莓派如何安装Kodi最新版18.6

    开源的好处在于官方没有的,总有民间的爱好者可以提供。 Pplware就为我们提供了Kodi的树莓派编译的最新版18,更新速度无法和官方同时,但一般半个月到一个月左右就可以提供新版本更新,例如从18.5到18.6的更新今天就提供了。我们可以通过它提供的源来安装:

    sudo curl -sSL http://pipplware.pplware.pt/pipplware/key.asc | apt-key add -
    sudo echo 'deb http://pipplware.pplware.pt/pipplware/dists/buster/main/binary /' > /etc/apt/sources.list.d/kodi.list
    sudo apt update
    sudo apt install kodi

    在国内下载有点慢,主要deb文件大概20M左右,有时可能需要30-60分钟,但有时非常快。但如果单独下载deb文件,技术奇客试了没有成功,哪怕使用apt –fix-broken install来修复依赖问题也没有成功。

    by itgeeker.net

    Kodi Systemd自动启动配置

    需要配置自动启动,可以添加Systemd配置文件如下:

    sudo tee -a /lib/systemd/system/kodi.service <<_EOF_
    [Unit]
    Description = Kodi Media Center
    After = remote-fs.target network-online.target
    Wants = network-online.target
    
    [Service]
    User = pi
    Group = pi
    Type = simple
    ExecStart = /usr/bin/kodi-standalone
    Restart = on-abort
    RestartSec = 5
    
    [Install]
    WantedBy = multi-user.target
    _EOF_
    
    sudo systemctl start kodi.service
    sudo systemctl restart kodi.service
    sudo systemctl enable kodi.service
    sudo systemctl status kodi.service
    sudo systemctl stop kodi.service

    Kodi插件命令行安装

    可以继续用命令行安装Koid的插件,例如播放M3U格式的电视节目就需要插件iptvsimple,安装方法:

    sudo apt install kodi-pvr-iptvsimple

    当然可以安装更多,只要你知道插件的名称就可以:

    sudo apt install kodi-pvr-iptvsimple kodi-audioencoder-vorbis kodi-audioencoder-flac kodi-audioencoder-lame kodi-peripheral-joystick kodi-inputstream-adaptive kodi-inputstream-rtmp kodi-pvr-hts kodi-vfs-libarchive kodi-vfs-nfs kodi-vfs-sftp libaudio2

    这一段不要全部安装,很多的IPTV插件你都用不着。

    by itgeeker.net

    Kodi日志(Log)查询

    如果有错误,看log是最直接的,所以可以tail一下

    tail -f -n 55 /home/pi/.kodi/temp/kodi.log

    Kodi彻底卸载

    如果不想用了,或者需要重装kodi那么

    sudo rm /etc/apt/sources.list.d/kodi.list
    sudo apt-get remove kodi*
    sudo apt-get purge kodi*
    apt autoremove --purge
    rm -r ~/.kodi/

    树莓派4B优化

    • Kodi需要的GPU内存最少需要160M,可以通过一下方式调整树莓派GPU设置:”raspi-config” -> “Advanced Options” -> “Memory Split” -> 160.
    • Kodi 18在树莓派4B上可以支持4K h265/HEVC 10bit视频文件。即使你使用的是4K的显示器, Kodi也会自动限制GUI为1080p, 你可以在Kodi的设置里调整 -> Settings -> System -> Limit GUI size
    • 如果想设置为60Hz的刷新率,在树莓派命令行运行raspi-config -> Advanced Options -> Pi 4 Video Output -> Enable 4Kp60 HDMI 
    • 或者在配置文件/boot/config.txt添加如下配置:hdmi_enable_4kp60=1

    技术奇客即使把树莓派设置到2K的分辨率,屏幕还是会经常闪,Kodi调到4K几乎是太慢了。但是设置为1920×1680运行顺畅,效果也不错。

    如果你要使用4K显示,一定要注意散热,否则容易烧焦你的树莓派,树莓派4B无法支持两个微型HDMI接口同时输出4Kp60.

    by itgeeker.net

    Kodi作为媒体中心的后续配置计划

    在之后的blog技术奇客会继续分享家里有两台树莓派,如何通过群辉NAS同步Kodi的媒体库及配置。

奇客罗方公众号 奇客罗方小程序 奇客罗方客服 ITGeeker Telegram

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