大家好,我在通过TCP通信传递给带有SSL的Synology NAS时遇到问题。
我想将Synology Drive Client连接到NAS,并且Drive Client Software通过TCP端口6690与NAS通信。
当我尝试连接时,出现500错误。
如果没有SSL,它可以正常工作,但是,Synology不能使用自己不信任的证书对通信进行加密,这不是解决方案。
构建:
互联网| -> |路由器(端口转发6690)| -> | nginx | -> | NAS(192.168.10.2)|
Nginx:
stream{
log_format log_stream '$remote_addr [$time_local] $protocol [$ssl_preread_server_name] [$ssl_preread_alpn_protocols]'
'$status $bytes_sent $bytes_received $session_time';
access_log /var/log/nginx/access.log log_stream;
ssl_certificate /etc/letsencrypt/live/{mydomain}/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/{mydomain}/privkey.pem;
ssl_protocols TLSv1.1 TLSv1.2;
server {
listen 6690 ssl;
proxy_pass 192.168.10.2:6690;
}
}
日志:
xx.xx.xxx.xxx [08/Nov/2019:15:09:37 +0100] TCP [-] [-]500 0 0 0.000
xx.xx.xxx.xxx [08/Nov/2019:15:09:37 +0100] TCP [-] [-]500 0 0 0.000
xx.xx.xxx.xxx [08/Nov/2019:15:10:37 +0100] TCP [-] [-]500 0 0 0.000
xx.xx.xxx.xxx [08/Nov/2019:15:10:37 +0100] TCP [-] [-]500 0 0 0.000
xx.xx.xxx.xxx [08/Nov/2019:15:11:37 +0100] TCP [-] [-]500 0 0 0.000
xx.xx.xxx.xxx [08/Nov/2019:15:11:37 +0100] TCP [-] [-]500 0 0 0.000
我还尝试使用以下方法检查SSL握手:
openssl s_client -host mydomain.net -port 6690
而且效果很好。
有人知道我的错误在哪里吗??? :-(
最佳答案
类似的设置旨在提供对“更安全”的Rev-Proxy背后的Synology Drive的访问。
问题不在于SSL握手。
问题是:没有http协议,没有运行Synology Drive等的端口6690。(德语参考,包含有关6690上非http协议的假设:https://www.synology-forum.de/showthread.html?74773-Cloud-Station-über-Reverse-Proxy/page3)
另外,我通过Drive-Client调用我的NginxRevProxy(通常在工作),并从access.log获取:172.18.0.1 - - [09/Nov/2019:10:17:26 +0000] "%R\x18\x14F\x0B\x00\x00" 400 157 "-" "-" "-"
因此,您的方法(和我的方法)还不够。
解决方案的可能途径,这超出了我目前的知识范围:
如果Nginx可以与Synology Drive一起使用,则可以将其“升级”到反向tcp-proxy,将Nginx的“花式”与自己的auth-script一起用于TCP-Proxy。 (即“滥用” +扩展此处显示的TCP-Loadbalancer:https://www.debinux.de/2014/12/nginx-als-tcp-proxy-beispiel-dovecot/)