[GH-ISSUE #29] Can not use tls://94.140.14.14 in windows7 #24

Closed
opened 2026-03-14 01:05:13 +03:00 by kerem · 8 comments
Owner

Originally created by @Lanius-collaris on GitHub (Jul 31, 2022).
Original GitHub issue: https://github.com/ameshkov/dnslookup/issues/29

./dnslookup github.com tls://94.140.14.14

error:

2022/07/31 15:14:34 Cannot make the DNS request: getting connection to tls://94.
140.14.14:853: connecting to 94.140.14.14: x509: certificate is valid for 94.140
.14.14, 94.140.14.140, 94.140.14.141, 94.140.14.15, 94.140.15.15, 94.140.15.16,
not 94.140.14.14
Originally created by @Lanius-collaris on GitHub (Jul 31, 2022). Original GitHub issue: https://github.com/ameshkov/dnslookup/issues/29 `./dnslookup github.com tls://94.140.14.14` error: ``` 2022/07/31 15:14:34 Cannot make the DNS request: getting connection to tls://94. 140.14.14:853: connecting to 94.140.14.14: x509: certificate is valid for 94.140 .14.14, 94.140.14.140, 94.140.14.141, 94.140.14.15, 94.140.15.15, 94.140.15.16, not 94.140.14.14 ```
kerem closed this issue 2026-03-14 01:05:19 +03:00
Author
Owner

@ameshkov commented on GitHub (Aug 3, 2022):

This is an old golang issue and I don't think they'll fix it since Windows 7 is not supported anymore

<!-- gh-comment-id:1203924111 --> @ameshkov commented on GitHub (Aug 3, 2022): This is an old golang issue and I don't think they'll fix it since Windows 7 is not supported anymore
Author
Owner

@sergeevabc commented on GitHub (Jun 7, 2025):

$ ver
Microsoft Windows [Version 6.1.7601]

$ dnslookup cern.ch https://1.1.1.1/dns-query
[fatal] Cannot make the DNS request: requesting https://1.1.1.1:443/dns-query:
Get "https://1.1.1.1:443/dns-query?dns=AAABAAABAAAAAAAABGNlcm4CY2gAAAEAAQ":
tls: failed to verify certificate: x509: certificate is valid for
1.0.0.1, 1.1.1.1, 162.159.36.1, 162.159.46.1, 2606:4700:4700::1001, 2606:4700:4700::1111, 2606:4700:4700::64, 2606:4700:4700::6400,
not 1.1.1.1

$ dig cern.ch +short +https @1.1.1.1
188.184.77.250

@ameshkov
This is an old golang issue…

Андрей! Вы с языком Go на ты, ваши решения используют в разных проектах. Авось вы и могли бы создать патч, исправляющий ошибку при подключении по айпи?

Ведь все без исключения программы на Go не могут соединиться с DoH/DoT-серверами по айпишнику под Windows 7. Они там в своём зазеркалье вольны считать эту ОС сколь угодно устаревшей, но вообще-то мир живёт не по расписанию Microsoft, а та же утилита dig на языке С++ прекрасно соединяет.

В частности, российские пользователи DNSCrypt жаловались на невозможность соединиться с Google и Yandex DoH. А всё потому, что разработчик поспешил убрать упоминание о доменах из штампов этих серверов, оставив голые айпишники.

Пожалуйста, не поленитесь заглянуть в код, оцените своим опытным взглядом.

<!-- gh-comment-id:2952114825 --> @sergeevabc commented on GitHub (Jun 7, 2025): ``` console $ ver Microsoft Windows [Version 6.1.7601] $ dnslookup cern.ch https://1.1.1.1/dns-query [fatal] Cannot make the DNS request: requesting https://1.1.1.1:443/dns-query: Get "https://1.1.1.1:443/dns-query?dns=AAABAAABAAAAAAAABGNlcm4CY2gAAAEAAQ": tls: failed to verify certificate: x509: certificate is valid for 1.0.0.1, 1.1.1.1, 162.159.36.1, 162.159.46.1, 2606:4700:4700::1001, 2606:4700:4700::1111, 2606:4700:4700::64, 2606:4700:4700::6400, not 1.1.1.1 $ dig cern.ch +short +https @1.1.1.1 188.184.77.250 ``` > @ameshkov > This is an old golang issue… Андрей! Вы с языком Go на ты, ваши решения используют в разных проектах. Авось вы и могли бы создать патч, исправляющий [ошибку при подключении по айпи][1]? Ведь все без исключения программы на Go не могут соединиться с DoH/DoT-серверами по айпишнику под Windows 7. Они там в своём зазеркалье вольны считать эту ОС сколь угодно устаревшей, но вообще-то мир живёт не по расписанию Microsoft, а та же утилита `dig` на языке С++ прекрасно соединяет. В частности, российские пользователи DNSCrypt [жаловались][2] на невозможность соединиться с Google и Yandex DoH. А всё потому, что разработчик поспешил убрать упоминание о доменах из штампов этих серверов, оставив голые айпишники. Пожалуйста, не поленитесь заглянуть в код, оцените своим опытным взглядом. [1]: https://github.com/golang/go/issues/73102 [2]: https://github.com/DNSCrypt/dnscrypt-proxy/issues/2801#issuecomment-2762790614
Author
Owner

@ameshkov commented on GitHub (Jun 9, 2025):

@sergeevabc да дело не в моем коде, а в том, что Go больше не поддерживает Windows 7.

Единственный вариант - использовать более старые версии программ, собранные более старыми версиями Go.

UPD: А, ну вы ж так и делаете. Ну неприятный баг, да. Если мне не изменяет память, по доменному имени соединять должно.

<!-- gh-comment-id:2955191147 --> @ameshkov commented on GitHub (Jun 9, 2025): @sergeevabc да дело не в моем коде, а в том, что Go больше не поддерживает Windows 7. Единственный вариант - использовать более старые версии программ, собранные более старыми версиями Go. UPD: А, ну вы ж так и делаете. Ну неприятный баг, да. Если мне не изменяет память, по доменному имени соединять должно.
Author
Owner

@sergeevabc commented on GitHub (Jun 9, 2025):

Андрей, кажется, вы прочитали написанное мной в спешке или с полуоткрытыми глазами, что бывает у делового человека утром в понедельник, но давайте попробуем ещё раз, ибо речь идёт о важном.

У Go существует давний косяк. Он заключается в том, что под Windows 7 нельзя подключиться к DoH/DoT-серверам по одному лишь айпишнику, нужно указывать домен. Иначе ошибка сертификата. Это не ваш косяк, не косяк вашей программы, это косяк Go. Но вы — опытный программист, который в силах разобраться в ситуации и тем самым сделать мир лучше. И я прошу вас если не исправить косяк, то хотя бы посмотреть код Go и сказать, сложно ли исправить.

<!-- gh-comment-id:2955548247 --> @sergeevabc commented on GitHub (Jun 9, 2025): Андрей, кажется, вы прочитали написанное мной в спешке или с полуоткрытыми глазами, что бывает у делового человека утром в понедельник, но давайте попробуем ещё раз, ибо речь идёт о важном. У Go существует давний косяк. Он заключается в том, что под Windows 7 нельзя подключиться к DoH/DoT-серверам по одному лишь айпишнику, нужно указывать домен. Иначе ошибка сертификата. Это не ваш косяк, не косяк вашей программы, это косяк Go. Но вы — опытный программист, который в силах разобраться в ситуации и тем самым сделать мир лучше. И я прошу вас если не исправить косяк, то хотя бы посмотреть код Go и сказать, сложно ли исправить.
Author
Owner

@ameshkov commented on GitHub (Jun 9, 2025):

Он давно исправлен в новых версиях Go, которые с Win7 не работают. Я к сожалению не могу это исправить ВНЕ Go просто в самой программе.

<!-- gh-comment-id:2955558576 --> @ameshkov commented on GitHub (Jun 9, 2025): Он давно исправлен в новых версиях Go, которые с Win7 не работают. Я к сожалению не могу это исправить ВНЕ Go просто в самой программе.
Author
Owner

@sergeevabc commented on GitHub (Jun 9, 2025):

Андрей, либо мы говорим о разных косяках, либо я не знаю, что и думать. Есть же свежий Go (сейчас это версия 1.24.4), который работает под Windows 7. Ниже с его помощью я компилирую любую Go-программу с сетевым компонентом, пытаюсь соединиться с DoH/DoT-сервером по айпишнику и получаю ошибку. Косяк!

$ ver & go version
Microsoft Windows [Version 6.1.7601]
go version go1.24.4 windows/amd64

$ git clone https://github.com/ameshkov/dnslookup && cd dnslookup

$ go build
go: downloading github.com/AdguardTeam/dnsproxy v0.71.1
go: downloading github.com/AdguardTeam/golibs v0.23.2
go: downloading github.com/ameshkov/dnsstamps v1.0.3
go: downloading github.com/miekg/dns v1.1.59
go: downloading github.com/ameshkov/dnscrypt/v2 v2.3.0
go: downloading github.com/quic-go/quic-go v0.43.1
go: downloading golang.org/x/crypto v0.23.0
go: downloading github.com/quic-go/qpack v0.4.0
go: downloading golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842
go: downloading golang.org/x/text v0.15.0
go: downloading github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da
go: downloading github.com/aead/poly1305 v0.0.0-20180717145839-3fee0db0b635

$ dnslookup cern.ch https://1.1.1.1/dns-query
dnslookup master
2025/06/09 14:58:05 [fatal] Cannot make the DNS request: requesting https://1.1.1.1:443/dns-query: Get "https://1.1.1.1:443/dns-query?dns=AAABAAABAAAAAAAABGNlcm4CY2gAAAEAAQ": tls: failed to verify certificate: x509: certificate is valid for 1.0.0.1, 1.1.1.1, 162.159.36.1, 162.159.46.1, 2606:4700:4700::1001, 2606:4700:4700::1111, 2606:4700:4700::64, 2606:4700:4700::6400, not 1.1.1.1

$ dnslookup cern.ch https://one.one.one.one/dns-query
dnslookup master
Server: https://one.one.one.one/dns-query

dnslookup result (elapsed 238.0006ms):
;; opcode: QUERY, status: NOERROR, id: 24474
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;cern.ch.       IN       A

;; ANSWER SECTION:
cern.ch.        245     IN      A       188.184.77.250

Тоже самое я вижу, если взять старую версию программы, скомпилированную официально с помощью какого-нибудь Go 1.21. Тут налицо косяк. Помогите его найти, пожалуйста.

<!-- gh-comment-id:2955582512 --> @sergeevabc commented on GitHub (Jun 9, 2025): Андрей, либо мы говорим о разных косяках, либо я не знаю, что и думать. Есть же свежий [Go](https://github.com/XTLS/go-win7/blob/build/README-eng.md) (сейчас это версия 1.24.4), который работает под Windows 7. Ниже с его помощью я компилирую любую Go-программу с сетевым компонентом, пытаюсь соединиться с DoH/DoT-сервером по айпишнику и получаю ошибку. Косяк! ``` console $ ver & go version Microsoft Windows [Version 6.1.7601] go version go1.24.4 windows/amd64 $ git clone https://github.com/ameshkov/dnslookup && cd dnslookup $ go build go: downloading github.com/AdguardTeam/dnsproxy v0.71.1 go: downloading github.com/AdguardTeam/golibs v0.23.2 go: downloading github.com/ameshkov/dnsstamps v1.0.3 go: downloading github.com/miekg/dns v1.1.59 go: downloading github.com/ameshkov/dnscrypt/v2 v2.3.0 go: downloading github.com/quic-go/quic-go v0.43.1 go: downloading golang.org/x/crypto v0.23.0 go: downloading github.com/quic-go/qpack v0.4.0 go: downloading golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842 go: downloading golang.org/x/text v0.15.0 go: downloading github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da go: downloading github.com/aead/poly1305 v0.0.0-20180717145839-3fee0db0b635 $ dnslookup cern.ch https://1.1.1.1/dns-query dnslookup master 2025/06/09 14:58:05 [fatal] Cannot make the DNS request: requesting https://1.1.1.1:443/dns-query: Get "https://1.1.1.1:443/dns-query?dns=AAABAAABAAAAAAAABGNlcm4CY2gAAAEAAQ": tls: failed to verify certificate: x509: certificate is valid for 1.0.0.1, 1.1.1.1, 162.159.36.1, 162.159.46.1, 2606:4700:4700::1001, 2606:4700:4700::1111, 2606:4700:4700::64, 2606:4700:4700::6400, not 1.1.1.1 $ dnslookup cern.ch https://one.one.one.one/dns-query dnslookup master Server: https://one.one.one.one/dns-query dnslookup result (elapsed 238.0006ms): ;; opcode: QUERY, status: NOERROR, id: 24474 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;cern.ch. IN A ;; ANSWER SECTION: cern.ch. 245 IN A 188.184.77.250 ``` Тоже самое я вижу, если взять старую версию программы, скомпилированную официально с помощью какого-нибудь Go 1.21. Тут налицо косяк. Помогите его найти, пожалуйста.
Author
Owner

@ameshkov commented on GitHub (Jun 11, 2025):

Все, сейчас врубился.

  • Go на Windows отдает проверку сертификатов на откуп системным API (Crypt32)
  • При этом в работе на Win7 есть баги, которые исправлять никто конечно не будет, так как Win7 уже сняли с поддержки.

Что можно попробовать если очень нужен именно IP-адрес в домене:

  1. dnslookup вызывать с VERIFY=0 (но это не со всеми Go-программами поможет)
  2. Попробовать полностью отключить сетевой IPv6 интерфейс в Windows. Есть вероятность, что из-за наличия этого интерфейса IP-адрес представлен в IPv6-форме и ::ffff:94.140.14.14
<!-- gh-comment-id:2962028808 --> @ameshkov commented on GitHub (Jun 11, 2025): Все, сейчас врубился. * Go на Windows отдает проверку сертификатов на откуп системным API (Crypt32) * При этом в работе на Win7 есть баги, которые исправлять никто конечно не будет, так как Win7 уже сняли с поддержки. Что можно попробовать если очень нужен именно IP-адрес в домене: 1. `dnslookup` вызывать с VERIFY=0 (но это не со всеми Go-программами поможет) 2. Попробовать полностью отключить сетевой IPv6 интерфейс в Windows. Есть вероятность, что из-за наличия этого интерфейса IP-адрес представлен в IPv6-форме и `::ffff:94.140.14.14`
Author
Owner

@sergeevabc commented on GitHub (Jun 11, 2025):

Андрей, я уже писал, что существуют программы на других языках, которые без проблем подключаются к DoH-серверу по голому айпишнику под Windows 7.

C и C++

Проверяем утилиты curl и dig

$ ver & curl -V & dig -v
Microsoft Windows [Version 6.1.7601]
curl 8.13.0
DiG 9.17.15

$ curl -s -H "accept: application/dns-json" "https://1.1.1.1/dns-query?name=cern.ch" | jq -r .Answer[].data
188.184.77.250

$ dig cern.ch +short +https @1.1.1.1
188.184.77.250

…и популярные браузеры Chrome (109) и Firefox (135).

Rust

Проверяем dns-over-https.

$ dns-over-https -u https://1.1.1.1/dns-query
[INFO  dns_over_https] Listening for DNS requests on 127.0.0.1:53...

$ nslookup cern.ch
Server:  Local
Address:  127.0.0.1

Non-authoritative answer:
Name:    cern.ch
Addresses:  2001:1458:d00:3c::100:2f9
            188.184.77.250

Python

Проверяем dnspython.

$ ver & python --version
Microsoft Windows [Version 6.1.7601]
Python 3.13.2

$ cat doh.py
import httpx
import dns.message
import dns.query
import dns.rdatatype
def main():
    where = "https://1.1.1.1/dns-query"
    qname = "cern.ch"
    with httpx.Client() as client:
        q = dns.message.make_query(qname, dns.rdatatype.A)
        r = dns.query.https(q, where, session=client)
        for answer in r.answer:
            print(answer)
if __name__ == "__main__":
    main()

$ python doh.py
cern.ch. 436 IN A 188.184.77.250

Вывод

Корректная работа упомянутых программ под Windows 7 убеждает меня в том, что языку Go либо недостаёт функциональности подключения к DoH/DoT-серверам по айпишнику, либо она реализована с ошибкой. Значит, это можно исправить именно в рамках сетевой (или крипто) библиотеки Go, не ссылаясь на API Windows.

<!-- gh-comment-id:2962966325 --> @sergeevabc commented on GitHub (Jun 11, 2025): Андрей, я уже писал, что существуют программы на других языках, которые без проблем подключаются к DoH-серверу по голому айпишнику под Windows 7. ## C и C++ Проверяем утилиты [curl](https://curl.se/download.html) и [dig](https://ftp.ripe.net/mirrors/sites/ftp.isc.org/isc/bind/9.17.15/BIND9.17.15.x64.zip)… ``` console $ ver & curl -V & dig -v Microsoft Windows [Version 6.1.7601] curl 8.13.0 DiG 9.17.15 $ curl -s -H "accept: application/dns-json" "https://1.1.1.1/dns-query?name=cern.ch" | jq -r .Answer[].data 188.184.77.250 $ dig cern.ch +short +https @1.1.1.1 188.184.77.250 ``` …и популярные браузеры Chrome (109) и Firefox (135). ![](https://github.com/user-attachments/assets/5117fff6-7833-4214-9d03-04a70893754a) ![](https://github.com/user-attachments/assets/cd253e1d-6e90-4c07-9703-91b000d76845) ![](https://github.com/user-attachments/assets/75e23508-b408-415d-914f-cc2396052836) ## Rust Проверяем [dns-over-https](https://github.com/ssrlive/dns-over-https). ``` console $ dns-over-https -u https://1.1.1.1/dns-query [INFO dns_over_https] Listening for DNS requests on 127.0.0.1:53... $ nslookup cern.ch Server: Local Address: 127.0.0.1 Non-authoritative answer: Name: cern.ch Addresses: 2001:1458:d00:3c::100:2f9 188.184.77.250 ``` ## Python Проверяем [dnspython](https://github.com/rthalley/dnspython). ``` console $ ver & python --version Microsoft Windows [Version 6.1.7601] Python 3.13.2 $ cat doh.py import httpx import dns.message import dns.query import dns.rdatatype def main(): where = "https://1.1.1.1/dns-query" qname = "cern.ch" with httpx.Client() as client: q = dns.message.make_query(qname, dns.rdatatype.A) r = dns.query.https(q, where, session=client) for answer in r.answer: print(answer) if __name__ == "__main__": main() $ python doh.py cern.ch. 436 IN A 188.184.77.250 ``` ## Вывод Корректная работа упомянутых программ под Windows 7 убеждает меня в том, что языку Go либо недостаёт функциональности подключения к DoH/DoT-серверам по айпишнику, либо она реализована с ошибкой. Значит, это можно исправить именно в рамках сетевой (или крипто) библиотеки Go, не ссылаясь на API Windows.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/dnslookup#24
No description provided.