Clash on LAN/linux/Dockers
导言
在国内的linux服务器上,往往需要clash来代理访问github等外网资源。
有几种解决方案:
- 透明代理
- ssh 转发实现代理,类似
ssh -fNgR 7333:127.0.0.1:7890 [email protected]
- Clash 的 Allow LAN功能
- Clash in Docker
- Clash in Linux
Clash的模式¶
- 系统代理模式:只代理
127.0.0.1:7890
上的数据 - TUN代理模式:虚拟网卡,并接管所有的网络层的数据
- 无法封装网络层数据包,无法代理ping, fake-ip还会返回假ip
- TUN与TAP是操作系统内核中的虚拟网络设备:
- TAP等同于一个以太网设备,它操作第二层数据包如以太网数据帧。
- TUN模拟了网络层设备,操作第三层数据包比如IP数据包。
- 舍弃的redir-host模式由于必须返回一个真实ip,因此必需发起dns请求,存在dns泄露
- 默认的fake-ip会对域名的DNS请求返回fake-ip,从而避免DNS泄露。然后根据域名分流将信包发送到对应的上游代理机器,把域名DNS解析工作留给上游机器。
- fake-ip模式,将fake-ip-filter设置为
+.*
便等价于redir-host模式
- fake-ip模式,将fake-ip-filter设置为
Clash的配置文件¶
# RESTful web API listening address
external-controller: 127.0.0.1:9090
# DNS server settings
# This section is optional. When not present, the DNS server will be disabled.
dns:
enable: false
listen: 0.0.0.0:53
ipv6: false # when the false, response to AAAA questions will be empty
# These nameservers are used to resolve the DNS nameserver hostnames below.
# 默认只支持ip
default-nameserver:
- 8.8.8.8
# 对于下面的域名,fake-ip模式会返回真实ip
fake-ip-filter:
- '*.lan'
- localhost.ptlogin2.qq.com
# 支持 UDP, TCP, DoT, DoH. 和指定端口
# 所有DNS请求都会不经过代理被转发到这些服务器,Clash会选择一个最快的返回结果
nameserver:
- https://223.5.5.5/dns-query # 阿里云
- https://doh.pub/dns-query #腾讯云
- tls://dns.rubyfish.cn:853 # DNS over TLS
- https://1.1.1.1/dns-query # DNS over HTTPS
- dhcp://en0 # dns from dhcp
# 对于所有DNS请求,fallback和nameserver内的服务器都会同时查找
# 如果DNS结果为非国内IP(GEOIP country is not `CN`),会使用fallback内的服务器的结果
# 因为nameserver内为国内服务器,对国外域名可能有DNS污染。fallback内是国外服务器,能防止国外域名被DNS污染
fallback:
- https://162.159.36.1/dns-query
- https://dns.google/dns-query
- tls://8.8.8.8:853
# DNS污染攻击的对策
fallback-filter:
geoip: false # If geoip is true, when geoip matches geoip-code, clash will use nameserver results. Otherwise, Clash will only use fallback results.
# geoip-code: CN
ipcidr: # IPs in these subnets will be considered polluted, when nameserver results match these ip, clash will use fallback results.
- 0.0.0.0/8
- 10.0.0.0/8
- 100.64.0.0/10
- 127.0.0.0/8
- 169.254.0.0/16
- 172.16.0.0/12
- 192.0.0.0/24
- 192.0.2.0/24
- 192.88.99.0/24
- 192.168.0.0/16
- 198.18.0.0/15
- 198.51.100.0/24
- 203.0.113.0/24
- 224.0.0.0/4
- 240.0.0.0/4
- 255.255.255.255/32
domain: #Domains in these list will be considered polluted, when lookup these domains, clash will use fallback results.
- +.google.com
- +.facebook.com
- +.youtube.com
- +.githubusercontent.com
Clash use Allow LAN¶
假如服务器和笔记本在LAN下,笔记本的clash软件只需要打开LAN就可以给服务器代理了,是最简单方便的方式。
Clash in Docker¶
由于UGREEN NAS一直开机,作为代理节点很适合。
首先注意修改代理机场的文件config.yaml
的0.0.0.0:9090
,以便haishanh/yacd
使用。
mixed-port: 7890
allow-lan: true
bind-address: '*'
mode: rule
log-level: info
external-controller: '0.0.0.0:9090'
- 使用
dreamacro/clash
1 - UI使用
haishanh/yacd
Clash in Linux¶
下载¶
下载可执行文件
wget https://github.com/Dreamacro/clash/releases/download/v1.11.8/clash-linux-amd64-v1.11.8.gz
scp
gunzip clash-linux-amd64-v1.11.8.gz
chmod u+x clash-linux-amd64-v1.11.8
- Clash 运行时需要
Country.mmdb
文件,Country.mmdb
文件利用GeoIP2
服务能识别互联网用户的地点位置,以供规则分流时使用。 - 当第一次启动 Clash 时(使用
./clash
命令) 会自动下载(会下载至/home/XXX/.config/clash
文件夹下)。自动下载可能会因网络原因较慢,可以访问该链接手动下载。
配置¶
根据订阅链接配置文件
验证¶
成功结果
# shaojiemike @ node6 in ~/Download [10:22:54] C:130
$set_proxy
# shaojiemike @ node6 in ~/Download [10:22:57]
$ curl -v www.google.com
# shaojiemike @ node6 in ~/Download [10:21:46]
$ ./clash-linux-amd64-v1.11.8
INFO[0000] Start initial compatible provider 🍃 Proxies
INFO[0000] Start initial compatible provider ☁️ Others
INFO[0000] Start initial compatible provider 🍂 Domestic
INFO[0000] Start initial compatible provider ⭐️ Auto
INFO[0000] Mixed(http+socks) proxy listening at: [::]:7890
INFO[0000] RESTful API listening at: [::]:9090
INFO[0000] DNS server listening at: [::]:5323
INFO[0070] [TCP] 127.0.0.1:52664 --> www.google.com:80 match DomainKeyword(google) using 🍃 Proxies[专线 日本 03]
图形化界面管理¶
http://clash.razord.top/#/proxies
输入
查看config.yaml
,发现是空
mixed-port: 7890
allow-lan: true
mode: rule
log-level: info
external-controller: '0.0.0.0:9090'
secret: ''
常见问题¶
address already in use
# shaojiemike @ node6 in ~/Download [10:14:25]
$ ./clash-linux-amd64-v1.11.8
INFO[0000] Start initial compatible provider ⭐️ Auto
INFO[0000] Start initial compatible provider 🍃 Proxies
INFO[0000] Start initial compatible provider ☁️ Others
INFO[0000] Start initial compatible provider 🍂 Domestic
INFO[0000] RESTful API listening at: [::]:9090
INFO[0000] Mixed(http+socks) proxy listening at: [::]:7890
ERRO[0000] Start DNS server error: listen udp 0.0.0.0:5353: bind: address already in use
修改配置文件里的端口即可
参考文献¶
https://blog.iswiftai.com/posts/clash-linux/
https://einverne.github.io/post/2021/03/linux-use-clash.html