树莓派跑分流代理

最近好像和各种代理杠上了,抽空把sing-box的文档看了看,加上各种视频教学,自己摸索倒腾了一番。

sing-box是个通用代理平台,很强大,入站和出站支持的协议很多,用起来很方便。

本文记录我的个人使用方式,或许对部分读者有用,可能部分描述不够专业,绝对实用,欢迎读者关注公众号留言交流。

因为有一个闲置多年的树莓派2(Raspberry Pi 2 Model B),查了一下额定功率 3.0 瓦 (5V/600mA),很适合用来做小网关 + dnsmasq域名缓存。网关能代理,也能屏蔽部分广告。

先画个网络架构图,方便读者理解。

architecture diagram

和常见的家庭网络一样。只是在家用路由器上多接入了一个树莓派。其它设备的网关和dns服务器都设置为树莓派的ip地址。

下面为操作步骤:

1. 树莓派安装官方系统

本来这一步没什么可写的,网上有很多教程教你怎么给树莓派刷官方系统。好多年没有给树莓派刷系统了,发现官方出了个叫Raspberry Pi Imager的小工具,很好用(记得以前都是用dd命令刷),能省点事。

pi imager

先选你的树莓派型号,再选你要安装的操作系统镜像(这一步如果你网络卡的话,可以选自定义镜像,就选你电脑里下载好的镜像),再选sd卡,点Next后可以设置hostname,用户密码、开启ssh、自动导入key密钥什么的。

我选的最简镜像,400多M,毕竟不需要桌面,也不需要过多功能。

这个小工具真的可以说是个贴心小管家,看文字描述就知道怎么用,装好后,拔掉sd卡,插入树莓派卡槽就好了。

仔细想想,这的确降低了操作门槛,方便好用。选存储的时候,记得确认选中的是sd卡,不然把系统给格杀了,那可麻烦大啦。

2. 树莓派上配置dnsmasq

ssh登陆树莓派,题外话,如果你不知道树莓派分得的ip(比如说路由器不受管控的环境),可以使用抓包软件wireshark抓arp广播包,或者挨个ping和你电脑ip差不多的ip😂,运气好能很快找到。

一般路由器挂载的设备不多的话,ip不怎么变,当然也可以设置固定ip。

查看基本信息,debian系,armv7l的cpu,已经切换好交大的源(选个离自己近的源,速度快)。

 1mephisto@raspberrypi:~ $ cat /etc/os-release
 2PRETTY_NAME="Raspbian GNU/Linux 12 (bookworm)"
 3NAME="Raspbian GNU/Linux"
 4VERSION_ID="12"
 5VERSION="12 (bookworm)"
 6VERSION_CODENAME=bookworm
 7ID=raspbian
 8ID_LIKE=debian
 9HOME_URL="http://www.raspbian.org/"
10SUPPORT_URL="http://www.raspbian.org/RaspbianForums"
11BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"
12mephisto@raspberrypi:~ $ uname -a
13Linux raspberrypi 6.6.28+rpt-rpi-v7 #1 SMP Raspbian 1:6.6.28-1+rpt1 (2024-04-22) armv7l GNU/Linux
14mephisto@raspberrypi:~ $ cat /etc/apt/sources.list
15#org
16#deb [ arch=armhf ] http://raspbian.raspberrypi.com/raspbian/ bookworm main contrib non-free rpi
17# Uncomment line below then 'apt-get update' to enable 'apt-get source'
18#deb-src http://raspbian.raspberrypi.com/raspbian/ bookworm main contrib non-free rpi
19
20#ustc
21# deb http://mirrors.ustc.edu.cn/raspberrypi/debian/ bookworm main
22#deb-src http://mirrors.ustc.edu.cn/raspberrypi/debian/ bookworm main
23
24#sjtu
25deb http://mirrors.sjtug.sjtu.edu.cn/raspbian/raspbian/ bookworm main contrib non-free rpi
26mephisto@raspberrypi:~ $

安装 dnsmasq,适合在小网络场景使用,主要用来缓存域名,添加自定义域名,结合NetworkManager使用的。

1sudo apt install dnsmasq

配置dnsmasq,请参考这个arch文档: https://wiki.archlinux.org/title/NetworkManager#dnsmasq

 1mephisto@raspberrypi:~ $ cd /etc/NetworkManager/
 2mephisto@raspberrypi:/etc/NetworkManager $ ls
 3NetworkManager.conf  conf.d  dispatcher.d  dnsmasq-shared.d  dnsmasq.d  system-connections
 4mephisto@raspberrypi:/etc/NetworkManager $ cat conf.d/dns.conf
 5[main]
 6dns=dnsmasq
 7mephisto@raspberrypi:/etc/NetworkManager $ cat dnsmasq.d/
 8cache.conf   listen.conf
 9mephisto@raspberrypi:/etc/NetworkManager $ cat dnsmasq.d/cache.conf
10server=223.5.5.5   # 域名服务器阿里的
11cache-size=1000    # 缓存1000条dns记录,还是一定内存大小的dns记录,有兴趣的自己去翻dnsmasq源码确认。
12strict-order       # 不重要,看dnsmasq文档
13address=/www.example.com/ 192.168.18.190    # 自己定义域名,因为我在树莓派傻姑娘跑lighttpd托管pac,也用来验证dnsmasq是否配置正确。
14mephisto@raspberrypi:/etc/NetworkManager $ cat dnsmasq.d/listen.conf
15listen-address=::1,127.0.0.1,192.168.18.190  # dns服务监听的的网卡,53端口 
16mephisto@raspberrypi:/etc/NetworkManager $

具体设置如上所示,dns=dnsmasq 意思是启用NetworkManager的dns部分由dnsmasq接管。

注意!这种使用方式不用开机启动dnsmasq,NetworkManager会帮你搞定。

1mephisto@raspberrypi:/etc/NetworkManager $ systemctl is-enabled dnsmasq
2disabled
3mephisto@raspberrypi:/etc/NetworkManager $ ps -ef | grep NetworkManager
4root       508     1  0 Apr27 ?        00:00:10 /usr/sbin/NetworkManager --no-daemon
5nobody    1524   508  0 Apr27 ?        00:00:46 /usr/sbin/dnsmasq --no-resolv --keep-in-foreground --no-hosts --bind-interfaces --pid-file=/run/NetworkManager/dnsmasq.pid --listen-address=127.0.0.1 --cache-size=400 --clear-on-reload --conf-file=/dev/null --proxy-dnssec --enable-dbus=org.freedesktop.NetworkManager.dnsmasq --conf-dir=/etc/NetworkManager/dnsmasq.d
6mephisto 17990 17355 50 14:29 pts/0    00:00:00 grep --color=auto NetworkManager
7mephisto@raspberrypi:/etc/NetworkManager $

3. 树莓派上配置sing-box客户端

先开ip_forward

1mephisto@raspberrypi:~ $ cat /etc/sysctl.conf |grep ip_forward
2net.ipv4.ip_forward=1
3mephisto@raspberrypi:~ $ sysctl -p
4sysctl: permission denied on key "net.ipv4.ip_forward"
5mephisto@raspberrypi:~ $ sysctl net.ipv4.ip_forward
6net.ipv4.ip_forward = 1

安装sing-box

1sudo curl -fsSL https://sing-box.app/gpg.key -o /etc/apt/keyrings/sagernet.asc
2sudo chmod a+r /etc/apt/keyrings/sagernet.asc
3echo "deb [arch=`dpkg --print-architecture` signed-by=/etc/apt/keyrings/sagernet.asc] https://deb.sagernet.org/ * *" | \
4  sudo tee /etc/apt/sources.list.d/sagernet.list > /dev/null
5sudo apt-get update
6sudo apt-get install sing-box

为了方便理解sing-box客户端,我建议不怕麻烦的读者,先看下官方文档,毕竟软件一直在更新,配置也会变动。理解配置项后,可以自己写规则。

或者去各大视频网站看视频,视频有的也讲得不清楚,或者过时导致误解。

客户端配置:

 1
 2mephisto@raspberrypi:/etc/sing-box $ cat config.json
 3{
 4  "dns": {
 5    "servers": [
 6      {
 7        "tag": "cf",
 8        "address": "https://1.1.1.1/dns-query"
 9      },
10      {
11        "tag": "local",
12        "address": "223.5.5.5",
13        "detour": "direct"
14      },
15      {
16        "tag": "block",
17        "address": "rcode://success"
18      }
19    ],
20    "rules": [
21      {
22        "outbound": "any",
23        "server": "local"
24      },
25      {
26        "geosite": "cn",
27        "server": "local"
28      }
29    ],
30    "strategy": "ipv4_only"
31  },
32  "inbounds": [
33    {
34      "type": "tun",    # tun模式,树莓派上最终会多一个tun虚拟网卡。
35      "stack": "system",
36      "inet4_address": "172.19.0.1/30",
37      "auto_route": true,
38      "strict_route": true,
39      "sniff": true
40    }
41  ],
42  "outbounds": [
43    {
44      "type": "hysteria2",
45      "tag": "proxy",
46      "server": "stock.mephisto.cc", # 填你的域名
47      "server_port": 443,
48      "up_mbps": 20,
49      "down_mbps": 100,
50      "password": "your_password",   # 密码
51      "tls": {
52        "enabled": true,
53        "server_name": "stock.mephisto.cc", # 证书域名
54        "insecure": true            # 如果帧数校验不通过,就开启,我的情况就是说我证书过期,估计是服务端证书没有刷新,浏览器访问正常的。
55      }
56    },
57    {
58      "type": "direct",
59      "tag": "direct"
60    },
61    {
62      "type": "block",
63      "tag": "block"
64    },
65    {
66      "type": "dns",
67      "tag": "dns-out"
68    }
69  ],
70  "route": {
71    "rules": [
72      {
73        "protocol": "dns",
74        "outbound": "dns-out"
75      },
76      {
77        "geosite": "cn",
78        "geoip": [
79          "private",
80          "cn"
81        ],
82        "outbound": "direct"
83      }
84    ],
85    "auto_detect_interface": true
86  }
87}

本来我参考的配置里面还有广告屏蔽功能,自己去掉了,毕竟自己开小站,对广告不是很反感。有兴趣的读者自己可以去网上搜索相关配置。

4. 电脑上配置网关和dns

这一步,网上教程千千万,截个图凑合下😂

网关,我是先自动dhcp连 Wi-Fi,再更改的,不然链接无法建立,有线的话,直接设定没有这种问题。

gateway

dns先设置的树莓派ip,再设置路由器ip,双保险,应该是优先使用树莓派ip

dns

5. 测试验证

选择在Mac上测试,其它设备都差不多。

测试域名缓存,我没有确认这个到底sing-box还是dnsmasq缓存的。

1mephisto@RMBP ~> dig omg.com | grep "Query time"
2;; Query time: 716 msec
3mephisto@RMBP ~> dig omg.com | grep "Query time"
4;; Query time: 49 msec

反正效果达到了,懒得区分了。716ms --> 49ms,下降了一个数量级。如果是你电脑本地的dnsmasq缓存,通常是0ms。

测试自定义域名,直接访问 lighttpd 的默认域名 www.example.com,默认测试页面正常返回。

lighttpd

dig 确认,也是ok的。

 1mephisto@RMBP ~> dig www.example.com
 2
 3; <<>> DiG 9.10.6 <<>> www.example.com
 4;; global options: +cmd
 5;; Got answer:
 6;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10055
 7;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
 8
 9;; OPT PSEUDOSECTION:
10; EDNS: version: 0, flags:; udp: 4096
11;; QUESTION SECTION:
12;www.example.com.               IN      A
13
14;; ANSWER SECTION:
15www.example.com.        0       IN      A       192.168.18.190
16
17;; Query time: 108 msec
18;; SERVER: 192.168.18.190#53(192.168.18.190)
19;; WHEN: Sun Apr 28 15:24:03 CST 2024
20;; MSG SIZE  rcvd: 60

以上可以确认树莓派上的dnsmasq正常工作。

接下来确认分流代理功能,ip测试

china ip

japan ip

再访问域名测试:

 1mephisto@RMBP ~> curl baidu.com
 2<html>
 3<meta http-equiv="refresh" content="0;url=http://www.baidu.com/">
 4</html>
 5mephisto@RMBP ~> curl google.com
 6<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
 7<TITLE>301 Moved</TITLE></HEAD><BODY>
 8<H1>301 Moved</H1>
 9The document has moved
10<A HREF="http://www.google.com/">here</A>.
11</BODY></HTML>
12mephisto@RMBP ~>

可见sing-box功能正常,个人觉得还挺好用的,树莓派比一般的路由器性能强,还能当作一个Linux服务器来玩,手机等设备上也不用装额外软件。

最后修改于: Sunday, April 28, 2024
欢迎关注微信公众号,留言交流。

相关文章:

翻译: