SIP003 android 不能正常工作
kuyagic opened this issue · 20 comments
服务器端相关配置
shadowsocks-libev server
{
"server":"127.0.0.1",
"server_port":8888,
"local_port":1080,
"password":"password",
"timeout":60,
"method":"aes-128-gcm"
}
simple-tls cmd line
/usr/local/bin/simple-tls -b <server_ip>:2083 -d 127.0.0.1:8888 -s -cert /root/.acme.sh/<domain>/fullchain.cer -key /root/.acme.sh/<domain>/<domain>.key -wss -path /cdn
使用cloudflare 作为此 服务器的 前端
假设cdn 域名为 <cdn-domain>
其中 上述simple-tls 服务器端 指定的证书内包含了 <cdn-domain>
的 DNS name
在 linux 虚拟机中
simple-tls cmd line
simple-tls -n <cdn-domain> -b 127.0.0.1:9050 -d <cdn-domain>:2083 -wss -path /cdn
shadowsocks-libev client cmd line
ss-local -s 127.0.0.1 -p 9050 -l 9988 -k password -m aes-128-gcm
然后 测试 9050 socks5 端口能正常工作
然后下面是 android ss + SIP003 插件配置
SS 基本配置
服务器 : <cdn-domain>
端口 : 2083
密码加密方式同 server
SIP003配置
path=/cdn;wss;n=<cdn-domain>;
然后链接后 测试不通过.
经过测试 问题依旧. 因为使用的是 强制的 https 的端口 2083
应该和这个TLS 设置没有很大关系
主要是 linux 上 是可以链接的 .另外测试了 用 simple-tls 转发通过cf的ws下的 纯socks5 代理 也是可以成功的.
但是 SIP003 总是测试失败 没有更多的日志 服务器上的 simple-tls 也没有报错.
另外我在 SIP003 上测试不使用 CDN 直接使用 <domain>:2083
也是失败.
直接用 https://<domain>:2083/cdn
和 访问 https://<cdn-domain>:2083/cdn
返回是相同的错误
WebSocket protocol violation: Connection header "Keep-Alive" does not contain Upgrade
服务器端的 simple-tls 也是返回如上错误
但是直接访问 http://<cdn-domain>:2083
的话是返回
400 Bad Request
The plain HTTP request was sent to HTTPS port
cloudflare
所以cf 到我服务器应该确实走的是 https的协议 和 TLS 设置无关
我在安卓手机端用此插件的CDN模式,可以正常连接,没看出来你的是什么状况。
/usr/local/bin/simple-tls -b <server_ip>:2083 -d 127.0.0.1:8888 -s -cert /root/.acme.sh/<domain>/fullchain.cer -key /root/.acme.sh/<domain>/<domain>.key -wss -path /cdn
你似乎应该把 -b <server_ip>:2083
改成 -b 0.0.0.0:2083
或 -b :2083
@kuyagic 意思是只有Android的插件不能用?
需要提供 Android 的log才能确定问题。
adb执行
logcat | grep libss
注意打码保护隐私
我服务器环境拆了...如果你这里有条件可以设置下使用 cf 的 2083的 https 端口来复现下 Android 的问题. 我linux 下是正常的 可能还是apk 问题
/usr/local/bin/simple-tls -b <server_ip>:2083 -d 127.0.0.1:8888 -s -cert /root/.acme.sh/<domain>/fullchain.cer -key /root/.acme.sh/<domain>/<domain>.key -wss -path /cdn
你似乎应该把
-b <server_ip>:2083
改成-b 0.0.0.0:2083
或-b :2083
我服务器是多IP的 所以写了 指定的IP地址 并 CF 的记录里也是对应好的. 这个应该不是问题.
等有时间明天 我再试试看 尝试抓下 Android Log
@kuyagic 意思是只有Android的插件不能用?
需要提供 Android 的log才能确定问题。
adb执行
logcat | grep libss
注意打码保护隐私
下面是 adb 的日志 看上去可能还是 端口号没有正确处理的问题
adb logcat | findstr libss
06-02 19:34:36.793 8198 8198 D GuardedProcessPool: start process: /data/app/xyz.truenight.shadowsocks-2J-SPA1C7KuheMEZs3ipJw==/lib/arm64/libss-local.so -b 127.0.0.1 -l 1080 -t 600 -S /data/user_de/0/xyz.truenight.shadowsocks/no_backup/stat_main -c /data/user/0/xyz.truenight.shadowsocks/no_backup/shadowsocks.conf -V -u --acl /data/user_de/0/xyz.truenight.shadowsocks/no_backup/bypass-lan-china.acl --fast-open
06-02 19:34:36.971 8198 7526 E libss-local: 2020/06/02 11:34:36 main: simple-tls
06-02 19:34:36.971 8198 7526 E libss-local: 2020/06/02 11:34:36 main: simple-tls is running as a sip003 plugin
06-02 19:34:37.083 8198 7526 E libss-local: 2020/06/02 11:34:37 setsockopt: TCP_FASTOPEN_CONNECT, protocol not available
06-02 19:34:37.339 8198 7526 E libss-local: 2020/06/02 11:34:37 setsockopt: TCP_FASTOPEN_CONNECT, protocol not available
06-02 19:34:40.081 8198 7526 E libss-local: 2020/06/02 11:34:40 ERROR: doClient: dialWebsocketConn: failed to WebSocket dial: failed to send handshake request: Get "https://<cdn-domain>/cdn": context deadline exceeded
06-02 19:34:40.333 8198 7526 E libss-local: 2020/06/02 11:34:40 ERROR: doClient: dialWebsocketConn: failed to WebSocket dial: failed to send handshake request: Get "https://<cdn-domain>/cdn": context deadline exceeded
06-02 19:34:44.370 8198 7526 E libss-local: 2020/06/02 11:34:44 setsockopt: TCP_FASTOPEN_CONNECT, protocol not available
06-02 19:34:47.360 8198 7526 E libss-local: 2020/06/02 11:34:47 ERROR: doClient: dialWebsocketConn: failed to WebSocket dial: failed to send handshake request: Get "https://<cdn-domain>/cdn": context deadline exceeded
06-02 19:34:48.610 8198 7526 E libss-local: 2020/06/02 11:34:48 setsockopt: TCP_FASTOPEN_CONNECT, protocol not available
06-02 19:34:51.386 8198 7526 E libss-local: 2020/06/02 11:34:51 setsockopt: TCP_FASTOPEN_CONNECT, protocol not available
06-02 19:34:51.608 8198 7526 E libss-local: 2020/06/02 11:34:51 ERROR: doClient: dialWebsocketConn: failed to WebSocket dial: failed to send handshake request: Get "https://<cdn-domain>/cdn": context deadline exceeded
06-02 19:34:53.429 8198 7526 E libss-local: 2020/06/02 11:34:53 setsockopt: TCP_FASTOPEN_CONNECT, protocol not available
06-02 19:34:53.627 8198 7526 E libss-local: 2020/06/02 11:34:53 setsockopt: TCP_FASTOPEN_CONNECT, protocol not available
06-02 19:34:54.377 8198 7526 E libss-local: 2020/06/02 11:34:54 ERROR: doClient: dialWebsocketConn: failed to WebSocket dial: failed to send handshake request: Get "https://<cdn-domain>/cdn": context deadline exceeded
06-02 19:34:56.427 8198 7526 E libss-local: 2020/06/02 11:34:56 ERROR: doClient: dialWebsocketConn: failed to WebSocket dial: failed to send handshake request: Get "https://<cdn-domain>/cdn": context deadline exceeded
06-02 19:34:56.464 8198 7526 E libss-local: 2020/06/02 11:34:56 setsockopt: TCP_FASTOPEN_CONNECT, protocol not available
06-02 19:34:56.626 8198 7526 E libss-local: 2020/06/02 11:34:56 ERROR: doClient: dialWebsocketConn: failed to WebSocket dial: failed to send handshake request: Get "https://<cdn-domain>/cdn": context deadline exceeded
06-02 19:34:58.414 8198 7526 E libss-local: 2020/06/02 11:34:58 setsockopt: TCP_FASTOPEN_CONNECT, protocol not available
^C^C
理论上 访问的应该是 https://<cdn-domain>:2083/cdn
这个wd 地址. 可能只处理了 默认的 443
端口
理论上 访问的应该是 https://:2083/cdn 这个wd 地址. 可能只处理了 默认的 443 端口
已测试443,2083,2087端口,均可连接,不能复现问题。即使开启wss模式,simple-tls也会遵守shadowsocks-andorid里设置的端口。
另外好像你用的并不是官方的shadowsocks-andorid。
可能是shadowsocks版本问题或系统问题。
@IrineSistiana 我发现上一个版本的rh参数,只能在自签证书模式下使用,我只试成功过tls+自签证书的模式。CDN模式时使用rh参数,是无法连接。当然还有其他组合没有测试,不知道新版本能行不。在没有电脑在身旁的情况下,单用手机去测试实在麻烦,只能在这里反馈下,抱歉!
理论上 访问的应该是 https://:2083/cdn 这个wd 地址. 可能只处理了 默认的 443 端口
已测试443,2083,2087端口,均可连接,不能复现问题。即使开启wss模式,simple-tls也会遵守shadowsocks-andorid里设置的端口。
另外好像你用的并不是官方的shadowsocks-andorid。
可能是shadowsocks版本问题或系统问题。
使用了 官方的shadowsocks-andorid 后 问题依旧. logcat 内容相同
手机是 Oneplus 5 系统是 Pixel Experience 2020-05-29 build 版本
理论上 访问的应该是 https://:2083/cdn 这个wd 地址. 可能只处理了 默认的 443 端口
已测试443,2083,2087端口,均可连接,不能复现问题。即使开启wss模式,simple-tls也会遵守shadowsocks-andorid里设置的端口。
另外好像你用的并不是官方的shadowsocks-andorid。
可能是shadowsocks版本问题或系统问题。使用了 官方的shadowsocks-andorid 后 问题依旧. log cat 内容相同
@IrineSistiana 我发现上一个版本的rh参数,只能在自签证书模式下使用,我只试成功过tls+自签证书的模式。CDN模式时使用rh参数,是无法连接。当然还有其他组合没有测试,不知道新版本能行不。在没有电脑在身旁的情况下,单用手机去测试实在麻烦,只能在这里反馈下,抱歉!
另外 我在开启 rh 模式后 代理最简单的 3proxy提供的 socks5 代理时候失败
simple-tls 客户端输出如下
ERROR: doClient: openTunnel: random header is too short or too large
服务器端没有输出
客户端命令行如下
simple-tls -n <cdn-domain> -b 127.0.0.1:9050 -d <cdn-domain>:2083 -wss -path /cdn -rh
测试命令
curl --socks5 127.0.0.1:9050 -L ifconfig.co
-b <server_ip>:2083 改成 -b 0.0.0.0:2083 或 -b :2083
你有试过上面这个么?
这个不是问题
我linux下是成功的 ip绑定 我是多ip的 所以指定了IP 而没有用 all interface
-b <server_ip>:2083 改成 -b 0.0.0.0:2083 或 -b :2083
你有试过上面这个么? @ kuyagic
或许我们可以 用 IM 来交流下
https://t.me/duyaoo
如果方便的话 可以私聊我
你还是等大佬处理吧, 我是真不知道咋回事了。😀
好的 @IrineSistiana 大佬如果有需要可以 telegram 联系我
我猜是因为用的是shadowsocks-android beta版。
beta版(5.0.6以上)不知道从哪个版本开始把插件参数格式改了。插件会导致连不上。simple-tls v0.4.2 已做出修正。
因为是古老的issue我就close了。