Skip to content

Commit

Permalink
Update README.md
Browse files Browse the repository at this point in the history
  • Loading branch information
eycorsican authored Mar 29, 2019
1 parent 6b8cc97 commit 4cd4d6c
Showing 1 changed file with 14 additions and 19 deletions.
33 changes: 14 additions & 19 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,21 +6,24 @@ A fully-featured V2Ray client for Android.

<a href="https://play.google.com/store/apps/details?id=fun.kitsunebi.kitsunebi4android"><img src="https://play.google.com/intl/en_us/badges/images/generic/en-play-badge.png" height="100"></a>

Github Releases: https://github.com/eycorsican/Kitsunebi4Android/releases

## 扩展功能
扩展了 v2ray-core 的功能:
- 新增 Latency Balancing Strategy:[详情及配置看这里](https://gist.github.com/eycorsican/356debc8295e752c1df6ad7286f98ad4)

## 使用提示
## 关于 DNS 处理
自 v1.0.0 起,默认的 DNS 处理方式为 Fake DNS,启用 Fake DNS 后,DNS 请求的流量几乎不会被传进 V2Ray,所以 V2Ray 的 `内置 DNS``DNS outbound` 配置不会起太大作用;当 Fake DNS 处于禁用状态,DNS 请求的流量会以正常 UDP 流量的形式进入 V2Ray,这时你可以使用 inbound tag 在路由中配置路由规则来识别出相应 DNS 流量,从而转发给 `DNS outbound`,从而让 V2Ray 的 `内置 DNS` 来处理(看下面配置示例)。如果使用自定义配置的同时开启 Fake DNS,则需要确保 freedom outbound 中的域名策略为 `非 AsIs`

Fake DNS 跟 V2Ray 的 `流量探测` 在效果上非常相似,目的同样是要拿到请求的域名,但工作原理上有较大差异:
- Fake DNS
- 适用于任何请求的流量
- 对于走代理的请求,本地不会实际发出任何 DNS 请求流量(远程 DNS 解析)
- 会染污本地 DNS 缓存,VPN 关掉后的短暂时间内,可能会导致网络请求异常
- `流量探测`
- 只适用 http/tls 流量
- 不能控制本地是否发出 DNS 请求流量(由 V2Ray 的 DNS 功能模块控制)

## 配置示例

- 配置文件可使用一个常见的 V2Ray JSON 配置
- App 使用较新的 v2ray-core 版本,你或许需要确保服务端也升级到相应的版本,具体版本号请看 Release Notes
- 把配置文件复制粘贴至主界面后,点击连接按钮即可启动
- 配置文件的 freedom outbound 推荐使用 [`UseIP` 策略](https://www.v2ray.com/chapter_02/protocols/freedom.html#outboundconfigurationobject)
- 配置文件不需要有 inbound,app 使用了 `tun2socks` 作为 inbound,默认开启 [http,tls 流量嗅探](https://www.v2ray.com/chapter_02/01_overview.html#sniffingobject) ,默认的标识(tag)为 "tun2socks"
- 关于 DNS 污染等问题,可以通过配置 V2Ray 的 DNS outbound 来解决,可在路由里添加一条识别出来自 tun2socks 的 DNS 流量,并转给 DNS outbound,具体请参考下面配置例子
- 下面是一个可以拿来日常使用的配置模板,在 `outbounds` 中替换上你的服务器信息即可,其中的路由规则和 DNS 规则从这个 [规则集文件](https://github.com/eycorsican/rule-sets/blob/master/kitsunebi_default.conf) 生成:
```json
{
"dns": {
Expand Down Expand Up @@ -106,7 +109,7 @@ Github Releases: https://github.com/eycorsican/Kitsunebi4Android/releases
"domainStrategy": "IPIfNonMatch",
"rules": [
{
"inboundTag": ["tun2socks"],
"inboundTag": ["tun2socks"],
"network": "udp",
"port": 53,
"outboundTag": "dns-out",
Expand Down Expand Up @@ -213,11 +216,3 @@ Github Releases: https://github.com/eycorsican/Kitsunebi4Android/releases
}
}
```

## 开发相关问题

这个 V2Ray Android 客户端利用 `go-tun2socks` 把所有的 TCP/UDP 流量转给到 V2Ray 处理,所用的 `v2ray-core` 是没经过任何修改的官方版本,所以在配置和体验方面不会有太大差别。但在 Android 上有一些东西需要特殊处理,这也是在配置和使用上造成一些差别的地方。

- 在 Android 上有几个情况会造成流量/请求的死循环,目前就我所知的有以下几个:
- 通过 VpnService 的 TUN 接口读取数据,再由代理程序代为发出时,如果不 [protect](https://developer.android.com/reference/android/net/VpnService#protect(int)) 代理程序用来发数据的 socket fd,代理程序发出的数据又会被转到 TUN 接口上,这个问题基本可以用 v2ray-core 提供的 `RegisterDialerController()``RegisterListenerController()` 两个接口完美解决
- 还有一些由 Go 的 [net.DefaultResolver](https://golang.org/src/net/lookup.go#L102) 所发出的 DNS 查询流量没有被 protect 起来,在一些特定的情况下也有可能引起死循环

0 comments on commit 4cd4d6c

Please sign in to comment.