我正在开发一个电报机器人,但是该 API 在这里(伊朗)被禁止,所以我必须使用 VPN,否则无法调用 BOT API。
为了进行开发,我在 Ubuntu-18 中使用 docker、docker-compose,我的 VPN 客户端是开放连接的 Cisco VPN。
当我在主机中建立 VPN 连接时,主机可以毫无问题地使用 API,但在容器中我收到如下所述的奇怪错误。
如果在没有 VPN 的容器中运行此命令:
curl -v https://api.telegram.org/botXXX/getMe
立即会出现以下错误(由于审查制度,这是预料之中的):
curl: (7) Failed to connect to api.telegram.org port 443: Connection refused
在连接 VPN 的情况下,在主机上运行相同的命令只会返回正常响应
,但在容器中它会挂起很长时间(约 1 分钟),然后响应以下内容
* Trying 149.154.167.220...
* TCP_NODELAY set
* Connected to api.telegram.org (149.154.167.220) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
* CAfile: /etc/ssl/certs/ca-certificates.crt
CApath: /etc/ssl/certs
* (304) (OUT), TLS handshake, Client hello (1):
* OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to api.telegram.org:443
* stopped the pause stream!
* Closing connection 0
curl: (35) OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to api.telegram.org:443
我确信容器流量正在通过 VPN,因为我的公共 IP 已更改为 VPN 位置,即使我尝试打开其他一些受审查的网站(例如 youtube、facebook),我也会得到 200 状态代码,没问题,
我尝试了两者--network host
,但--network my_bridge
都没有成功。
那么你知道这个问题是从哪里来的吗?它与 openconnect 客户端有关吗?为什么只有这个 API 会出现这种情况,而我尝试了其他方法却没有解决?也许有解决办法?