Unknown SSL protocol error in connection to
在做 telegram bot 的时候遇到一个问题:Unknown SSL protocol error in connection to
解决方案
先贴解决方案:在能够正常访问 api.telegram.org 的服务器上执行 ping api.telegram.org
记录下 ip 地址,然后在墙内的服务器上绑定下 host,将 api.telegram.org 绑定到刚才记录的 ip 上。
原因分析
由于众所周知的原因,api.telegram.org 是无法直接访问的,所以我在使用 python-telegram-bot 的时候设置了代理,配置如下:
updater = Updater(token='TOKEN', request_kwargs={'proxy_url': 'socks5://127.0.0.1:1080/'})
但是设置了代理之后但还是不行,于是我试了下 curl google.com -x socks5://127.0.0.1:1080 -vvv
发现可以访问,又试了下 curl api.telegram.org -x socks5://127.0.0.1:1080 -vvv
这回问题来了,在等了一阵子之后,看到这样一个报错:
* Trying 127.0.0.1...
* TCP_NODELAY set
* SOCKS5 communication to api.telegram.org:443
* SOCKS5 connect to IPv4 243.185.187.39 (locally resolved)
* SOCKS5 request granted.
* Connected to (nil) (127.0.0.1) port 1080 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
* successfully set certificate verify locations:
* CAfile: /etc/ssl/certs/ca-certificates.crt
CApath: /etc/ssl/certs
* TLSv1.2 (OUT), TLS header, Certificate Status (22):
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
* Unknown SSL protocol error in connection to core.telegram.org:443
* Curl_http_done: called premature == 1
* stopped the pause stream!
* Closing connection 0
curl: (35) Unknown SSL protocol error in connection to api.telegram.org:443
这就很奇怪了,代理是可用的,但是 tg 却访问不了,在 Google 查询半天终于搜到了这样一篇文章 点击查看,遇到了跟我一样的问题。
主要是国内 DNS 服务器的问题,被墙的网址被分配了一个错误的 IP 地址。与代理服务器上连接的 IP 地址不同。