樹莓派跑分流代理
最近好像和各種代理槓上了,抽空把sing-box的文檔看了看,加上各種視頻教學,自己摸索倒騰了一番。
sing-box是個通用代理平臺,很強大,入站和出站支持的協議很多,用起來很方便。
本文記錄我的個人使用方式,或許對部分讀者有用,可能部分描述不夠專業,絕對實用,歡迎讀者關注公衆號留言交流。
因爲有一個閒置多年的樹莓派2(Raspberry Pi 2 Model B),查了一下額定功率 3.0 瓦 (5V/600mA),很適合用來做小網關 + dnsmasq域名緩存。網關能代理,也能屏蔽部分廣告。
先畫個網絡架構圖,方便讀者理解。
和常見的家庭網絡一樣。只是在家用路由器上多接入了一個樹莓派。其它設備的網關和dns服務器都設置爲樹莓派的ip地址。
下面爲操作步驟:
1. 樹莓派安裝官方系統
本來這一步沒什麼可寫的,網上有很多教程教你怎麼給樹莓派刷官方系統。好多年沒有給樹莓派刷系統了,發現官方出了個叫Raspberry Pi Imager的小工具,很好用(記得以前都是用dd命令刷),能省點事。
先選你的樹莓派型號,再選你要安裝的操作系統鏡像(這一步如果你網絡卡的話,可以選自定義鏡像,就選你電腦裏下載好的鏡像),再選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,再更改的,不然鏈接無法建立,有線的話,直接設定沒有這種問題。
dns先設置的樹莓派ip,再設置路由器ip,雙保險,應該是優先使用樹莓派ip
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
,默認測試頁面正常返回。
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測試
再訪問域名測試:
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服務器來玩,手機等設備上也不用裝額外軟件。
版權申明:
- 未標註來源的內容皆為原創,未經授權請勿轉載(因轉載後排版往往錯亂、內容不可控、無法持續更新等);
- 非營利為目的,演繹本博客任何內容,請以'原文出處'或者'參考鏈接'等方式給出本站相關網頁地址(方便讀者)。
相關文章:
- 解決Linux下網絡配置無法變更保存的問題
- labwc環境啓用wlogout
- Atuin ZFS下卡頓問題解決
- Wine安裝64位微信
- 如何修復Waybar微信圖標錯誤
- 信封加密簡要
- Linux環境下維護公衆號記錄
- Wayland環境自動切換壁紙
- SuperTuxKart 試玩
- 爲什麼你的kill命令不能列出信號表