樹莓派跑分流代理

最近好像和各種代理槓上了,抽空把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

相關文章:

翻譯: