Я разрабатываю бот для телеграмм, но API здесь запрещен (Иран), поэтому мне приходится использовать VPN, иначе я не могу ни разу позвонить в BOT API.
для разработки я использую docker, docker-compose в Ubuntu-18, а мой 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, а не многие другие, которые я пробовал? а может исправить?