Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/gfreezy/seeker

通过使用 tun 来实现透明代理。实现了类似 surge 增强模式与网关模式。
https://github.com/gfreezy/seeker

Last synced: 21 days ago
JSON representation

通过使用 tun 来实现透明代理。实现了类似 surge 增强模式与网关模式。

Awesome Lists containing this project

README

        

= Seeker

image::https://github.com/gfreezy/seeker/actions/workflows/release.yml/badge.svg[]
image::https://github.com/gfreezy/seeker/actions/workflows/ci.yml/badge.svg?branch=master[]

使用 Tun 实现透明代理(支持 Mac & Linux 系统),支持 TCP、UDP。

== Slack
https://join.slack.com/t/allsunday/shared_invite/zt-f8xw3uzl-qchMa2jQOfQF1T89w3lfiw

== Download
访问 https://github.com/gfreezy/seeker/releases 下载最新 release

[source,bash]
----
chmod +x seeker-osx # or chmod+x seeker-linux
----
== Usage

1. 启动 `seeker`
+
[source,bash]
----
Seeker 0.5.0
gfreezy
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 Sets config file. Sample config at
https://github.com/gfreezy/seeker/blob/master/sample_config.yml
--config-url URL to config
--key Key for encryption/decryption
-l, --log Log file
-u, --uid User id to proxy
----
+
本地配置文件启动
+
[source,bash]
----
sudo seeker --config path/to/config.yml
----
+
远程配置文件启动
+
[source,bash]
----
sudo seeker --config-url https://pastebin.com/raw/config --key encrypt-key
----
+
生成远程配置文件
+
[source,bash]
----
sudo seeker --config path/to/config.yml --encrypt --key encrypt-key
----

2. `seeker` 启动的时候会自动将本机 DNS 修改为 `127.0.0.1`,退出的时候将 DNS 设置为默认值

== Config

* `seeker` 直接使用的 clash 的规则。目前支持 `DOMAIN` `DOMAIN-KEYWORD` `DOMAIN-SUFFIX` `MATCH` 规则,不支持 `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 流量。

=== Sample Config
https://github.com/gfreezy/seeker/blob/master/sample_config.yml

里面有详细的配置文件说明。

=== 支持的 method
```
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 或 http 代理服务器
使用 socks5 代理的时候,需要将所有直连的域名设置在配置文件里面,如果使用 ss 或者 vmess 之类的,需要将 ss 或 vmess server
的域名也加入配置文件。否则有可能会导致死循环,没法正常使用。

⚠️ http 代理只支持 `CONNECT` 协议,而且不支持 UDP 协议。

== 指定 IP 或某网段走代理
在配置文件中增加 `IP-CIDR` 规则即可。默认情况下 IP 都是是直连,所以只需要添加 `PROXY` 和 `PROBE`。如下:

[source,yaml]
----
rules:
- 'IP-CIDR,19.23.212.0/16,PROXY'
- 'IP-CIDR,19.23.21.0/16,PROBE'
----

== 代理局域网内其他机器
1. 打开 `gateway_mode`。`gateway_mode` 开启后, `dns_server` 会自动覆盖为 `0.0.0.0:53`
+
[source,yaml]
----
gateway_mode: true
----

2. 查看本地 IP
+
[source,shell script]
----
ifconfig
----

3. 打开希望走代理的手机或者电脑的网络设置,将 **DNS** 与 **网关** 修改为步骤2获取到的 IP

== 重置 DNS 分配

[source,bash]
----
rm -rf seeker.sqlite
----

== FAQ
. If you encountered `"seeker" cannot be opened because the developer cannot be verified.`,
you can go to `System Preferences` -> `Security & Privacy` -> `General` and 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

== Build (latest stable)

[source,bash]
----
git clone https://github.com/gfreezy/seeker.git
cd seeker
OPENSSL_STATIC=yes cargo build --release
----

编译完成后,程序在 `target/release/seeker`。

=== musl 编译

[source,shell]
----
docker run -v $PWD:/volume -e OPENSSL_STATIC=yes --rm -t clux/muslrust cargo build --release
----

会在 `target/x86_64-unknown-linux-musl/release` 目录下生成 `seeker` 文件。

== 实现原理
`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 数据
. `seeker` 会根据规则和网络连接的 uid 判断走代理还是直连
. 如果需要走代理,将 TCP/UDP 数据转发到 SS 服务器/ socks5 代理,从代理接受到数据后,在返回给应用;如果直连,则本地建立直接将数据发送到目标地址

== 如何发布新版本
```
$ cargo install cargo-release
$ ./add-tag.sh
```

Github Action 会自动编译并发布新的 release。

== License

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.

== Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted
for inclusion in the work by you, as defined in the Apache-2.0 license, shall be
dual licensed as above, without any additional terms or conditions.