Создание "собственного" comss dns

Может ли данный способ оживить ech?

Создать свой comss dns и проксировать cloudflare-ech.com

нет, ech outer sni с днс не связан

Спасибо. Хорошо получилось. Вот только whois фейлится, если часто запросы отправлять. Зато результаты точнее, чем у системного whois. Системный whois почему-то для filezilla-project.org возвращает netname: STUB-49-12SLASH15.
Могу рассказать как скомпилировать для Linux, там немного хитро. Ну, или спросите у ChatGPT.
Закатываю глаза: а если ещё и проверку http3?

Ну, с фейлами к ARIN я ничего сделать не смогу.

Насчет http3 не уверен. На данный момент утилита обращается только к ДНС и к whois сервису. Насколько мне известно, в них нет информации по поводу поддержки http3 ресурсом. Значит придется делать запрос непосредственно к целевому сайту. А он может быть заблочен или типа того. В итоге, чтобы получить плюс-минус объективный результат, придется сначала делать обычный запрос - чтобы узнать доступен ли сайт в принципе. Короче, морока. Не знаю, нужно ли такое переусложнение?

Насчет компиляции под линукс. У меня нет виртуалки или второй системы. Линукс есть на другом ноуте, но мне впадлу его включать. А выкладывать файл, который может даже не запустится ни у кого - ну такое. Надо всё-таки проверить работоспособность того, что накомпилировал. Поэтому и выкладываю только под винду.
Можно, конечно, загрузиться с флешки, но, опять-таки, мне впадлу.

Из под WSL собирается, писать код можно там же через vscode. Я собрал, но у меня выдает ошибку, но на Винде при этом работает :thinking:.

DNS:    https://dns.controld.com/comss

URL:    intel.com
ERROR response received addr=https://dns.controld.com:443/comss proto=tcp status="requesting https://dns.controld.com:443/comss: Get \"https://dns.controld.com:443/comss?dns=AAABAAABAAAAAAAABWludGVsA2NvbQAAAQAB\": context deadline exceeded"
Critical error: can't finish DNS lookup: can't resolve 'intel.com': requesting https://dns.controld.com:443/comss: Get "https://dns.controld.com:443/comss?dns=AAABAAABAAAAAAAABWludGVsA2NvbQAAAQAB": context deadline exceeded

upd: а, всё норм, надо было таймауты подкрутить (timeout и timeout whois на шестерку выставил, хз норм нет, не шарю)

resolvee.zip (6,3 МБ)

Да скомпилить то я могу. Проблема в том, что мне надо включать другой комп, чтобы проверить работоспособность. Потому что непроверенное я выкладывать не хочу.

ну дык wsl тупо установить, go накатить туда, шо там проверять-то

Места нет на ноуте уже :sob:

Ведь прога может обращаться и к TLS резолверам и в обычных резолверах есть информация о http3, если отправить HTTPS запись.
dig -t https rutracker.org +short | grep h3
Если в ответе alpn=“h3,h2”, то h3 это оно.

Ну вот, например, ответ от резолвера. https://dns.google/resolve?name=www.google.com&rr_type=HTTPS&ecs=
На что тут смотреть? Я не вижу alpn=

Или это нужно именно DoT? DoH не сработает?

DoT и DoH необязательны, но и через них можно посмотреть. И через обычный DNS (UDP), если сделать HTTPS запись.
Видимо, dns.google возвращает не все записи. Вот, что dig показывает:

dig -t https rutracker.org

; <<>> DiG 9.18.1-1ubuntu1.1-Ubuntu <<>> -t https rutracker.org
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 54838
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;rutracker.org. IN HTTPS

;; ANSWER SECTION:
rutracker.org. 263 IN HTTPS 1 . alpn=“h3,h2” ipv4hint=104.21.32.39,172.67.182.196 ech=AEX+DQBBNgAgACD74YZqyZEVewMdSfVXmeZegG6qwHUf9n++UZnZabTBLwAEAAEAAQASY2xvdWRmbGFyZS1lY2guY29tAAA= ipv6hint=2606:4700:3031::6815:2027,2606:4700:3034::ac43:b6c4

;; Query time: 215 msec
;; SERVER: 1.1.1.1#53(1.1.1.1) (UDP)
;; WHEN: Sat Nov 09 18:34:15 +07 2024
;; MSG SIZE rcvd: 190

Более того, браузеры могут использовать запись из DNS и сразу коннектиться по HTTP3.

Нашел. Там действительно есть эта запись, даже от гугл.днс. А в браузере, через их сайт - нет. Странно.

Короче, хз. Вроде сделал, но alpn запись настолько редко встречается… Я её только у гугла и у сайтов с ech наблюдаю. Не уверен, что оно того вообще стоило.

ResolveAndWhois_1.3.zip (6,2 МБ)

1 Like

Спасибо. http3 уже много где используется, но видимо не все анонсируют alpn. По идее, надо также отправлять запрос специальной сборкой curl:
curl --http3-only
Но это, конечно, сложно. Например, домен rr1---sn-aigl6nze.googlevideo.com не имеет h3 записи, но по http3 соединяется.
Бывает даже, что главный сервер http3 не поддерживает, а его cdn соединяется. Например, v19-webapp-prime.tiktok.com
Но всё равно полезно знать хотя бы о явной поддержке http3 в dns. Ещё раз спасибо за труды.

Интересно, что tiktok.com хостится на Amazon, www.tiktok.com на Akamai, а v19-webapp-prime.tiktok.com на Fastly.

А вообще-то информацию о h3 можно узнать из заголовков сервера при коннекте к нему.
Правда, эти два домена не возвращают их и там.
Так что есть 3 варианта:

  1. dns
  2. заголовки сервера
  3. curl --http3-only

Я, кстати, собрал uGet с libcurl/http3. Первая многопоточная качалка с поддержкой QUIC.
Всего-то вставил строчку curl_easy_setopt (curl, CURLOPT_HTTP_VERSION, 30); в исходники и закомментил запрет проверки сертификатов.
Ждал помощи от ChatGPT, но у него лимиты истекли до следующих суток. В результате сам разобрался. Ну, конечно, ещё нужен shared curl с http3, у меня с quiche.

Самое главное нет размышлений на тему технологии создания своего “собственного” comss dns :sweat_smile:

Условия: есть арендованный зарубежный VPS.
Задача: создать свой DNS на базе VPS для открытия нужных сайтов прописанных в AdGuard Home такового вида:
[/example.com/example2.com/example3.com/]x.x.x.x

Вариант минимум - выдача адресов от DNS только для прописанных доменов на VPS для прокси. Для всех других сайтов DNS работать не будет.
Вариант максимум - выдача адресов от DNS как для прописанных доменов на VPS для прокси, так и для всех других сайтов только уже с реальными адресами без прокси.
То есть как сейчас работает сам comss.

Буду очень рад обсудить возможные способы реализации :handshake:

Nginx sni proxy
Adguard home

уже оставлял сообщение в начале темы

Помогите пожалуйста разобраться.

Есть VPS с Adguard Home + Sing-Box.

В AGH прописано так:

94.140.14.14
94.140.15.15
[/canva.com/browserleaks.com/2ip.ua/2ip.ru/]127.0.0.1:443

В Sing-Box прописано так:

{
    "dns": {
        "servers": [
            {
                "address": "94.140.14.14",
                "detour": "direct",
                "strategy": "prefer_ipv4",
                "tag": "dns-remote"
            }
        ]
    },
    "inbounds": [
        {
            "domain_strategy": "prefer_ipv4",
            "listen": "0.0.0.0",
            "listen_port": 443,
            "sniff": true,
            "sniff_override_destination": true,
            "tag": "direct-proxy",
            "type": "direct"
        }
    ],
    "log": {
        "level": "debug"
    },
    "outbounds": [
        {
            "tag": "direct",
            "type": "direct"
        },
        {
            "tag": "block",
            "type": "block"
        },
        {
            "tag": "dns-out",
            "type": "dns"
        }
    ],
    "route": {
        "final": "block",
        "rules": [
            {
                "outbound": "dns-out",
                "protocol": "dns"
            },
            {
                "domain": [
                    "2ip.ru",
                    "2ip.ua",
                    "canva.com",
                    "browserleaks.com"
                ],
                "outbound": "direct"
            }
        ]
    }
}

В Adguard Home уже на своем роутере прописано так:

[/2ip.ru/2ip.ua/browserleaks.com/canva.com/rutracker.org/]XX.XXX.XXX.XX (мой внешний IP VPS)

nslookup на роутере дает так:

traceroute to 2ip.ru (127.0.0.1), 30 hops max, 60 byte packets
 1  localhost.localdomain (127.0.0.1)  0.058 ms  0.027 ms  0.026 ms

Почему AGH на VPS не передает запрос на Sing-Box, а отвечает точным адресом 127.0.0.1?

он не должен это делать, днс сервер никак не связан с sing-box, он должен только подменять ответы на нужные вам домены и возвращать vps_ip. Правило в днс сервере должно быть “address 2ip.ru / vps_ip”, а не “server 2ip.ru / 127.0.0.1:443”