水文一篇,因爲家裏的網絡中有類似小米盒子,Apple TV這樣的設備,自身配置不是很好,鏈接效率會被降低,還不如在RPi 3B配置一個透明代理 我本來的設想是v2ray + iptables + dnsmasq,然後突然想到Clash自帶了一個簡單的DNS以及透明代理功能,再加上CoreDNS岂不是美滋滋?最后配合ROS指定的ip走透明代理,還要什麼自行車?
環境
需要準備的包,以apt为例
sudo apt-get install supervisor iptables-persistent net-tools curl wget vim -y
開啓轉發
echo "net.ipv6.conf.all.forwarding = 1" >> /etc/sysctl.conf && sysctl -p
Clash配置
隨便找一個目錄,cd進入 在Clash的Release頁面找到你需要的版本,
樹莓派3B的話是clash-linux-armv6
笔记本的话是amd64
我最終還是換成了Thinkpad X201t作爲網關
wget到本地,其實也可以下載到電腦再sftp上來,節約時間(github日常抽風) 如果電腦上已經有Clash,可以同時將Country.mmdb上傳,這樣clash就不需要重新下載了
gzip -d clash-linux-armv6-v0.15.0.gz
mv clash-linux-armv6-v0.15.0 clash-linux
chmod +x clash-linux
在該目錄下創建一個名爲config.yaml的配置文件
port: 8001
socks-port: 1081
redir-port: 9280
allow-lan: true
mode: Rule
log-level: info
external-controller: 127.0.0.1:9090
secret: ""
dns:
enable: true
ipv6: false
listen: 0.0.0.0:53
enhanced-mode: redir-host
nameserver:
- tls://dns.rubyfish.cn:853
fallback:
- tls://1.1.1.1:853
- tls://dns.google
Proxy:
# shadowsocks
- { name: "SS", type: ss, server: "地址", port: 端口, cipher: AEAD_CHACHA20_POLY1305, password: "密碼" }
# vmess
- { name: "HK", type: vmess, server: 地址, port: 端口, uuid: 你的uuid, alterId: 16, cipher: auto, network: ws, ws-path: ws目錄, tls: true, skip-cert-verify: true }
Proxy Group:
- { name: "Proxy", type: select, proxies: ["HK"] }
Rule:
# LAN
- DOMAIN-SUFFIX,local,DIRECT
- IP-CIDR,127.0.0.0/8,DIRECT
- IP-CIDR,172.16.0.0/12,DIRECT
- IP-CIDR,192.168.0.0/16,DIRECT
- IP-CIDR,10.0.0.0/8,DIRECT
- IP-CIDR,17.0.0.0/8,DIRECT
- IP-CIDR,100.64.0.0/10,DIRECT
# Final
- GEOIP,CN,DIRECT
- MATCH,Proxy
注意:
- 必須配置
redir-port
因爲你要做透明代理 - DNS那裏配置監聽和enhanced-mode
- 開啓Allow Lan並開放對應防火牆
我配置的dns都是支持DoT的DNS服務器,國內的選擇紅魚,國外選擇CF,具體Clash請求DNS原理請參考Github頁面
CoreDNS
参考文章 CoreDNS配置
CoreDNS需要开在高端口,或者修改iptables
请将上面的配置文件中的dns部分改为:
dns:
enable: true
ipv6: false
listen: 0.0.0.0:53
enhanced-mode: redir-host
nameserver:
- 127.0.0.1:你的Coredns端口
iPtables配置
我的本地網段是192.168.88.0/16
iptables -t nat -N Clash
//創建名爲Clash的規則
iptables -t nat -A Clash -d 192.168.88.0/16 -j RETURN
//不對本地進行代理
iptables -t nat -A Clash -p tcp -j REDIRECT --to-ports 9280
//這裏是你的redirport
iptables -t nat -A PREROUTING -p tcp -j Clash
然後netfilter-persistent save
持久化
之後你就可以愉快的開啓Clash了
./clash-linux -d .
沒有Country.MMDB會自動下載,沒有報錯的話就說明配置完成了
可以把設備的DNS和Gateway都改成樹莓派的ip測試一下
守護進程
Supervisor
新建一個supervisor配置
vim /etc/supervisor/conf.d/clash.conf
內容如下
[supervisord]
nodaemon=false
[program:clash]
priority=1
directory=clash所在的目錄
command=clash所在的目錄/clash-linux -d .
autorestart=true
PM2
官方推荐的进程管理器,十分的方便,安裝需要npm,天朝網路出口常年故障,能不能裝上隨緣
項目地址: [github.com/Unitech/pm2][https://github.com/Unitech/pm2]
//安裝pm2
npm install pm2 -g
如果沒有nodejs
wget -qO- https://getpm2.com/install.sh | bash
//啓動程序
pm2 start app.js
//查看正在運行的程序
pm2 list
//查看日誌
pm2 logs
ROS指定ip走透明代理
這部分的話參考RouterOS指定内网IP走指定接口 因爲不想改變現有的網絡結構,所以只讓指定的內網ip走樹莓派 在RouterOS中 IP - Firewall 中切換 Mangle 選項,添加一條新的規則 General 选项卡中,Chain 选择 prerouting ,Src.Address 寫小米盒子等需要代理的ip 如只需要特定协议通过指定接口就需要在protocol中选择对应的协议,全局则不选 Action 选项卡,在 Action 下拉菜单中选择 mark routing ,New Routing Mark 中填入该路由标记名称,Proxy_to_pi 如果多個設備的話,可以考慮配置個adress list,我暫時只有1個,就懶得啦 之後在IP - Routes配置路由,添加一條新的規則
但是我個人更加推薦全局應用,將dns和網關全部更改爲Clash的ip地址