Цель данной статьи - рассказать как пользоваться CloudFlare Warp везде, где только можно и нельзя.
Это мощнейший сервис, и на фоне только что прошедших “учений” может показаться, что не ровен час, и мы его потеряем. Но не будем опускать руки и посмотрим на то, как можно гибко настраивать Warp.
Я опишу довольно тяжелый случай внедрения Warp в организации, где на корпоративном уровне сделано многое, чтобы пользоваться было нельзя. А именно. Доступ к сайту https://1.1.1.1 закрыт, доступ ко всем четырем рекомендуемым в Chrome/Edge серверам DoH закрыт. QUIC полностью вырублен. Но при этом nslookup через 1.1.1.1 спокойно работает.
Начнем с установки. Прежде всего рассмотрим Windows. Если нет доступа на сайт 1.1.1.1, то клиент можно скачать с другого App Center. Клиент огромный, 120 Мб по сравнению с трехмегабайтным WG - просто монстр, но много у него под капотом. После установки первый и важный этап - регистрация. Здесь как раз цензор установил запрет. Не удается получить нужный отклик tcp с сайта api.cloudflareclient.com, чтобы завершить регистрацию нового клиента. Здесь администратору компьютера нужно преодолеть блокировку (я описываю случай, когда в организации сотрудники работают в доменной среде ActiveDirectory, есть администратор, который настраивает Warp на компьютере, а затем сотрудники без админправ входят на него и работают). Простейший вариант - использовать zapret для Windows, а именно запустить скрипт blockcheck с прицелом на сайт cloudflareclient.com и посмотреть, какая стратегия сработает. В моем случае получается такая строка для запуска winws:
–wf-tcp=443 --filter-tcp=443 --hostlist-domains=cloudflareclient.com --dpi-desync=multidisorder --dpi-desync-split-pos=2
После запуска winws регистрация Warp проходит без проблем, и в обычном случае это всё, конец истории. CF Warp дальше все берет на себя и работает. Но в описанной выше среде это только первый этап. Подключение с параметрами Warp по умолчанию не работает ни в какую. Тут на помощь приходит изучение в командной строке утилиты warp-cli, у которой множество параметров.
Чтобы сократить повествование, опишу, что пришлось сделать мне. Прежде всего переключить протокол работы с MASQUE (который QUIC) на Wireguard:
warp-cli tunnel protocol set WireGuard (регистр важен)
Затем меняем endpoint, поскольку engage.cloudflare.com недоступен:
warp-cli tunnel endpoint set 188.114.9x.xx:yyy
Какой endpoint вам доступен, легко определить при помощи утилиты peanut996/CloudflareWarpSpeedTest: WARP IP 优选工具, благо она есть под все платформы. Пытливый ум, посмотрев код на гитхабе, легко увидит, что именно пингует утилита
CloudflareWarpSpeedTest/task/warping.go at master · peanut996/CloudflareWarpSpeedTest
Программа на выходе выдаст result.csv, уже отсортированный по наименьшей задержке. Берем пару ip;порт и вставляем в строку с установкой endpoint’а. Перезапускаем сервис CloudflareWARP (возможно, и не раз) и пробуем выполнить подключение в клиенте Warp - двигаем оранжевый рычаг. Запущенный winws можно пока не закрывать. Наблюдаем процесс подключения - он не быстрый. Если не вышло с первого раза, пробуем снова. Иногда может потребоваться поменять endpoint, перезапустить сервис и снова попробовать. Если подключение произошло, всё, оно теперь будет работать. Это настолько комфортно, что забываешь про то, что какие-то сайты заблокированы, мы не говорим о тех, кто не пускает из РФ, потому что мы продолжаем оставаться в РФ. Вспоминаешь только тогда, когда не удается получить доступ к российскому сайту, который боится непонятного ip-адреса CF (а включается и ipv4, и ipv6, и QUIC заодно). Пусть это сайт mos.ru. Вот тут начинаешь ценить монстра. Warp позволяет добавлять “на лету” исключения. И не только по ip-адресу, хоть так лучше, но и по имени домена. И не только по имени домена, но и по имени домена с поддоменами. Честно добавляем и mos.ru, и *.mos.ru, потому что мне надо получать доступ на всякие там school.mos.ru - и все буквально через секунды начинает работать. Warp умеет прямо на ходу перехватывать вызовы к поддоменам и тут же добавлять нужный пункт в таблицу маршрутизации. Это работает так на Windows/Mac/Linux и не работает так на iOS/Android/ChromeOS. Подробности в не очень подробной документации от CF:
Split Tunnels · Cloudflare Zero Trust docs
Позаботились о доменных пользователях. Функция Local Domain Fallback позволяет добавить в таблицу исключений локальные домены, чтобы продолжало правильно работать разрешение имен в локальной сети. Мне приходилось после добавления локального домена в исключение перезапускать сервис, чтобы оно начинало работать. Потом опять же все работало без проблем.
Для добавление доменов/ip в исключения для раздельного туннелирования в GUI Warp нужно нажать в шестеренку, Настройки, Дополнительно, Исключить разделенные туннели. Там же пункт для добавления исключений локальных доменов. В warp-cli для этого выполняется:
warp-cli tunnel host add (или warp-cli tunnel ip add)
Напомню, задача не просто запустить Warp на локальном компьютере у админа, а сделать так, чтобы работало у любого другого пользователя, вошедшего на комп с обычными правами. Здесь сценарий следующий. Пользователь входит на комп, сервис Warp уже работает, но новому пользователю нужно выполнить регистрацию. Админ потребуется, чтобы запустить winws (если мы используем zapret), после этого регистрация нового пользователя произойдет, и дальше Warp уже сам подключится и заработает. Для данного пользователя дальше все будет работать без участия админа, без winws. Если юзеру требуются свои исключения в туннелировании, он добавляет их через настройки клиента самостоятельно. Единственная проблема - если этот юзер носит свой ноутбук с работы домой. Дома Warp может не подключиться, потому что дома, например, заработает MASQUE и не заработает Wireguard. Для изменения параметров warp-cli требуются права администратора. В этом случае, лучше избрать разные решения для дома и офиса. Warp позволяет отключить себя из автозагрузки Windows, чтобы не включаться сразу после входа пользователя в систему.
Что с Линукс? Cloudflare выкатывает весьма сжатые инструкции для линуксоидов. В госорганизациях встречается Astra Linux, которая deb, и для которой потребуется немного поменять скрипт установки.
Здесь pkg.cloudflareclient.com слишком смело указано
echo “deb [signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] https://pkg.cloudflareclient.com/ $(lsb_release -cs) main” | sudo tee /etc/apt/sources.list.d/cloudflare-client.list
Астра такого не понимает, ей надо так
deb [signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] https://pkg.cloudflareclient.com/ jammy main | sudo tee /etc/apt/sources.list.d/cloudflare-client.list
Тогда все устанавливается как надо.
Для Rosa Linux (которая в Москве распространена как MOS12), поскольку она rpm, все работает прямо из коробки. Никакого GUI от CF для обычного Warp не предусмотрено, предусмотрен только для Warp+, но есть под Линукс несколько GUI, один из которых у меня завелся, он есть в репозитории Rosa
AKotov-dev/warpgui: GUI for Cloudflare ™ WARP
Для преодоления блокировки при регистрации могу рекомендовать также zapret. Устанавливать даже необязательно. Достаточно вызвать ./nfqws --filter-tcp=443 --hostlist-domains=cloudflareclient.com (далее все те же параметры) --qnum=1
Дальше все из той же командной строки запускаем /usr/bin/warp-cli с теми же параметрами, что для Windows. B конце даем warp-cli connect и получаем работающий Warp.
Для MacOS все то же самое, только вместо nfqws надо использовать tpws (и разбираться с прозрачным прокси), но здесь я пас, потому что мака подходящего у меня нет, а на старый встает только довольно древняя версия Warp. в которой у warp-cli нет еще параметра tunnel
Приведу на всякий случай ссылку на хранилище с разнообразными версиями под Mac
App Center
Для iOS и Android клиентов не предусмотрен клиент командной строки, здесь без смены протокола и Endpoint сделать ничего в компании нельзя. Ну что же, AmneziaWG и warp.llimonix.pw выручают, только вот endpoint в conf-файле лучше исправить на свой, поближе.
А можно чтобы без регистраций и смс чтобы скачал и сразу запустил?
Оно так и есть. Все автоматом, даже почту вводить не нужно.
Регистрация здесь - чистая формальность; в нормальной обстановке (без цензуры) это один шаг мастера установки; из серии далее-далее. Соответствует команде warp-cli register - создается уникальный ключ пользователя, который можно наблюдать в пункте Настройки, Учетная запись
Без ip/nf tables nfqws не будет ничего делать
“починил”
перенес на :800 порт (было :8000)
как оказалось там обычно какие то виндовые сервисы висят судя по гуглу
не нашел. может тут ктото знает
куча каких то мусорных сообщений
причем не могу понять кто коннектится и куда. ни адреса клиента. ни URL
отключил в браузерах и прокси. всё равно ктото куда то якобы соединяется
warp+ windows10
C:\TOR_Warp_plus\warp-plus.exe
-6 --scan --gool --bind 192.168.1.111:800 --dns 9.9.9.9 --cache-dir c:\tor_warp_plus\logs\1
Спойлер
time=2025-03-29T06:05:55.965+03:00 level=ERROR msg=“malformed HTTP request "\x00\x00\x00 c\x00\x00\x00l\xf2پ\ тут-вырезал-лишнее \xb1\x00\x00"”
time=2025-03-29T06:06:36.011+03:00 level=ERROR msg=“malformed HTTP request "\x00\x00\x00 c\x00\x00\x00l\ тут-вырезал-лишнее \xb1\x00\x00"”
time=2025-03-29T06:07:00.870+03:00 level=ERROR msg=“malformed HTTP request "\x00\x00\x00 c\x00\x00\x00ճ тут-вырезал-лишнее \xb1\x00\x00"”
time=2025-03-29T06:07:04.430+03:00 level=ERROR msg=“malformed HTTP request "\x00\x00\x00 c\x00\x00\x00:\u074c\ тут-вырезал-лишнее \xb1\x00\x00"”
time=2025-03-29T06:07:16.080+03:00 level=ERROR msg=“malformed HTTP request "\x00\x00\x00 c\x00\x00\x00l\xf2\ тут-вырезал-лишнее \xb1\x00\x00"”
time=2025-03-29T06:07:21.086+03:00 level=ERROR msg=“malformed HTTP request "\x00\x00\x00 c\x00\x00\x00\x1b3E\ тут-вырезал-лишнее \xb1\x00\x00"”
warp+ всё таки странный
-
на IPv6 не работает gool
-
ДНС можно как я понял прописывать только plain-UDP вроде 1.1.1.1 / 8.8.8.8 / 9.9.9.9 /etc
причем немало каких то левых ошибок
c “родным” 1.1.1.1 ошибок было намного больше
Спойлер
warp0.out.log:time=2025-03-30T15:04:29.769+03:00 level=ERROR msg=“dial: lookup fonts.gstatic.com. on 9.9.9.10: read udp 172.16.0.2:23438: i/o timeout”
warp0.out.log:time=2025-03-30T20:24:26.662+03:00 level=ERROR msg=“dial: lookup ctldl.windowsupdate.com. on 9.9.9.10: read udp 172.16.0.2:45815: i/o timeout”
warp0.out.log:time=2025-03-30T20:24:36.682+03:00 level=ERROR msg=“dial: lookup ctldl.windowsupdate.com. on 9.9.9.10: read udp 172.16.0.2:59433: i/o timeout”
warp0.out.log:time=2025-03-30T20:57:11.708+03:00 level=ERROR msg=“dial: lookup geo.prod.do.dsp.mp.microsoft.com. on 9.9.9.10: read udp 172.16.0.2:61710: i/o timeout”
warp0.out.log:time=2025-03-30T20:57:23.755+03:00 level=ERROR msg=“dial: lookup kv601.prod.do.dsp.mp.microsoft.com. on 9.9.9.10: read udp 172.16.0.2:33415: i/o timeout”
warp0.out.log:time=2025-03-30T23:45:26.077+03:00 level=ERROR msg=“dial: lookup video7.xhcdn.com. on 9.9.9.10: read udp 172.16.0.2:59714: i/o timeout”
warp0.out.log:time=2025-03-31T01:29:25.378+03:00 level=ERROR msg=“dial: lookup geo.prod.do.dsp.mp.microsoft.com. on 9.9.9.10: read udp 172.16.0.2:44935: i/o timeout”
warp0.out.log:time=2025-03-31T01:29:33.366+03:00 level=ERROR msg=“dial: lookup kv801.prod.do.dsp.mp.microsoft.com. on 9.9.9.10: read udp 172.16.0.2:43336: i/o timeout”
warp0.out.log:time=2025-03-31T01:29:40.750+03:00 level=ERROR msg=“dial: lookup kv801.prod.do.dsp.mp.microsoft.com. on 9.9.9.10: read udp 172.16.0.2:26470: i/o timeout”
warp0.out.log:time=2025-03-31T13:03:49.970+03:00 level=ERROR msg=“dial: lookup assets.msn.com. on 9.9.9.10: read udp 172.16.0.2:50888: i/o timeout”
warp0.out.log:time=2025-03-31T13:03:49.970+03:00 level=ERROR msg=“dial: lookup assets.msn.com. on 9.9.9.10: read udp 172.16.0.2:19166: i/o timeout”
warp0.out.log:time=2025-03-31T13:03:49.970+03:00 level=ERROR msg=“dial: lookup assets.msn.com. on 9.9.9.10: read udp 172.16.0.2:34046: i/o timeout”
warp0.out.log:time=2025-03-31T13:03:49.970+03:00 level=ERROR msg=“dial: lookup assets.msn.com. on 9.9.9.10: read udp 172.16.0.2:39055: i/o timeout”
warp1.out.log:time=2025-03-30T20:57:36.458+03:00 level=ERROR msg=“dial: lookup login.live.com. on 9.9.9.9: read udp 172.16.0.2:35358: i/o timeout”
warp1.out.log:time=2025-03-30T20:57:42.722+03:00 level=ERROR msg=“dial: lookup ecs.office.com. on 9.9.9.9: read udp 172.16.0.2:36323: i/o timeout”
warp1.out.log:time=2025-03-30T20:57:46.300+03:00 level=ERROR msg=“dial: lookup login.live.com. on 9.9.9.9: read udp 172.16.0.2:39651: i/o timeout”
- оно странно дружит с http-proxy / socks5
curl // firefox / chrome работают и так и так
squid / privoxy работает только как http-proxy НО при обращениях на http: опять же множественные ошибки
хотя и не только http:
у меня в основном пока windows/microsoft//google/etc туда завернуты. остальное в opera-proxy/VPN/IPv6 на данный момент
Спойлер
это после sort --unique
TCP_MISS/502 http://ctldl.windowsupdate.com/msdownload/update/v3/static/trustedr/en/pinrulesstl.cab?
TCP_MISS/504 http://ctldl.windowsupdate.com/msdownload/update/v3/static/trustedr/en/authrootstl.cab?
TCP_MISS_ABORTED/000 http://c.pki.goog/r/r1.crl
TCP_MISS_ABORTED/000 http://download.windowsupdate.com/c/msdownload/update/others/2025/03/43045252_bd27e8f0683262ad8f1fe544db3e4bd98130e576.cab
TCP_MISS_ABORTED/000 http://download.windowsupdate.com/c/msdownload/update/others/2025/03/43045261_09188e0dec33ec9faad5143ba3fb9d9f99d4c055.cab
usque.exe (warp + MASQUE)
- не умеет scan
- чтобы работал по IPv6 надо руками менять IPv4 end-point
- может у меня что то (windows + Ростелеком) но слишком много реконнектов
на IPv4 было так же часто. а потом Ростелеком забанил все IPv4 которые генерировал usque.exe register. руками пытался подставлять рабочие из warp+ не помогло. разные ошибки (видимо не все сервера подходят.)
Спойлер
2025/03/29 12:40:10 Establishing MASQUE connection to 2606:4700:103::1:443
2025/03/29 12:45:11 handling stream failed: H3_NO_ERROR
2025/03/29 12:45:11 Tunnel connection lost: failed to read from IP connection: stream 0 canceled by remote with error code 256. Reconnecting…
2025/03/29 12:45:11 writing to stream failed: use of closed network connection
2025/03/29 12:45:12 Establishing MASQUE connection to 2606:4700:103::1:443
2025/03/29 12:50:12 handling stream failed: H3_NO_ERROR
2025/03/29 12:50:12 Tunnel connection lost: failed to read from IP connection: stream 0 canceled by remote with error code 256. Reconnecting…
2025/03/29 12:50:12 writing to stream failed: use of closed network connection
2025/03/29 12:50:13 Establishing MASQUE connection to 2606:4700:103::1:443
2025/03/29 12:55:14 handling stream failed: H3_NO_ERROR
2025/03/29 12:55:14 Tunnel connection lost: failed to read from IP connection: stream 0 canceled by remote with error code 256. Reconnecting…
2025/03/29 12:55:14 writing to stream failed: use of closed network connection
2025/03/29 12:55:15 Establishing MASQUE connection to 2606:4700:103::1:443
2025/03/29 13:00:15 handling stream failed: H3_NO_ERROR
2025/03/29 13:00:15 Tunnel connection lost: failed to read from IP connection: stream 0 canceled by remote with error code 256. Reconnecting…
2025/03/29 13:00:15 writing to stream failed: use of closed network connection
2025/03/29 13:00:16 Establishing MASQUE connection to 2606:4700:103::1:443
2025/03/29 13:05:17 handling stream failed: H3_NO_ERROR
2025/03/29 13:05:17 Tunnel connection lost: failed to read from IP connection: stream 0 canceled by remote with error code 256. Reconnecting…
2025/03/29 13:05:17 writing to stream failed: use of closed network connection
2025/03/29 13:05:18 Establishing MASQUE connection to 2606:4700:103::1:443
2025/03/29 13:10:18 handling stream failed: H3_NO_ERROR
2025/03/29 13:10:18 Tunnel connection lost: failed to read from IP connection: stream 0 canceled by remote with error code 256. Reconnecting…
2025/03/29 13:10:18 writing to stream failed: use of closed network connection
2025/03/29 13:10:19 Establishing MASQUE connection to 2606:4700:103::1:443
2025/03/29 13:15:19 handling stream failed: H3_NO_ERROR
2025/03/29 13:15:19 Tunnel connection lost: failed to read from IP connection: stream 0 canceled by remote with error code 256. Reconnecting…
2025/03/29 13:15:19 writing to stream failed: use of closed network connection
2025/03/29 13:15:20 Establishing MASQUE connection to 2606:4700:103::1:443
вспомнил
3 разных warp+//usque = IPv4 gool / IPv6 + DNS IPv6 / MASQUE
start pd.exe^
-proxies=http://192.168.1.111:800,http://192.168.0.111:800,http://127.0.0.1:800^
-netprobeurl=https://dns.google^
-proxyprobeurl=https://rutracker.org/myip^
-listens=127.0.0.1:6699,192.168.1.111:6699,192.168.0.111:6699^
-direct=./_PD_direct.txt^
-blocked=./_PD_blocked.txt^
-statfile=./PD_stat.json
есть еще COW но у него немного другая логика “выбора” прокси
Как верно замечено выше, для работы в Линукс потребуется настроить правила для nftables/iptables, чтобы те перенаправляли нужные пакеты в пространство пользователя, где их будет обрабатывать nfqws.
Так как задача наша - преодолеть единственный барьер, не позволяющий зарегистрировать клиента в сети CF, то и правила будут простые. Покажу связку между nfqws и nftables.
Вот такие три строки создают нужное условие для передачи в очередь:
nft create table inet warp
nft add chain inet warp post "{type filter hook postrouting priority mangle;}"
nft add rule inet warp post tcp dport 443 ct original packets 1-6 queue num 111 bypass
и вот команда для nfqws:
./nfqws --filter-tcp=443 --hostlist-domains=api.cloudflareclient.com --dpi-desync=multidisorder --dpi-desync-split-pos=2 --qnum=111
После этого warp-cli registration new заканчивается успехом. Даем те же команды по смене протокола (это только в том случае, если в сети не работает QUIC) и endpoint (это тоже в том случае, если указанный по умолчанию engage. заблокирован). И наконец warp-cli connect.
та же история с прекрасными средствами, созданными энтузиастами, перечисленными выше.
И wgcf, и warp-plus, и usque при регистрации будут спотыкаться из-за блокировки со стороны ТСПУ. Им нужно помогать тем же методом: либо при помощи winws/nfqws, либо другим инструментом вроде v4freedom/xray/etc. Как только регистрация произойдет, можно использовать CF Warp полноценно.
Я отдаю предпочтение собственно клиенту Cloudflare Warp за то, что он берет на себя все заботы, позволяет переставать думать о блокировках, а просто спокойно работать в Сети.
не помню умеет ли родной psiphon IPv6
но warp+ в режиме --cfon ошибку выдает
warp+ / usque // warp+ cfon
curl.exe --connect-timeout 15 -x 192.168.0.111:808 https://ipv6.2ip.io
2a09:bac1:6180:3380::57:253
curl.exe --connect-timeout 15 -x 127.0.0.1:808 https://ipv6.2ip.io
2a09:bac1:61e0::9e:26
curl.exe --connect-timeout 15 -x 127.0.0.1:8680 https://ipv6.2ip.io
curl: (56) Proxy CONNECT aborted
curl.exe --connect-timeout 15 -x 127.0.0.1:8680 https://[2606:4700:4700::1111]/cdn-cgi/trace
curl: (56) Proxy CONNECT aborted
Спойлер
curl.exe --connect-timeout 15 -x 127.0.0.1:8680 https://1.1.1.1/cdn-cgi/trace
ip=88.208.226.216
colo=LHR
loc=GB
Умеет.
ага. просто обычная (без TM патча Валдика) ну очень долго запускалась
curl.exe --connect-timeout 15 -x 127.0.0.1:13128 https://2ip.ru
50.116.27.113
curl.exe --connect-timeout 15 -x 127.0.0.1:13128 https://ipv6.2ip.io
2600:3c00::f03c:91ff:fe84:473b
curl.exe --connect-timeout 15 -x socks5://127.0.0.1:11080 https://ipv6.2ip.io
2600:3c00::f03c:91ff:fe84:473b
@ alk2ntc
Спасибо за инфу, слава богу у меня все заработало сразу, “из коробки”. Ради интереса попробовал сделать по инструкции, но пинг вырос с 20-23 ms (при дефолтных настройках) до 50+ при ручном указывании эндпоинта, пришлось откатить изменения.
Всем привет можете подсказать что делаю не так. Не понимаю как получить endpoint
скачал warp, установил утилиту CloudflareWarpSpeedTest
выполнил warp-cli tunnel protocol set WireGuard
и при попыткеп олучить endpoint ничего не выходит
warp-cli нужно использовать, если сразу подключиться не удается. Сначала пробуйте обычные способы, по умолчанию CF использует Masque. Если quic в вашей сети не прибит, то нет смысла менять протокол на WireGuard, который как раз и может оказаться заблокированным. Описанный у меня случай - это извращение, которое встречается в бюджетных организациях, подключенных через МГТС.
CloudflareWarpSpeedTest - это программа, которую нужно запускать независимо от подключения к Warp, то есть напрямую, через обычного провайдера. Она подскажет к какому endpoint’у есть подключение.
я пробовал запускать команду от провайдера без(с) warp и получаю тот же самый результат
CloudflareWarpSpeedTest -n 200 -t 10 -c 5000 -tl 300 -tll 0 -tlr 0.2 -p 10 -f ip.txt -ip 1.1.1.1 -o result.csv -all
Или заблокированным может оказаться как раз MASQUE, как у меня, например. Причем квик не прибит отслова совсем.
Пытался этот блок запретом пробить, но успеха не достиг (хотя сильно и не пытался). Вайр летает без проблем.
На случай нестандартного поведения у warp-cli есть режим дебага, встроенными средствами позволяет производить захват трафика для дальнейшего анализа Wireshark. Команда:
warp-cli debug pcap start
включает запись в файл. А команда:
warp-cli debug pcap stop
выключает. Файл создается в папке C:\ProgramData\Cloudflare\packet_captures
Приведу здесь файл, который позволяет преодолеть блокировку регистрации. Параметры разблокировки подобраны по результатам работы blockcheck.sh и подходят, как ни странно, не только для МГТС, но и для РТ. Может, подойдут и для вас.
mgts_warp.7z (956,9 КБ)
Понятно, что если диапазоны endpoint’ов CF заблокированы по ip, то тут уж никакие фейки не помогут. Но все же стоит проверить, подключившись через какой-нибудь VPN и посмотреть, как будет работать CloudflareWarpSpeedTest в этом случае. Рекомендую Windscribe, 10Gb в месяц бесплатно. Все клиенты есть на гитхабе. У меня Windscribe пробивается к своим endpoint’ам по их собственным UDP и Stealth.
Главное достоинство CF Warp, что если уж подключилось, то держится несмотря ни на что.
была такая же проблема, просто запустите не через командную строку, а просто кликните дважды лкм. Она просканит и выдаст файл с результатами