访问 https://github.com/gfreezy/seeker/releases 下载最新 release
chmod +x seeker-osx # or chmod+x seeker-linux-
启动
seekerSeeker 0.5.0 gfreezy <gfreezy@gmail.com> Tun to Shadowsockets proxy. https://github.com/gfreezy/seeker USAGE: seeker [FLAGS] [OPTIONS] FLAGS: --encrypt Encrypt config file and output to terminal -h, --help Prints help information -V, --version Prints version information OPTIONS: -c, --config <FILE> Sets config file. Sample config at https://github.com/gfreezy/seeker/blob/master/sample_config.yml --config-url <CONFIG_URL> URL to config --key <KEY> Key for encryption/decryption -l, --log <PATH> Log file -u, --uid <UID> User id to proxy
本地配置文件启动
sudo seeker --config path/to/config.yml
远程配置文件启动
sudo seeker --config-url https://pastebin.com/raw/config --key encrypt-key
生成远程配置文件
sudo seeker --config path/to/config.yml --encrypt --key encrypt-key
-
seeker启动的时候会自动将本机 DNS 修改为127.0.0.1,退出的时候将 DNS 设置为默认值
-
seeker直接使用的 clash 的规则。目前支持DOMAINDOMAIN-KEYWORDDOMAIN-SUFFIXMATCH规则,不支持IP相关的规则。 -
支持的
Action: -
PROXY(proxy-group-name)走 proxy-group-name 代理组 -
DIRECT直连 -
REJECT拒绝 -
PROBE(proxy-group-name)默认尝试直连,如果超时,则走 proxy-group-name 代理组。 -
确保系统没有重复的
tun_name -
确保 TUN 的网络
tun_ip和tun_cidr与当前所处网络环境不在一个网段 -
seeker支持 socks5 代理、http 代理和 shadowsocks 代理。优先级为 socks5 代理 > shadowsocks 代理 > http 代理。 -
redir模式下使用 iptables 的 redirect 功能,只支持 tcp 流量。
seeker 支持两种服务器配置格式:
-
Seeker 原生格式(使用
servers字段):servers: - name: server-ss1 addr: domain-to-ss-server.com:8388 # 也可以使用 server protocol: Shadowsocks # 也可以使用 type method: chacha20-ietf # 也可以使用 cipher password: password
-
Clash 格式(使用
proxies字段,与servers等价):proxies: - name: "[SS] Hong Kong-20" type: ss # 支持: ss, socks5, http, https server: fbxt0765gh0pielsss.ftisthebest.com port: 56020 cipher: chacha20-ietf-poly1305 password: e1v3fy6lnmh udp: true # 可选字段,会被忽略
两种格式可以混合使用,在同一个 servers (或 proxies) 列表中可以包含两种格式的配置。
注意:servers 和 proxies 是同一个字段的不同名称(别名),不能在同一个配置文件中同时使用两者。
seeker 提供两种方式从远程加载配置:
在配置文件中使用 remote_config_urls 字段,从远程 URL 加载 Shadowsocks 服务器列表。支持标准 SS 订阅格式,兼容大多数 SS 服务商提供的订阅链接。
配置方式:
+
# 在配置文件中添加 SS 订阅地址
remote_config_urls:
- https://your-ss-provider.com/subscription-url-1
- https://your-ss-provider.com/subscription-url-2订阅格式要求:
-
远程 URL 返回的内容必须是 Base64 编码的文本
-
Base64 解码后,每行一个
ss://格式的 Shadowsocks URL -
示例原始内容(解码前):
c3M6Ly9ZV1Z6TFRJMU5pMW5ZMjA2TVRFeEB0ZXN0LnNzLmNvbTozMDAwMi8jSEsrMDE= c3M6Ly9ZV1Z6TFRJMU5pMW5ZMjA2TVRFeEB0ZXN0LnNzLmNvbTozMDAwMy8jSEsrMDI= -
解码后内容:
ss://YWVzLTI1Ni1nY206MTEx@test.ss.com:30002/#HK+01 ss://YWVzLTI1Ni1nY206MTEx@test.ss.com:30003/#HK+02
工作流程:
-
seeker启动时自动从remote_config_urls拉取订阅内容 -
Base64 解码后,解析每个
ss://URL 为服务器配置 -
远程订阅的服务器会自动添加到本地
servers列表中 -
本地配置和远程订阅的服务器会合并使用
示例:
+
# config.yml
dns_start_ip: 11.0.0.10
tun_ip: 11.0.0.1
# ... 其他配置 ...
# 本地服务器配置
servers:
- name: local-socks5
addr: 127.0.0.1:1080
protocol: Socks5
# SS 订阅链接(会自动拉取并合并到 servers 中)
remote_config_urls:
- https://your-ss-provider.com/subscribe使用命令行参数从远程 URL 加载完整的加密配置文件(整个 YAML 配置)。
使用方式:
+
# 1. 生成加密配置(使用 ChaCha20-IETF 加密)
seeker --config config.yml --encrypt --key mypassword > encrypted-config.txt
# 2. 将 encrypted-config.txt 上传到你的服务器
# 例如:https://your-server.com/encrypted-config.txt
# 3. 使用远程加密配置启动 seeker
sudo seeker --config-url https://your-server.com/encrypted-config.txt --key mypassword特点:
-
使用 ChaCha20-IETF 加密算法保护配置内容
-
必须配合
--key参数使用 -
远程配置是完整的 YAML 配置文件(加密后 Base64 编码)
-
适合需要保密配置的场景
seeker 支持以下超时配置:
-
read_timeout: 首次读取数据的超时时间(默认 10 秒)。连接建立后,首次读取数据时使用此超时。 -
idle_timeout: 连接空闲超时时间(默认 300 秒)。连接建立后,后续读取数据时使用此超时。如果连接空闲时间超过此值,连接将被关闭。 -
write_timeout: 写入超时时间(默认 30 秒)。多久没有数据写入则认为超时。 -
connect_timeout: 连接超时时间(默认 100 毫秒)。 -
ping_timeout: ping 超时时间(默认 3 秒)。 -
probe_timeout: 探测超时时间(默认 3 秒)。用于PROBE规则判断是否走代理。
seeker 在代理组中自动选择最佳服务器时,采用以下优化策略以减少频繁切换:
-
切换阈值: 新服务器分数需比当前服务器低 10% 以上才会切换,避免因微小差异频繁切换。
-
最小切换间隔: 两次服务器切换之间至少间隔 60 秒,防止短时间内多次切换。
-
连续失败保护: 只有连续失败 3 次才会触发服务器切换,避免因偶发错误导致不必要的切换。
这些优化确保了代理连接的稳定性,同时仍能在服务器真正出现问题时及时切换到更好的服务器。
Table
Plain
Aes128Cfb
Aes128Cfb1
Aes128Cfb8
Aes128Cfb128
Aes192Cfb
Aes192Cfb1
Aes192Cfb8
Aes192Cfb128
Aes256Cfb
Aes256Cfb1
Aes256Cfb8
Aes256Cfb128
Aes128Ctr
Aes192Ctr
Aes256Ctr
Camellia128Cfb
Camellia192Cfb
Camellia256Cfb
Camellia128Cfb1
Camellia192Cfb1
Camellia256Cfb1
Camellia128Cfb8
Camellia192Cfb8
Camellia256Cfb8
Camellia128Cfb128
Camellia192Cfb128
Camellia256Cfb128
Rc4
Rc4Md5
ChaCha20
Salsa20
XSalsa20
ChaCha20Ietf
Aes128Gcm
Aes256Gcm
ChaCha20IetfPoly1305
XChaCha20IetfPoly1305
Aes128PmacSiv
Aes256PmacSiv使用 socks5 代理的时候,需要将所有直连的域名设置在配置文件里面,如果使用 ss 或者 vmess 之类的,需要将 ss 或 vmess server 的域名也加入配置文件。否则有可能会导致死循环,没法正常使用。
CONNECT 协议,而且不支持 UDP 协议。
在配置文件中增加 IP-CIDR 规则即可。默认情况下 IP 都是是直连,所以只需要添加 PROXY 和 PROBE。如下:
rules:
- 'IP-CIDR,19.23.212.0/16,PROXY'
- 'IP-CIDR,19.23.21.0/16,PROBE'-
打开
gateway_mode。gateway_mode开启后,dns_server会自动覆盖为0.0.0.0:53gateway_mode: true
-
查看本地 IP
ifconfig -
打开希望走代理的手机或者电脑的网络设置,将 DNS 与 网关 修改为步骤2获取到的 IP
-
If you encountered
"seeker" cannot be opened because the developer cannot be verified., you can go toSystem Preferences→Security & Privacy→Generaland enable any blocked app from Allow apps downloaded from pane at the bottom of the window. -
Ubuntu 提示
Address already used, 查看这里 https://unix.stackexchange.com/questions/304050/how-to-avoid-conflicts-between-dnsmasq-and-systemd-resolved
seeker 支持 ICMP Echo Request(ping)的透明代理。由于 seeker 使用 Fake IP 模式,直接 ping 域名会 ping 到 Fake IP(如 11.0.0.x),无法得到真实的 ping 结果。
seeker 通过以下方式解决这个问题:
-
当 TUN 设备收到 ICMP Echo Request 时,
seeker会拦截该请求 -
根据目标 Fake IP 查找对应的原始域名
-
解析域名获取真实 IP 地址
-
使用原始的 ICMP identifier 和 sequence number 向真实 IP 发送 ping 请求
-
真实服务器的响应会直接返回给发起 ping 的应用
这样,即使在透明代理模式下,ping github.com 也能正确返回 GitHub 服务器的真实响应时间。
seeker 参考了 Surge for Mac 的实现原理,基本如下:
-
seeker会在本地启动一个 DNS server,并自动将本机 DNS 修改为seeker的 DNS 服务器地址 -
seeker会创建一个 TUN 设备,并将 IP 设置为10.0.0.1,系统路由表设置10.0.0.0/16网段都路由到 TUN 设备 -
有应用请求 DNS 的时候,
seeker会为这个域名返回10.0.0.0/16网段内一个唯一的 IP -
seeker从 TUN 接受到 IP 包后,会在内部组装成 TCP/UDP/ICMP 数据 -
seeker会根据规则和网络连接的 uid 判断走代理还是直连 -
如果需要走代理,将 TCP/UDP 数据转发到 SS 服务器/ socks5 代理,从代理接受到数据后,在返回给应用;如果直连,则本地建立直接将数据发送到目标地址
Licensed under either of
-
Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)
-
MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)
at your option.