Заметка о dnstt, и ssh❤️dnstt
Чтобы понять, как работает dnstt, сделаем такой опыт.
В линуксе в одном терминале запустим команду netcat
ncat -l -k -v 127.0.0.1 8000
а в другом терминале netcat с другими опциями:
ncat -v 127.0.0.1 8000
Теперь всё, что вы будете писать в одном терминале, будет появляться в другом, и наоборот. Такой же канал, только зашифрованный, dnstt создаёт между клиентом и сервером с помощью dns запросов-ответов. Для соединения клиента и сервера клиенту понадобится ключ, сгенерированный при установке dnstt.
Логичный вопрос: если что-то происходит в "терминале" сервера, как это будет передано клиенту, ведь dns запросов в этот момент не происходит? Похоже, серверу приходится держать буфер под это, a клиенту довольно часто посылать dns запросы.
Ещё одно замечание. На клиенте для dns запросов используйте doh (dns-over-https), чтобы ваше соединение покрылось ещё одним слоем шифрования. Иначе "наблюдатьль" увидит довольно странные и нетипичные dns запросы.
Итак, для установки проще всего использовать скрипт dnstt-deploy.
Понадобится доменное имя (на сайте Селектела можно купить за 130 рублей в год), и скорость будет не больше 0.5-1.5 Мб/с. Весь процесс описан по ссылке, я лишь отмечу детали, которые инструкция освещает не очень понятно.
Меня интересует ssh-доступ к серверу, на который ставится dnstt, и dnstt-deploy для этого очень подходит. В режиме ssh mode (option 2) создаётся netcat туннель прямо на порт, который слушает sshd на сервере. (А в режиме socks пользователь попадает прямо на вход socks5-прокси, который просто даёт выход в интернет с сервера.)
На клиенте для подключения к ssh-демону сервера (нестандартный порт определится автоматически) достаточно запустить всего две команды (в файл dnstt-key.pub просто скопируйте ключ, полученный при установке):
./dnstt-client-linux-amd64 -doh https://dns.google/dns-query -pubkey-file ./dnstt-key.pub t.yourdomain.org 127.0.0.1:7000
ssh username@127.0.0.1:7000
Чтобы упростить себе жизнь, в ~/.bashrc можно создать alias для клиента dnstt, а опции ssh для подключения поместить в ~/.ssh/config:
Host my_server-via-dnstt
HostName my_server
User my_username
Port my_port
IdentityFile ~/.ssh/my_id_ecdsa
ProxyCommand nc -w 10 127.0.0.1 7000
Тогда подключиться можно будет, просто выполнив ssh my_server-via-dnstt.
Траблшутинг
Если под sudo не видна команда dnstt-deploy, попробуйте
sudo env "PATH=$PATH" bash -c 'dnstt-deploy'
Если сервис не запускается, стоит проверить, не занят ли порт 5300 с помощью ss -tunlp.
Если сервис dnstt-server не запускается (systemctl status dnstt-server показывает activating), и если команда getenforce выдаёт Enforcing, попробуйте
sudo restorecon -v /usr/local/bin/dnstt-server
ODIN MK2
Сможет ли dnstt обойти белые списки? Просто не хочется играть в лотерею и покупать российские серверы в ожидании попадания их в белые списки.
Apr 05 06:46