惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

SecWiki News
SecWiki News
I
InfoQ
The Cloudflare Blog
人人都是产品经理
人人都是产品经理
博客园 - Franky
T
Tailwind CSS Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
量子位
博客园_首页
罗磊的独立博客
V
V2EX
李成银的技术随笔
大猫的无限游戏
大猫的无限游戏
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
True Tiger Recordings
Vercel News
Vercel News
Cyberwarzone
Cyberwarzone
Cisco Talos Blog
Cisco Talos Blog
F
Fox-IT International blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
M
Microsoft Research Blog - Microsoft Research
Know Your Adversary
Know Your Adversary
爱范儿
爱范儿
The Register - Security
The Register - Security
G
Google Developers Blog
The Hacker News
The Hacker News
Malwarebytes
Malwarebytes
S
Securelist
博客园 - 三生石上(FineUI控件)
Jina AI
Jina AI
T
Threat Research - Cisco Blogs
T
The Exploit Database - CXSecurity.com
S
SegmentFault 最新的问题
博客园 - 叶小钗
F
Fortinet All Blogs
Apple Machine Learning Research
Apple Machine Learning Research
宝玉的分享
宝玉的分享
博客园 - 聂微东
T
Threatpost
博客园 - 【当耐特】
D
Docker
P
Privacy & Cybersecurity Law Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
G
GRAHAM CLULEY
V
Visual Studio Blog
C
Cisco Blogs
IT之家
IT之家
S
Security Archives - TechRepublic
Latest news
Latest news
阮一峰的网络日志
阮一峰的网络日志

Razeen`s Blog

Let's Encrypt 推出 Gen Y 根证书架构:揭示 Web PKI 的五大未来趋势 通过 Wi-Fi 自动备份你的 iPhone 到 Nas 管理培训感悟:从技术视角看管理之路 UPS 一拖多:保护你的 NAS 和 Linux 服务器 从影音中心到 AI 助手:我的50款 Homelab 服务清单 从SSL证书有效期将缩短到47天聊开去 部署一个自己的 Running Page 谈谈特斯拉 Model Y 用车一年的感受和费用分析 弃用 Disqus 评论,使用自建 Waline 使用 Prometheus 和 Grafana 搭建你的证书监控面板 服务器迁移记:一次磁盘换板引发的Linux分区与挂载的学习 改善信息来源, 利用 RSS 高效获取资讯 (RSShub + Reeder5 + WeWe RSS) 多种 Docker 镜像拉取解决方案与实践 App分享 | AppCleaner - Mac上的卸载神器 Azure OpenAI API 申请和使用 如何开通 OneKey 虚拟信用卡,并充值消费 如何拥有一个可长期在国内使用的国外手机号码 分享开通 ChatGPT Plus 过程 如何开通 Depay 虚拟信用卡,并充值消费 如何开通欧易Web3钱包, 交易入账 如何5分钟内1块钱注册 ChatGPT 科学上网 如何注册美区的 Apple ID (2023年/无需科学上网) NAS折腾记(11): NASTool3.0体验和降级 NAS折腾记(10): Docker版本的NASTool配置 NAS折腾记(9): NASTool与微信交互,微信发送消息远程下载电影【多图】 NAS折腾记(8):群晖安装 NASTool 实现影音半自动化【多图】 内网穿透(2):Tailscale 组网实现内网穿透,操作简单,无成本 内网穿透(1):总结了11中内网穿透的方式,总有一种适合你 NAS折腾记(7):从零开始设置(黑)群晖系统 NAS折腾记(6):黑群晖系统安装好后怎么洗白? NAS折腾记(5):群晖硬盘休眠设置与分析 NAS折腾记(4): 20分钟手把手带你完美安装 DS918+ 黑群晖7.1.1 NAS折腾记(3):NAS 装机 NAS折腾记(2):B360-ITX 双M.2 双2.5G网口 6 SATA主版 开箱 NAS折腾记(1):328元的4盘位Nas机箱开箱 Newifi3 刷入 OpenWrt 固件 v21.02 利用 Markdown 画一些流程图、时序图、甘特图等 Homelab(8): 搭建自用 Gitlab 与 Docker 仓库 Nginx Tcp 转发保留客户端真实 IP (PROXY Protocol) Homelab (7):IPSec VPN(基于证书认证)客户端设置 Homelab (6): 基于自签发证书的 IPSec VPN 搭建 Homelab (5): DDNS 动态域名解析 Homelab (4): Linux 服务器基础环境准备 Homelab (3): 整体网络与基础硬件介绍 Go学习笔记(十)老项目迁移 go module 大型灾难记录 Github Actions 初体验之自动化部署 Hexo 博客 记一次 Nginx DNS 缓存导致转发问题 Homelab (2): 电信悦me网关修改桥接模式,路由器拨号 Homelab (1):5分钟上手黑群晖 NAS 终极 Bash 脚本指南 Typora 自动上传图片到七牛云 Ubuntu 20.04 LTS 有线网卡驱动安装 折腾 Ubuntu 20.04 LTS 开发环境 Go学习笔记(九) 计时器的生命周期[译] 利用 git hook 规范你的代码与 commit message 规范 git commit message 与自动化版本控制 超详细 vim 配置 (with MacVim) Golang 中的 RESTful API 最佳实践 折腾服务器(开篇) 我的第一台个人服务器 Newifi3 实现低成本家庭级科学上网 Go学习笔记(八) | 使用 os/exec 执行命令 如何用 Go 调用 Windows API Mac OS 自动根据 WI-FI 名字改变网络位置 关于 Docker 清理 MIME Types 速查表 Go学习笔记(七) | 理解OAuth 2.0并实现一个客户端 我又又又把博客迁移了 Go学习笔记(六) | 使用swaggo自动生成Restful API文档 Go学习笔记(五) | 使用代码片段(snippets)提高编码效率 书单 - 2018 IPFS 初体验,利用 IPFS 托管你的静态网站 记一次 PostgreSQL LIKE 索引优化,联合字段 LIKE 查询优化。 Disqus 添加有趣的 Reactions 的功能 TLS 1.3 详解 (RFC 8446解读) gRPC在Go中的使用(三)gRPC实现TLS加密通信与流模式 gRPC在Go中的使用(二)gRPC实现简单通讯 gRPC在Go中的使用(一)Protocol Buffers语法与相关使用 CentOS 安装 tshark 抓包工具 Go学习笔记(四) | win上使用VSCode搭建Go开发环境 日常 Postgres 数据库点滴记录 简单了解 PKCS 规范 美食篇 | DIY戚风蛋糕(烤箱做蛋糕) Go学习笔记(三) | 怎么写Go基准测试(性能测试) TLS1.3正式更新,为Nginx添加TLS1.3的支持 一次诡异的数据库删除 GitHub Pages自定义域名开启HTTPS 证书透明度是什么?它是怎么工作的? Go学习笔记(二) | 我对 recover 的一点误解 搭建证书透明度(certificate-transparency)日志服务之从入门到放弃 修复远程登陆 Centos 时,出现 UTF-8 Warning HTTPS篇之SSL握手过程详解 Go学习笔记(一) | postgres与golang点点滴滴 AWS 命令行界面(aws-cli)从安装到快速上手 数字证书分类及怎么区分各类数字证书 常用 linux 命令小结(一)文件目录操作 云服务器搭建 hexo 博客,git hooks自动更新 SSH 免密登陆, SSH Config 配置 Golang CGO Mac 交叉编译 Windows 使用 goose 让数据库迁移更加轻松
Openwrt + Clash 全局科学上网
2022-08-11 · via Razeen`s Blog

最近把 Newifi3 D2 的系统折腾安装上了 OpenWrt, 这篇文章记录我在 OpenWrt 上折腾 Clash 全局科学上网的过程。

科学上网思路

在折腾前,我们先想好怎么做。整体思路不外乎利用透明代理,代理海外流量,国内流量直连接。但其中还要解决一个 DNS 污染的问题。找了一些文章,看了一些视频,最后总结思路如下:

  1. 利用 dnsmasq + 国内域名名单 将国内 DNS 解析直接走国内的 DNS 服务器,直接连接,实现加速访问;
  2. 不在国内域名名单的 DNS 解析走 dnscrypt-proxy2 进行解析,结合 iptables 将流量代理到 clash, clash 来判断是否直接连接还是经过代理服务器。

下面是简单的时序图,只画了主要过程。

sequenceDiagram
    客户端->>dnsmasq: 客户端 DNS 解析
    Note right of dnsmasq: 检查域名是否在国内名单中
    dnsmasq->>dnsmasq: 国内的使用国内 DNS 解析 <br/> 并加入 ipset(chinalist)
    dnsmasq->>dnscrypt-proxy2: 非国内名单中 <br/> 交给 dnscrypt-proxy2 解析
    dnscrypt-proxy2 ->> dnsmasq: 返回 IP
    dnsmasq->>客户端: 返回 IP
    客户端->>iptables: 客户端 tcp 请求到达 iptables
    iptables->>iptables: 检查 ip 是否是否在国内名单(chinalist)中  <br/> 国内的直接通过
    iptables->>clash: 不在国内名单的转发

其中我们用到了:

  • dnsmasq-full: 主要就是提供 DNS 和 DHCP 服务,可配置性强,上面我们国内名单就是配置在这里的,而且 DNS 解析后,利用 ipset 将 IP 更新到 chinalist 中;
  • ipset: 一个可以操作 IP 集合的工具,我们国内IP名单就是用它动态生成的;
  • dnscrypt-proxy2: 一个强大的DNS代理工具,支持一些新的 DNS 协议, 如 DNSCrypt v2, DNS-over-HTTPS, Anonymized DNSCryptODoH (Oblivious DoH)。 我们这里用它主要是防止海外域名的 DNS 污染;
  • iptables:linux 上强大的包处理包转发软件,我们用几条规则将国内的节点直连,其他节点走 clash。

准备梯子

要科学上网,你必须有一个梯子,可以自己弄个海外的服务器搭建一个,或者直接购买现场的服务。推荐购买现在的服务,节点多,不怕封==。 可以直接 Google, 有很多推荐的文章,自己比较下,选择合适的购买。给个参考,我买的这个shadowsocks 50刀三年,90多节点,100G流量每月,我17年开始用的,还算比较稳定,除了一些特殊的时期。

下载安装

首先,我们要下载或者自己编译 clash。 直接下载地址。选择路由器对应的版本,Newifi3 D2 选择 clash-linux-mipsle-softfloat 版本。

上传到路由器。

scp clash-linux-mipsle-softfloat-v1.11.4.gz root@192.168.100.1:/tmp/

ssh 到路由器上解压,赋予执行权限。 路由器的 ssh 密码就是页面登录的密码。

ssh root@192.168.100.1

gzip -d /tmp/clash-linux-mipsle-softfloat-v1.11.4.gz
mv /tmp/clash-linux-mipsle-softfloat-v1.11.4 /bin/clash
chmod +x /bin/clash

配置

主要准备三个文件:

  • 配置文件 config.yaml

Github上有完整的配置说明。我这里给出我的配置参考。后面将用到下面两个端口。

# http proxy 端口
port: 7890
# 透明代理端口
redir-port: 7892

放到 /etc/clash/ 目录下。

  • 地理数据库 Country.mmdb [可选]

启动的时候,如果没有这个库 Clash 也会自动去下载,如果你和我一样,从 Github 下载很慢,可以先下载好,上传上去。 这里是下载地址

Clash 依赖 Country.mmdb 数据来判断流量是直达还是走代理。

这个也放到 /etc/clash/ 目录下。

  • service 脚本

我希望 Clash 是以 service 运行的,方便管理。 写了一个服务脚本如下:

#!/bin/sh /etc/rc.common
START=90
USE_PROCD=1

start_service() {
        procd_open_instance
        procd_set_param command /bin/clash -d /etc/clash
        procd_set_param respawn 300 0 5 # threshold, timeout, retry
        procd_set_param file /etc/clash/config.yml
        procd_set_param stdout 1
        procd_set_param stderr 1
        procd_set_param pidfile /var/run/clash.pid
        procd_close_instance
}

这个放到 /etc/init.d/ 目录下。

启动 Clash

配置文件和服务都放好位置后,我们就可以启动 Clash 了。

chmod +x /etc/init.d/clash

# 启动 并设置开机自启动
service clash start
service clash enable

可以用 logread 查看日志, 看看是否正常启动。

logread -e clash -f

这样 Clash 就配置好了,透明代理和HTTP代理都可以使用了。

安装 dnsmasq-full、dnscrypt-proxy2

接下来我们需要 ssh 到路由器上操作了。

# 登陆路由器
ssh root@192.168.1.1

# update 一下
opkg update

# 卸载原来的 dnsmasq 安装 dnsmasq-full
opkg remove dnsmasq && opkg install dnsmasq-full

#  安装 dnscrypt-proxy2 和其他一些基础工具包
opkg install curl ipset dnscrypt-proxy2 ca-certificates coreutils-base64

配置 dnscrypt-proxy2

vim /etc/dnscrypt-proxy2/dnscrypt-proxy.toml

基本上在原来的配置上修改一下就好了。 我这边主要修改了一下监听的地址,以及加了一个 HTTP 代理地址(clash http proxy 地址),因为其中部分配置是需要从 Github 下载的,我这访问 GitHub 不走代理有点抽疯。更多配置参考官方文档。 我的配置如下:

listen_addresses = ['127.0.0.1:5353']
max_clients = 250
ipv4_servers = true
ipv6_servers = false
dnscrypt_servers = true
doh_servers = true
odoh_servers = false
require_dnssec = false
require_nolog = true
require_nofilter = true
disabled_server_names = []
force_tcp = false
# Clash HTTP  代理地址,加速配置下载
http_proxy = 'http://127.0.0.1:7890'
timeout = 5000
keepalive = 30
log_level = 2
cert_refresh_delay = 240
bootstrap_resolvers = ['114.114.114.114:53', '9.9.9.9:53']
ignore_system_dns = true
netprobe_timeout = 60
netprobe_address = '9.9.9.9:53'
log_files_max_size = 10
log_files_max_age = 7
block_ipv6 = false
block_unqualified = true
block_undelegated = true
reject_ttl = 10
cache = true
cache_size = 512
cache_min_ttl = 600
cache_max_ttl = 86400
cache_neg_min_ttl = 60
cache_neg_max_ttl = 600

[sources]
 [sources.'public-resolvers']
   urls = ['https://raw.githubusercontent.com/DNSCrypt/dnscrypt-resolvers/master/v3/public-resolvers.md', 'https://download.dnscrypt.info/resolvers-list/v3/public-resolvers.md', 'https://ipv6.download.dnscrypt.info/resolvers-list/v3/public-resolvers.md', 'https://download.dnscrypt.net/resolvers-list/v3/public-resolvers.md']
   cache_file = 'public-resolvers.md'
   minisign_key = 'RWQf6LRCGA9i53mlYecO4IzT51TGPpvWucNSCh1CBM0QTaLn73Y7GFO3'
   refresh_delay = 72
   prefix = ''

 [sources.'relays']
   urls = ['https://raw.githubusercontent.com/DNSCrypt/dnscrypt-resolvers/master/v3/relays.md', 'https://download.dnscrypt.info/resolvers-list/v3/relays.md', 'https://ipv6.download.dnscrypt.info/resolvers-list/v3/relays.md', 'https://download.dnscrypt.net/resolvers-list/v3/relays.md']
   cache_file = 'relays.md'
   minisign_key = 'RWQf6LRCGA9i53mlYecO4IzT51TGPpvWucNSCh1CBM0QTaLn73Y7GFO3'
   refresh_delay = 72
   prefix = ''

fragments_blocked = ['cisco', 'cisco-ipv6', 'cisco-familyshield', 'cisco-familyshield-ipv6', 'cleanbrowsing-adult', 'cleanbrowsing-adult-ipv6', 'cleanbrowsing-family', 'cleanbrowsing-family-ipv6', 'cleanbrowsing-security', 'cleanbrowsing-security-ipv6']

skip_incompatible = false

配置好后,把服务重启。

#  重启
service dnscrypt-proxy restart
# 开机自启
service dnscrypt-proxy enable
# 查看日志
logread -e dnscrypt-proxy -f

配置 dnsmasq

配置 dnsmasq 的配置文件夹。

mkdir /etc/dnsmasq.d
uci add_list dhcp.@dnsmasq[0].confdir=/etc/dnsmasq.d
uci add_list dhcp.@dnsmasq[0].cachesize=10000
uci commit dhcp

下载大陆白名单,让大陆的走指定的解析,直接连接,达到加速国内站点的目的。

# 创建一个放脚本的文件夹
mkdir -p /etc/scripts && cd /etc/scripts

# 由于访问 Github 不是很通畅,使用 http 代理
export https_proxy=http://127.0.0.1:7890

# 下载大陆白名单,生成 dnsmasq 配置的脚本
curl -L -o generate_dnsmasq_chinalist.sh https://github.com/cokebar/openwrt-scripts/raw/master/generate_dnsmasq_chinalist.sh

# 赋权
chmod +x generate_dnsmasq_chinalist.sh

# 执行脚本,生成配置
sh generate_dnsmasq_chinalist.sh -d 114.114.114.114 -p 53 -s chinalist -o /etc/dnsmasq.d/accelerated-domains.china.conf

# 重启 dnsmasq 使配置生效
service dnsmasq restart

除了这些,我们还需要登录管理界面,设置 DNS 转发。

Network > DHCP and DNS > General Settings 中,将 DNS 转发到 dnsencrpt-proxy2, 如下图:

同时,忽略解析文件。

保存并应用后,dnsmasq 就配置好了。

配置 iptables

Network > Firewall > Custom Rules 中,添加以下规则并保存。

iptables -t nat -N clash

# 本地白名单部分
iptables -t nat -A clash -d 0.0.0.0/8 -j RETURN
iptables -t nat -A clash -d 10.0.0.0/8 -j RETURN
iptables -t nat -A clash -d 127.0.0.0/8 -j RETURN
iptables -t nat -A clash -d 169.254.0.0/16 -j RETURN
iptables -t nat -A clash -d 172.16.0.0/12 -j RETURN
iptables -t nat -A clash -d 192.168.0.0/16 -j RETURN
iptables -t nat -A clash -d 224.0.0.0/4 -j RETURN
iptables -t nat -A clash -d 240.0.0.0/4 -j RETURN

# 清空 ipset 集合
ipset destroy
ipset create chinalist hash:net

# 国内白名单
iptables -t nat -A clash -m set --match-set chinalist dst -j RETURN

# 其他流量走透明代理
iptables -t nat -A clash -p tcp -j REDIRECT --to-ports 7892 

iptables -t nat -A PREROUTING -p tcp -j clash

重启防火墙立即生效。

/etc/init.d/firewall restart

到这里,我们就全部配置完成了,可以愉快的上网了。

看看效果。

简单来说,用 Youtube 看 4k 应该是没问题的。

Jietu20220811-062347-HD

参考