一个Go 代理服务,用于让纯 IPv6 网络访问 GitHub 及其常见资源域名。
205
一个部署在双栈服务器上的 Go 代理服务,用于让纯 IPv6 网络通过服务器 A 的 IPv6 地址访问 GitHub 及其常见资源域名。
本项目采用 SNI/TCP 透传:
github.com 等域名解析到服务器 A 的 IPv6这意味着:
适合以下场景:
以下情况不适合本项目:
部署前请确认:
4438080)/etc/hosts 或等效 hosts 文件示例配置见 config.example.yaml。
listen_addr: ":443"
health_listen_addr: ":8080"
default_port: 443
dial_timeout: 10s
idle_timeout: 2m
log_level: info
routes:
- github.com
- raw.githubusercontent.com
- '*.githubusercontent.com'
- pattern: '*.githubusercontent.com'
upstream: raw.githubusercontent.com
- pattern: objects.githubusercontent.com
upstream: objects.githubusercontent.com:8443
字段说明:
listen_addr:TCP 监听地址,通常为 :443health_listen_addr:HTTP 健康检查监听地址,留空可关闭default_port:未显式指定端口时的默认上游端口dial_timeout:连接上游超时idle_timeout:连接空闲超时log_level:日志级别,可选 debug / info / warn / errorroutes:SNI 路由规则,支持两种写法
*.example.com 通配模式
github.com 会自动解析为 upstream: github.com*.githubusercontent.com 会自动解析为 upstream: githubusercontent.compattern + 可选 upstream
upstream 时也会自动按上面规则推导host:port 时显式填写 upstream在纯 IPv6 客户端中,把常用 GitHub 域名指向服务器 A 的 IPv6,例如:
sudo tee -a /etc/hosts <<EOF
# GitHub IPv6 Hosts
2001:db8::100 github.com
2001:db8::100 api.github.com
2001:db8::100 codeload.github.com
2001:db8::100 ghcr.io
2001:db8::100 pkg.github.com npm.pkg.github.com maven.pkg.github.com nuget.pkg.github.com rubygems.pkg.github.com
2001:db8::100 uploads.github.com
2001:db8::100 objects.githubusercontent.com www.objects.githubusercontent.com release-assets.githubusercontent.com gist.githubusercontent.com repository-images.githubusercontent.com camo.githubusercontent.com private-user-images.githubusercontent.com avatars0.githubusercontent.com avatars1.githubusercontent.com avatars2.githubusercontent.com avatars3.githubusercontent.com cloud.githubusercontent.com desktop.githubusercontent.com support.github.com
2001:db8::100 support-assets.githubassets.com github.githubassets.com opengraph.githubassets.com github-registry-files.githubusercontent.com github-cloud.githubusercontent.com
EOF
2001:db8::100 github.com
2001:db8::100 www.github.com
2001:db8::100 api.github.com
2001:db8::100 gist.github.com
2001:db8::100 raw.githubusercontent.com
2001:db8::100 objects.githubusercontent.com
2001:db8::100 codeload.github.com
2001:db8::100 github-releases.githubusercontent.com
2001:db8::100 central.github.com
2001:db8::100 collector.github.com
2001:db8::100 alive.github.com
2001:db8::100 live.github.com
2001:db8::100 uploads.github.com
2001:db8::100 assets-cdn.github.com
2001:db8::100 media.githubusercontent.com
2001:db8::100 camo.githubusercontent.com
2001:db8::100 user-images.githubusercontent.com
2001:db8::100 private-user-images.githubusercontent.com
2001:db8::100 secured-user-images.githubusercontent.com
2001:db8::100 repositories.githubusercontent.com
说明:
*.githubusercontent.com 和 *.githubassets.com 这类通配规则无法直接写进标准 hosts 文件,需要把你实际访问到的具体子域名逐条加入 hosts默认暴露:
GET /healthz
示例:
curl http://127.0.0.1:8080/healthz
预期返回:
ok
构建镜像:
docker build -t githubproxy .
运行容器:
docker run -d \
--name githubproxy \
-p 443:443 \
-p 8080:8080 \
-v $(pwd)/config.example.yaml:/etc/githubproxy/config.yaml:ro \
maideduo/githubproxy
说明:
443curl http://[服务器A的IPv6]:8080/healthz
在客户端 hosts 指向服务器 A 后:
curl -I https://github.com
git ls-remote https://github.com/OWNER/REPO.git
openssl s_client -servername github.com -connect [服务器A的IPv6]:443
Content type
Image
Digest
sha256:23b9d8467…
Size
32.5 MB
Last updated
5 months ago
docker pull maideduo/githubproxy