分类
OpenWRT 树莓派Raspberry

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

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
分类
OpenWRT

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
分类
OpenWRT

OpenWRT如何使用国内镜像

OpenWRT的安装命令opkg,使用opkg install来安装还是非常方便的。

opkg查询组件的2个常用命令

opkg list | grep -i samba

opkg list-installed | grep usb

OpenWRT使用list可以查询源里可选的组件有哪些?

OpenWRT使用list-installed可以查询已安装的组件有哪些?

by itgeeker.net

解决OpenWRT下载太慢的问题

OpenWRT官方网站推荐的其他镜像:https://openwrt.org/downloads#mirrors

其实里面没有中国境内的,但国内清华大学和中科院的镜像用起来都是没有问题的:

  1. https://mirrors.ustc.edu.cn/lede/ 
  2. https://mirrors.tuna.tsinghua.edu.cn/openwrt/ 

清华的还有一个是:https://mirrors.tuna.tsinghua.edu.cn/lede 其实和openwrt结尾一样的,因为之前openwrt就叫openwrt,后来改了叫lede,现在又改回去叫lede了。

修改文件 /etc/opkg/distfeeds.conf   

主要替换掉官方下载域名downloads.openwrt.org

#先备份原始的
cp /etc/opkg/distfeeds.conf /etc/opkg/distfeeds.conf.bk
#然后直接用sed替换
sed -i 's_downloads\.openwrt\.org_mirrors.tuna.tsinghua.edu.cn/openwrt_' /etc/opkg/distfeeds.confcat /etc/opkg/distfeeds.conf
#然后更新
opkg update

OpenWRT升级所有组件命令

opkg list-upgradable | cut -f 1 -d ' ' | xargs opkg upgrade

如果OpenWRT没有发现可升级的组件,这条命令会抛出一段错误信息,不用管它,说明都已经是最新版本了。

by itgeeker.net

OpenWRT恢复原始源

sed -i 's_mirrors\.tuna\.edu\.cn_downloads.openwrt.org_' /etc/opkg/distfeeds.conf

或者也可以直接把刚才的备份文件覆盖回来更方便

cp -f /etc/opkg/distfeeds.conf.bk /etc/opkg/distfeeds.conf
分类
OpenWRT 树莓派Raspberry

树莓派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
分类
OpenWRT 树莓派Raspberry

树莓派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 作为旁路由让全屋免配置上机场(二)

分类
OpenWRT 树莓派Raspberry

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

2020年3月10日 增加树莓派配置旁路由网络拓扑图

2020年3月10日 增加多个房间的路由器配置,可实现无缝漫游,也就是有线中继

by itgeeker.net

技术奇客ITGeeker配置了两套主路由+旁路由方案,并且配置了无缝漫游的方案。

主路由旁路由
Linksys WRT1200AC, Raspberry 3B
Netgear WNDR4300 Raspberry 3B+
华为路由WS5200 四核版主卧
小米路由器3(R3)儿童房

OpenWRT img采用的是 https://mlapp.cn/369.html 的第八版,作者在该页面的介绍非常详细,编译的OpenWRT可同时适用Raspberry 3B及3B+,甚至尝试性支持了Raspberry 4B。最新的版本是 20191007 日常跟进更新(第八版) ,请大家多多支持该作者。

如果去官方下载最新版OpenWRT18.06.4,Raspberry 3B可以正常运行,但是Raspberry 3B+不管用snapshots还是其它版本,官方的还没有成功过。

具体刷机和配置,请查看该作者的详细介绍,这里不重复了。

该链接介绍的是Raspberry做软路由的方法,ITGeeker技术奇客这次介绍的是旁路由设置,所以在“网口设置”部分不要配置和添加wan口啦!

旁路由和软路由配置的区别

技术奇客ITGeeker的Netgear WNDR4300和Linksys WRT1200AC都刷了OpenWRT官方的18.06.4,如果是官方的rom其实也没关系,尽管Linksys官方rom设置非常简单,甚至无法设置自己的网关(据说挺多官方路由器都不让设置网关),也不影响旁路由设置。一开始ITGeeker也是看到网上说的要主旁要互设网关,实践结果其实不需要的。

主路由设置

  1. 假设ip地址为192.168.1.1
  2. 进入网络-接口-LAN,关闭DHCP(不关可能也可以,旁路由设置强制也行),英文 Ignore interface
  3. 在IPv6设置里禁止IPv6的前三个选项
  4. 不需要设置网关Gateway和自定义DNS

旁路由设置

  1. 同样进入 进入网络-接口-LAN,选择固定网址,ip地址配置为何主路由同一地址段例如:192.168.1.2(如果不是同一地址段,自行配置子网掩码)
  2. 网关Gateway为主路由ip地址:192.168.1.1
  3. 自定义dns服务器:114.114.114.114 换行添加:202.96.209.133或者使用你当地最快的公共DNS
  4. 开启DHCP,高级设置里面开启强制选项。即使检测到另一台服务器,也要强制使用此网络上的DHCP
  5. 同样,禁止IPv6, 在IPv6设置里禁止IPv6的前三个选项

建议重启主和旁路由,重启电脑,然后查看网络连接,看看自动获取的网关和DNS是否都为旁路由ip地址: 192.168.1.2

技术奇客提醒

如果有酸酸乳服务器,在旁路由配置并启用后,在服务-酸酸乳-状态里可以测试是否可以连接谷歌和百度,然后直接打开网站看看是否设置成功了。

问题

ITGeeker有发现网络时而有断续的问题,发生在Raspberry 3B+做旁路由的时候,不知道是否OpenWRT对Raspberry 3B+支持不好的问题。

后来ITGeeker把Raspberry 3B+的LAN口桥接关闭并把无线关闭后似乎好多了。

好处

  • 可以突破主路由的CPU和RAM的限制,油管可以看更高清的视频,速度也更快,酸酸乳的本质就是加密算法。
  • Raspberry Pi 3作为软路由的话,自带的WIFI太弱,加个无线网卡又要破费,作为旁路由仍然可以使用主路由的无线功能。

无缝漫游配置

原本家里一个路由器也凑合着用,谁知在首批买了华为智慧屏之后,华为送了一个路由器WS5200 四核版,加上手里还有一个几年前买的小米路由器3(R3),干脆每个房间都放一个,然后全部通过树莓派旁路由实现网络自由访问,也无需为WIFI的信号强弱而担忧了。还能实现华为路由器的HiLink功能。

由于我的两个房间都布有网线,所以我的设置主要是“有线桥接“网络有线连接路由器并配置固定IP及固定网关(也就是旁路由树莓派的网关)

无缝漫游时切换的速度取决于您的设备对WIFI型号的灵敏度,我的iPad切换就比较慢,甚至信号很弱网都不大能连得上了也不会切换,但是华为Mate30 Pro自动切换强信号网络就顺利的多了。这个方案比买品牌的漫游路由套件便宜了许多!WIFI的名称也不是一个,而是每个路由器都要独自设定,所以无缝漫游的描述未必很准确。

by itgeeker.net
主卧配置-华为路由器WS5200 四核版

华为路由器配置固定IP地址和固定网关需要在电脑端打开路由器配置页面 http://192.168.3.1 ,手机端不支持上网方式配置。

先不要连接网线到华为路由器WS5200四核版,否则无法配置路由器IP地址和上级路由器在同一网段。

by itgeeker.net

进入我要上网页面再修改为桥接方式。选择上网方式为桥接(Bridge),点击保存。

点击更多功能 > 网络设置 > 局域网。在路由器局域网 IP 地址中输入 IP 地址192.168.1.3,网关为旁路由IP地址192.168.1.2,关闭“DHCP服务器”开关 ,点击保存。再次登录 Web 配置界面的时候,您需要输入修改后的 IP 地址 http://192.168.1.3

如果选择桥接后无法配置网关的话,可以选择上网方式为“手动输入IP”试试看。

配置好之后插入主路由过来的网线到WAN口,华为路由器WS5200四核版支持网口盲插,不一定非要把网线插入WAN口,任意网卡即可。

by itgeeker.net

最后一步配置华为路由器WS5200四核版的WIFI名称和密码,用手机连接进行测试。

儿童房配置-小米路由器3(R3)

小米R3路由器升级到新版固件,采用有线中继的配置会简单的多。

首先把主路由的网线插入小米路由器的WAN。

在浏览器中输入 192.168.31.1 或者 miwifi.com 打开登录界面——>输入“管理密码”,登录到小米路由器的设置页面。

“常用设置”——>“上网设置”,然后在页面最下方找到“工作模式切换”选项,点击:切换

在弹出的页面中,找到、选择“有线中继工作模式(扩展现有的网络)”——>点击“下一步”,再 下一步” , 点击“确定”,完成设置。

配置好之后,小米会自动获取IP地址,并且网关为旁路由IP地址192.168.1.2。

小米路由器完成有线中继模式设置后,无法用192.168.31.1 或者 miwifi.com来管理小米路由器了,需要使用上面最后一步页面中提示的IP地址192.168.1.xxx。由于这里的上一级的路由器(旁路由器)不是小米这个牌子的,最后一步页面中提示的IP地址是根据DHCP自动分配的,如果想使用固定的IP地址,可以在旁路由里面使用小米路由器3(R3)的MAC地址绑定IP地址192.168.1.5

by itgeeker.net

最后一步配置小米路由器3(R3)的WIFI名称和密码,用手机连接进行测试。