Raspberry Pi家用案例——其他篇

前言

开一个新坑,讲讲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就可以看在线视频了,而树莓派的其他配置也要开始了。

下一期我们来讲讲文件共享。

Leave a Reply

Your email address will not be published. Required fields are marked *