基于 SNI 的全局代理

2023-06-21 15:19:13 +08:00
 wenerme

主要应对近期针对 docker.io. 的封锁,过于严重,影响面过大,所以做了统一的解决方案。 分享下解决逻辑,目前还没找到更好的解决办法

  1. 路由器上配置 DNS 为局域网内的一个节点
  2. 路由器上配置 路由 172.32.1.1 到内网的一个 IP
  3. DNS 匹配需要代理的路由返回 172.32.1.1
  4. 172.32.1.1 上部署 sni 代理,监听 80 、443

前置条件

后置条件

应用场景

配置代理节点

ip addr add 172.32.1.1/32 dev eth0 # 增加 IP

# 安装部署 gost - 提供 SNI 代理
# ===============
curl -LO https://github.com/go-gost/gost/releases/download/v3.0.0-rc8/gost_3.0.0-rc8_linux_amd64.tar.gz
tar zxvf gost*.tar.gz
# 监听 80, 443 - 上游代理为 192.168.1.2:7890 ,如果在当前节点也可以 127.0.0.1:7890
./gost -L sni://:80 -L sni://:443 -F socks5://192.168.1.2:7890
# 测试 gost 代理是否成功
curl -H 'Host: google.com' 127.0.0.1

# 安装部署 dnsmasq
# ===============
apk add dnsmasq
# 上游配置
cat << EOF > /etc/dnsmasq.d/main.conf
server=223.5.5.5
log-queries=extra
EOF

# 配置代理常用的域名
curl -L https://ghproxy.com/raw.githubusercontent.com/wenerme/wener/master/notes/service/dns/gfwlist.txt \
  | sed -E 's#.+#address=/&/172.32.1.1#' > /etc/dnsmasq.d/gfwlist.conf

# 测试启动
dnsmasq -d
# 测试,返回 172.32.1.1 为正常结果
nslookup google.com 127.0.0.1

# service dnsmasq start # 服务启动
# rc-update add dnsmasq # 开机自动启动

FAQ

为什么用 172.32.1.1

为什么选择 DNS+SNI 作为全局代理

能不能不限制域名所有都代理

关于上游 DNS

其他无感全局代理的方式

  1. 修改网关,tproxy - 无感,但是重新部署 dhcp ,替代路由作为网关
  2. 在 WiFi+Lan 的节点上,将 WiFi 配置为走代理,连 WiFi 则走代理,增加一个 lan 不修改现有。

博文 https://wener.me/story/sni-proxy 原文 https://github.com/wenerme/wener/blob/master/story/2023/2023-06-21-sni-proxy.md

3035 次点击
所在节点    程序员
23 条回复
AngryPanda
2023-06-21 15:27:00 +08:00
国人做点事情太难了
不是🇺🇸人卡你脖子
就是🇨🇳人卡你脖子
iRiven
2023-06-21 15:27:28 +08:00
对于非 80/443 端口的流量,这样子不就变成 DNS 污染了。
wenerme
2023-06-21 16:35:50 +08:00
@iRiven 但是需要代理的这些域名一般不会用到非 80 443 ,目前我自己用到了这些域名 https://github.com/wenerme/wener/blob/master/notes/service/dns/gfwlist.txt
cheng6563
2023-06-21 17:02:45 +08:00
我是把墙了的镜像搬到 ghcr.io 了,利用 github actions 搞的
ShareDuck
2023-06-21 17:09:48 +08:00
有被墙吗?广东电信和广东广电都能访问。
liantian
2023-06-21 17:13:30 +08:00
用得着那么麻烦么....
配个代理再拉镜像不就完了...以前又不是没封过了
realpg
2023-06-21 17:46:22 +08:00
封就封呗,无论是服务器还是自己电脑,整个梯子难度都是 0 ,何必瞎鸡儿折腾

买个锤子看啥都像钉子
dode
2023-06-21 17:54:57 +08:00
很棒
dode
2023-06-21 17:58:02 +08:00
clash 开启 DNS 服务可以提供同等功能吗
Jirajine
2023-06-21 18:05:58 +08:00
影响面过大为什么不去投诉运营商?真就温水煮青蛙?
@realpg 等这些能“钻空子”的服务都封了,你还上哪整梯子去?
IvanLi127
2023-06-21 18:08:27 +08:00
话说为啥不直接在路由上跑 Clash ,除了吃性能外,好像挺方便的
yuange1975
2023-06-21 18:59:43 +08:00
fakedns?
billlee
2023-06-21 19:46:23 +08:00
IP 不如用国防部或 IBM 的网段
wenerme
2023-06-21 20:35:00 +08:00
@liantian 一两个可以配置代理,但是整个局域网节点多的时候就很麻烦了,而且不只是 docker.io, 顺便解决 ghcr 、quay 和 k8s.io 镜像问题
jiulang
2023-06-21 20:52:07 +08:00
Cloudflare 的 IP 都 block 了
kangyue9999
2023-06-21 22:52:14 +08:00
@AngryPanda 剩下人想卡卡不到?
lovelylain
2023-06-21 23:07:57 +08:00
clash fakedns 透明代理 不香吗?
bugfan
2023-06-22 01:19:25 +08:00
去年做 vpn 时候 ,写过 sni 代理,其实还是挺好用的。代码量也不大,只不过当时只实现了 ipv4,没做 ipv6.

这玩意好处就是客户端只需要配置个 dns 就行了,别的都不用动。
wwbfred
2023-06-22 01:28:02 +08:00
七层代理在中国泛用度肯定不如四层代理。使用代理的需求肯定不仅是 HTTP 和 HTTPS ,这个方案的适用度有限。这个方案我在家里也有些类似的应用,但主要用途是中间人攻击,另外对于部分限制 IP 的服务也有效果。
xxcheng
2023-06-22 12:01:20 +08:00
奈飞的 DNS 解锁是这个原理吗

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/950658

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX