https://github.com/zijiren233/sniproxy
sniproxy with nginx
https://github.com/zijiren233/sniproxy
nginx proxy script sniproxy web
Last synced: 12 months ago
JSON representation
sniproxy with nginx
- Host: GitHub
- URL: https://github.com/zijiren233/sniproxy
- Owner: zijiren233
- Created: 2024-04-18T14:56:17.000Z (almost 2 years ago)
- Default Branch: main
- Last Pushed: 2024-12-29T12:13:48.000Z (about 1 year ago)
- Last Synced: 2025-01-13T07:31:55.409Z (about 1 year ago)
- Topics: nginx, proxy, script, sniproxy, web
- Language: Shell
- Homepage:
- Size: 118 KB
- Stars: 0
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# sniproxy
## 创建需要代理的域名列表 `domains.txt` 以及设置这些域名解析到的IP地址(解锁机的IP)
- `domains.txt.example` 为示例文件,可以参考此文件创建 `domains.txt`
- `//` 开头的行用来注释,此行不会被解析
- `#` 为 `AdGuardHome` 所用
- 用于AdGuardHome的DNS重写
- `#` 开头的行为设置此行之后的域名解析到的 IP 地址
- 可以重复定义 `#` 行,用来设置此行之后的域名的 IP 地址
- 多个IP用 `,` 分隔,如 `1.1.1.1,2606:4700:4700::1111`
- 可以通过 `echo $(curl -s ifconfig.me -4),$(curl -s ifconfig.me -6)` 命令获取本机的IP地址
- `^` 为 `AdGuardHome` 所用
- 用于设置AdGuardHome的上游DNS
- 可以设置多个上游DNS,用 `,` 分隔,如 `^1.1.1.1,2606:4700:4700::1111` 表示使用 `1.1.1.1` 和 `2606:4700:4700::1111` 作为上游DNS
- 默认为 `h3://dns.google/dns-query,https://dns11.quad9.net/dns-query`
- `$` 为 `AdGuardHome` 所用
- 用于设置AdGuardHome的admin密码
- 如果未设置,则默认密码为 `adminadmin`
- [需要apache2](https://github.com/AdguardTeam/AdGuardHome/wiki/Configuration#password-reset)
- `apt install apache2-utils`
- `dnf install httpd-tools`
- `!` 为 `nginx` 所用
- 用于指定接下来的域名使用的出口IP是 `ipv4` 还是 `ipv6`
- 也可以使用多个IP,用 `,` 分隔,如 `!1.1.1.1,2606:4700:4700::1111` 表示使用 `1.1.1.1` 和 `2606:4700:4700::1111` 作为出口IP
- 如果遇到空行会重置为默认
- `@` 为 `nginx` 所用
- 定义在每个域名后面,用于指定此域名的源服务器地址
- 可以是域名或者IP地址
- 可以定义端口,如果未定义则默认为 `443`
- 支持端口范围,如 `127.0.0.1:5000-5020` 会展开为 `127.0.0.1:5000` 到 `127.0.0.1:5020` 的所有端口
- 值会传递给 `upstream` 的 `server`,如果有多个地址,则用 `;` 分隔
- 如: `netflix.com @127.0.0.1:443` 表示 `netflix.com` 使用 `127.0.0.1:443` 作为上游服务器
- 如: `netflix.com @1.1.1.1:1000-1005 weight=5; 2.2.2.2 weight=10` 表示 `netflix.com` 使用 `1.1.1.1:1000` 到 `1.1.1.1:1005` 和 `2.2.2.2:443` 作为上游服务器,且权重大小分别为 `5` 和 `10`
- 更多配置请参考 [nginx upstream](https://nginx.org/en/docs/stream/ngx_stream_upstream_module.html)
- 也可以定义为 `@` 开头的行,用于指定接下来所有域名使用的源服务器地址
- 如果遇到空行会重置为默认
- 默认情况下域名使用hostname匹配,如 `github.com` 可以匹配 `api.github.com` 和 `github.com`
- `=` 开头表示精确匹配
- 如: `=github.com` 表示精准匹配 `github.com`,无法匹配到 `api.github.com`
- `*` 开头或结尾表示通配符匹配
- 如: `*.github.com` 可以匹配 `api.github.com` 但不能匹配 `github.com`
- 如: `github.*` 可以匹配 `github.com` 和 `github.net`
- `~` 开头表示正则匹配
- 如: `~^api\..*\.com$` 可以匹配所有以api开头的.com域名
- `<` 为 `nginx` 所用
- 用于指定接下来的域名的速率
- 如果遇到空行会重置为默认
- 值会传递给 `proxy_download_rate` 和 `proxy_upload_rate`
- 如: `<1k` 表示下载和上传速率限制为 `1k`
- `&` 为 `nginx` 所用
- 用于指定全局允许的ip白名单
- 如果没有设置,则默认允许所有ip
- 值会传递给 `allow`,且最后会附加一个 `deny all`
- 允许配置多个 `&` 行,每行内可以有多个IP,用 `,` 分隔
- 如: `&1.1.1.1,2606:4700:4700::1111` 表示只允许 `1.1.1.1` 和 `2606:4700:4700::1111` 访问
- 对于有空行就重置的配置,如 `!` `@` `<` 等,可以连续两个 `!!` `@@` `<<` 来设置全局默认值,此时遇到空行也会使用全局默认值
- `` ` `` 和 `` ``` `` 为 `nginx` 所用
- 用于指定代码块到 `stream` 模块中
- 比如:
````txt
` server { listen 22; proxy_pass github.com:22; } `
```
server {
listen 22;
proxy_pass github.com:22;
}
```
````
### `domains.txt` 示例
前提条件:
- 有两台服务器
- 第一台服务器的IP地址为 `1.1.1.1,2606:4700:4700::1111`
- 第一台服务器解锁Netflix
- 且只有ipv6解锁Netflix
- 第二台服务器的IP地址为 `1.0.0.1,2606:4700:4700::1001,2606:4700:4700::1002`
- 第二台服务器解锁Disney和TikTok
- 且只有`2606:4700:4700::1002`解锁Disney
```txt
#1.1.1.1,2606:4700:4700::1111
// Netflix
!ipv6
netflix.com
netflix.net
nflximg.com
nflximg.net
nflxvideo.net
nflxso.net
nflxext.com
#1.0.0.1,2606:4700:4700::1001
// Disney
!2606:4700:4700::1002
disney.com
disneyjunior.com
adobedtm.com
bam.nr-data.net
bamgrid.com
braze.com
cdn.optimizely.com
cdn.registerdisney.go.com
cws.conviva.com
d9.flashtalking.com
disney-plus.net
disney-portal.my.onetrust.com
disney.demdex.net
disney.my.sentry.io
disneyplus.bn5x.net
disneyplus.com
disneyplus.com.ssl.sc.omtrdc.net
disneystreaming.com
dssott.com
execute-api.us-east-1.amazonaws.com
js-agent.newrelic.com
// TikTok
byteoversea.com
ibytedtos.com
ipstatp.com
muscdn.com
musical.ly
p16-tiktokcdn-com.akamaized.net
ibyteimg.com
sgpstatp.com
snssdk.com
tik-tokapi.com
tiktok.com
tiktokcdn.com
tiktokv.com
```
## 运行服务
```bash
# 直接运行会使用ipv4或ipv6请求代理域名,取决于linux优先级配置
bash run.sh
# 如果默认使用绑定ip请求代理域名
bash run.sh -b
# 默认绑定443端口,如果要绑定其他端口或多个端口,则使用 -p 参数
bash run.sh -p , -p
# 如果你修改了domains.txt文件,需要重新启动服务
# 如果只想启动sniproxy服务,使用指定dns,不想启动AdGuardHome服务
bash run.sh -d 1.1.1.1 nginx
# 如果只想启动AdGuardHome服务,不想启动sniproxy服务
bash run.sh adguardhome
```
运行后,nginx会监听80和443端口,AdGuardHome会监听53和8080端口,其中53端口为dns端口,`8080` 端口为web管理端口。
把服务器的dns设置为AdGuardHome的IP地址,这样就可以实现通过AdGuardHome的DNS重写来解锁Netflix、Disney和TikTok。
其中,AdGuardHome的 `8080` 端口还可以当作 `doh(dns over http)` ,注意并不是 `dns over https`
如果要启用 `doh(dns over https)` 建议使用反向代理或cloudflare的cdn