前言
开一个新坑,讲讲Raspberry Pi在家庭场景中的一些常见应用。
整个系列的主旨是在尽可能简化的环境和配置中实现这些应用,同时尽可能保证性能,并在一定程度上保证可靠性。内容一般不会涉及基础的命令和操作。
那么第一篇文章就要来解决一下联网的问题。
材料准备
配置文件
首先我们要准备一个支持Clash订阅的服务商。用任何一个桌面上的clash客户端把配置文件打开备用。
软件包
这里我们使用闭源的Clash Premium,可以得到相对完整的功能。在这里搞一个适合你的设备的包。我用的是64bit版本的Raspbian,可以用armv8的包,如果是一般版本的 Raspbian 直接用armv7就可以。
开工
让飞机跑起来
把下载下来的二进制文件重命名,直接扔进/usr/bin/之后赋权。
在一个你喜欢的地方做一个配置文件config.yaml:
#下面一段是基础配置配置 #服务端口随你喜欢,混合端口比http、socks分开配置简单,也可以避免引入没必要的端口监听 mixed-port: xxxx #当然允许,迟早要用到 allow-lan: true #可以定义你要监听的interface,但是clash的interface控制非常弱,不支持复杂的策略,不建议在这里限制 #bind-address: '*' #bind-address: 192.168.6.253 #bind-address: 127.0.0.1 mode: Rule log-level: info #外部控制器的监听设置,由于原版的clash不具备任何管理UI,后续要通过外部webui进行管理 external-controller: 0.0.0.0:xxxx experimental: ignore-resolve-fail: true interface-name: eth0 #下面是一段直接把提供商配置文件proxies:后面的部分全部贴进来 #内容略
网关模式
我们知道,Apple TV没有提供代理设置选项,我们必须要让clash允许在网关模式,接管设备流量。
clash现在支持网关模式,但是文档全都糟透了,有的语焉不详,有的混乱杂糅。传统的方式涉及到ip route、ip rule、iptables的配置,是一个我就算看得懂也不想做的配置。
后来clash新增了一个基于TUN的网关模式,配置只需要非常简单的几步。
第一步,启用IP转发sudo echo "net.ipv4.ip_forward" > /etc/sysctl.conf
第二步,clash配置文件加点内容:
tun: #启用TUN enable: true stack: system #配置DNS劫持,有文档建议用更可靠的DNS,实际上用国内的也可以 dns-hijack: - 114.114.114.114:53 dns: #启用内置DNS服务器 enable: true #禁用IPv6支持 ipv6: false listen: 0.0.0.0:53 #在这里使用fake-ip模式可以简化配置。 enhanced-mode: fake-ip nameserver: - 114.114.114.114 - 8.8.8.8
自启动
如果你和我一样是一个懒人,直接在root的crontab里加一条@reboot clash -d "配置文件路
径”就好了,这东西一般不会挂。
如果你是一个讲究人,自己写一个systemd服务就好了,这么勤快的人肯定会。
使用代理
对于Raspberry Pi本身来说,想使用这个代理,可以直接运行sudo raspi-config
,在里面配置代理,或者直接创建配置文件/etc/profile.d/proxy.sh
,加入下面几句:
export all_proxy='socks5h://127.0.0.1:[mixed-port]' export http_proxy='socks5h://127.0.0.1:[mixed-port]' export https_proxy='socks5h://127.0.0.1:[mixed-port]'
对于其他设备,直接静态IP,把网关和DNS都指向树莓派就可以。
一些说明
IPv6去哪了
看得出来,配置没有为IPv6做准备。原因是我没有在任何地方找到clash在完整运行网关模式时的 IPv6 配置文档,甚至连拼凑一个配置都做不到。
DNS增强模式
clash支持 fake-ip 和redir-host两种模式。
fake-ip模式下,不管终端请求哪个域名,clash都会把utun的地址198.18.0.1/16返回给终端,终端将去往198.18.0.1/16丢给网关,也就是树莓派的物理网卡地址,数据进到树莓派后依靠内核的IP转发丢给utun,clash就可以处理后续的分流工作,是一种0配置的方案。
redir-host模式下,clash会返回真实的IP地址,终端把请求丢给树莓派的物理网卡后,系统并不天然了解这些包要丢给utun,所以需要用到ip route、ip rule、iptables这些东西做一堆策略来引流。这是clash官方文档中推荐配合utun的模式,但我非常不推荐。
代理协议的选择
代理协议有几种选择:
http协议支持范围最广,几乎所有支持配置代理的软件都支持这个协议。http协议运行在应用层,先对于后面会提到socks代理,连接开销会大一些。由于http具备完善的加密能力,可以轻易对流量进行加密,形成https代理。
socks5协议运行在会话层,相对于http代理,连接开销更小。socks全系列协议都是毫无加密手段的,完全谈不上传输安全性,只适合在非常可控的网络环境中使用。
socks5h协议在socks5的基础上增加的远程dns解析,dns请求会直接通过socks5h连接送去代理服务器进行解析,可以面对更复杂的代理需求。
注意,并不是所有软件都支持socks类型代理,当我们把socks5h设置为树莓派的系统代理,要随时注意软件兼容性,比如aria2是没有socks支持的,python需要安装单独的包。
预告
完成了代理的配置,Apple TV就可以看在线视频了,而树莓派的其他配置也要开始了。
下一期我们来讲讲文件共享。
您好, 请问您使用的是什么系统?
raspberry pi官方的raspbian