Archlinx-DNS分流方案
Archlinx-DNS分流方案
最近闲着无聊,突发奇想,研究了一下DNS国内外分流方案,查看了些其他人的方案和资料,最终确定了对应的方案
DNS分流方安案
通过SmartDNS查看国内DNS信息
通过Clash查看国外DNS信息
通过dnsmasq-china-list规则分流国内外流量
通过unbound整合对应信息,提供最终的DNS服务
环境准备
安装Clash
#创建clash部署目录
mkdir -p /home/youname/tools/clash
#下载Clash到指定目录
wget https://github.com/Dreamacro/clash/releases/download/v1.10.6/clash-linux-amd64-v3-v1.10.6.gz -O /home/youname/tools/clash/clash-linux.gz
#解压并赋予执行权限
gzip -d /home/younams/tools/clash/cnix/clash-linux.gz && chmod +x /home/youname/tools/clash/cnix/clash-linux
创建Clash的==systemd==配置文件
/usr/lib/systemd/system/clash.service
[Unit]
Description=Clash daemon, A rule-based proxy in Go.
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/bash /home/weilin/tools/clash/start.sh
ExecReload=/usr/bin/bash /home/weilin/tools/clash/start.sh
ExecStop=/bin/kill -SIGTERM $MAINPID
#Restart=on-failure
User=weilin
Group=weilin
[Install]
WantedBy=multi-user.target
配置Clash服务,并查看服务状态
sudo systemctl daemon-reload
sudo systemctl --now enable clash
sudo systemctl status clash
配置订阅
因为在用的机场本身就有提供clash订阅的功能,我是直接下载订阅文件,对文件进行修改,达到我的要求。
创建clash基础配置信息
port: 7890
socks-port: 7891
redir-port: 7892
allow-lan: true
mode: Rule
log-level: silent
external-controller: '0.0.0.0:9090'
secret: ''
dns:
enable: true
listen: 127.0.0.1:53006
enhanced-mode: redir-host # redir-host or fake-ip
# fake-ip-range: 198.18.0.1/16 # Fake IP addresses pool CIDR
use-hosts: true # lookup hosts and return IP record
nameserver:
- 119.29.29.29 # DNSpod DNS 17ms
- 223.5.5.5 # 阿里 19ms
# 提供 fallback 时,如果GEOIP非 CN 中国时使用 fallback 解析
fallback:
- tls://8.8.8.8:853 # Google DNS over TLS 50ms
- tls://8.8.4.4:853 # cloudflare DNS over TLS 50ms
- https://1.1.1.1/dns-query # cloudflare DNS over HTTPS
- https://dns.google/dns-query # Google DNS over HTTPS
# 强制DNS解析使用`fallback`配置
fallback-filter:
# true: CN使用nameserver解析,非CN使用fallback
geoip: true
# geoip设置为false时有效: 不匹配`ipcidr`地址时会使用`nameserver`结果,匹配`ipcidr`地址时使用`fallback`结果。
ipcidr:
- 240.0.0.0/4
- 127.0.0.1/8
- 0.0.0.0/32
domain:
- +.google.com
- +.facebook.com
- +.twitter.com
- +.youtube.com
- +.xn--ngstr-lra8j.com
- +.google.cn
- +.googleapis.cn
- +.googleapis.com
- +.gvt1.com
创建订阅更新脚本
#!/bin/bash
echo `date "+%Y-%m-%d %H:%M:%S"` >> /data1/scripts/update_clash/log/update.log
echo "start update clash" >> /data1/scripts/update_clash/log/update.log
SOURCE_CNIX_URL=订阅链接
wget $SOURCE_CNIX_URL -O "/data1/scripts/update_clash/cninx/config.yaml"
sed -i '1,14d' /data1/scripts/update_clash/cninx/config.yaml
cat /data1/scripts/update_clash/cninx/dns.yaml /data1/scripts/update_clash/cninx/config.yaml > /home/weilin/tools/clash/cnix/config.yaml
echo "success" >> /data1/scripts/update_clash/log/update.log
等我后面研究一下怎么通过定时器进行定时更新,目前使用的是==crontab==进行更新
测试代理
执行更新脚本
/data1/scripts/update_clash/update_clash.sh重启服务
systemctl restart clash登录web界面
配置DNS
配置==systemd-resolved==服务
[Resolve]
DNS=127.0.0.1
Domains=~.
[Resolve]
[Resolve]
DNSStubListener=no
[Resolve]
FallbackDNS=223.5.5.5#dns.alidns.com 1.1.1.1#cloudflare-dns.com 8.8.8.8#dns.google
配置==SmartDNS==
备份文件
sudo mv smartdns.conf smartdns.conf.default配置文件
# 修改 dns 监听地址
bind [127.0.0.1]:5380
bind [::1]:5380
#域名结果缓存个数
cache-size 1024
# 启用dns缓存持久化
cache-persist yes
# 开启dns缓存
cache-size 4096
# 设置dns持久化文件名(把它放在内存里,重启就消失,问题不大,主要是为了避免重启smartdns服务后的冷启动)
cache-file /tmp/smartdns.cache
# prefetch domain,预解析域名,会导致dns包的数量极大程度增加,原理就是提前查询dns,看网页的时候有一点加速
# prefetch-domain [yes|no]
prefetch-domain yes
#日志文件
log-file /var/log/smartdns.log
log-size 10M
log-num 10
#最小 TTL 值
rr-ttl-min 900
#过期缓存服务功能
serve-expired yes
# 添加上游 dns 服务器
server 1.1.1.1
server 223.5.5.5
server 223.6.6.6
server 8.8.8.8
server 119.29.29.29
server 182.254.116.116
server 114.114.114.119
server 114.114.114.114
::: tip 备注
设置dns监听地址和添加上游dns一定要,官方文档建议上游dns服务器不要超过10个,其它一些设置都是玄学科学优化
:::
配置unbound
创建 /etc/default/unbound 配置文件
# /etc/default/unbound # 这个默认会修改 /etc/resolv.conf 文件,设成 false 禁用掉 RESOLVCONF="false" ROOT_TRUST_ANCHOR_UPDATE="false"修改 unbound 配置文件
# /etc/unbound/unbound.conf server: verbosity: 2 num-threads: 4 interface: 127.0.0.1 port: 53 do-ip4: yes do-udp: yes do-tcp: no # 关掉上游 dns 才能使用本地 dns 服务 do-not-query-localhost: no access-control: 0.0.0.0/0 allow include: "/etc/unbound/unbound.conf.d/*.conf" forward-zone: name: "." forward-addr: 127.0.0.1@53006添加 unbound 到开机自动启
sudo systemctl --now enable unbound.service==dnsmasq-china-list==配置
克隆dnsmasq-china-list 项目
git clone https://github.com/felixonmars/dnsmasq-china-list.git --depth 1创建 unbound 配置文件
cd dnsmasq-china-list make SERVER=127.0.0.1@5380 unbound删除 /etc/unbound/unbound.conf.d/ 下默认配置文件后拷贝 dnsmasq-china-list 下创建的 unbound 配置文件该目录下
rm -f /etc/unbound/unbound.conf.d/* cp *unbound.conf /etc/unbound/unbound.conf.d/重启 unbound 服务
systemctl restart unbound
::: tip 参考文献
使用 clash 搭建透明网关实现旁路科学上网自由
Archlinux国内外dns分流方案
:::
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 运维小林
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果