基于 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

3037 次点击
所在节点    程序员
23 条回复
bugfan
2023-06-22 12:33:47 +08:00
@xxcheng
huahsiung
2023-06-22 17:23:24 +08:00
这个方法我都用了好久了,但是我不是用 gost

gost 太重了,直接把 sniproxy 用 proxychain 代理出去就行,我就是这样用的。都用了好久了

自己的服务器或者电脑上其实不用 dnsmasq ,adguard 。把 /etc/hosts 添加一条记录就行,反正有控制权

172.32.1.1 docker.io

还可以添加多条 host 记录

172.32.1.1 docker.io
172.32.1.1 www.google.com
172.32.1.1 chat.opanai.com

解锁 chatGPT 等服务
wenerme
2023-06-22 18:30:44 +08:00
增加了 Docker, 简化部署

```bash
# --network=host or -p 80:80 -p 443:443 -p 53:53/udp
# -e FAKEIP=172.32.1.1
docker run --rm -it -e PROXY=socks5://192.168.66.1:7890 -p 80:80 -p 443:443 -p 53:53/udp --name proxy wener/sni-rev-proxy

nslookup google.com 127.0.0.1
curl --resolve google.com:80:127.0.0.1 google.com

# 添加 FAKEIP
ip addr add 172.32.1.1/32 dev eth0
```

- Dockerfile https://github.com/wenerme/dockerfiles/tree/master/sni-rev-proxy
- https://github.com/wenerme/wener/blob/master/story/2023/2023-06-21-sni-proxy.md

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

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

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

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

© 2021 V2EX