Firefox 149 поставляется с бесплатным VPN

спасибо)

выкл

видимо, предполагается, что заниматься dns-резолвом будет сервер, а не клиент.
у меня системный DoH-прокси перехватывает 53 порт, после включения vpn на 53 уже ничего не отправляется, все dns запросы обслуживает vpn сервер.

а любой dns чекер какой dns сервер показывает? doh браузера или от vpn?

У меня Firefox 149 запускался на провайдерском IP (без ВПН-а). Включателя VPN не было. Добавил включатель через настройки. VPN включался, но Интернет не работал совсем. DoH был на максимальной защите. Отключил DoH - Интернет заработал. По первому впечатлению открываются сайты заблокированные как изнутри, так и извне.

от vpn
Но у меня др глюк - “В этом месяце осталось 0 мб из 0 гб”
Не знаю, это просто отображение кривое, или реально счетчик сброшен. При этом все работает)

С альтернативными DoH (не от Cloudflare) тоже похоже работет.

Спойлер
curl -v -x https://eglc860.m1.fastly-masque.net:2499 https://example.com
* Host eglc860.m1.fastly-masque.net:2499 was resolved.
* IPv6: 2a04:4e41:8001::10
* IPv4: 23.235.42.10
*   Trying [2a04:4e41:8001::10]:2499...
* Connected to eglc860.m1.fastly-masque.net (2a04:4e41:8001::10) port 2499
* ALPN: curl offers http/1.1
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
*  CAfile: /etc/ssl/certs/ca-certificates.crt
*  CApath: /etc/ssl/certs
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384 / X25519 / id-ecPublicKey
* ALPN: server accepted http/1.1
* Proxy certificate:
*  subject: C=US; ST=California; L=San Francisco; O=Fastly, Inc.; CN=*.m1.fastly-masque.net
*  start date: Oct  2 14:51:15 2025 GMT
*  expire date: Nov  3 14:51:14 2026 GMT
*  subjectAltName: host "eglc860.m1.fastly-masque.net" matched cert's "*.m1.fastly-masque.net"
*  issuer: C=BE; O=GlobalSign nv-sa; CN=GlobalSign ECC OV SSL CA 2018
*  SSL certificate verify ok.
*   Certificate level 0: Public key type EC/prime256v1 (256/128 Bits/secBits), signed using ecdsa-with-SHA384
*   Certificate level 1: Public key type EC/secp384r1 (384/192 Bits/secBits), signed using ecdsa-with-SHA384
*   Certificate level 2: Public key type EC/secp384r1 (384/192 Bits/secBits), signed using ecdsa-with-SHA384
* CONNECT tunnel: HTTP/1.1 negotiated
* allocate connect buffer
* Establish HTTP proxy tunnel to example.com:443
> CONNECT example.com:443 HTTP/1.1
> Host: example.com:443
> User-Agent: curl/8.5.0
> Proxy-Connection: Keep-Alive
>
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
< HTTP/1.1 400 Bad Request (JWT)
< Connection: close
< Content-Length: 19
< x-fastly-proxy-auth-failed: parse_failure
< content-type: text/plain; charset=utf-8
< x-served-by: cache-lcy-eglc8600051
<
* CONNECT tunnel failed, response 400
* Closing connection
* TLSv1.3 (OUT), TLS alert, close notify (256):
* TLSv1.3 (IN), TLS alert, close notify (256):
curl: (56) CONNECT tunnel failed, response 400

ChatGPT говорит, что
:white_check_mark: используется HTTP CONNECT
:white_check_mark: авторизация через JWT
:white_check_mark: проверка происходит на стороне Fastly

Как получить этот JWT и свой firefox-proxy сделать…

пробовал под разными айпи создать аккаунты лисы, чтобы трафика ограничение преодолеть? есть ли информация будут ли у них другие endpoints например в европе?

Исходный код этого модуля впн тут лежит. Так что тем кто знает Go навайбкодить usque под firefox не составит труда, наверное..
при подключении генерируется access токен https://api.accounts.firefox.com/v1/oauth/token
потом он используется для получения токена для masque https://vpn.mozilla.org/api/v1/fpn/token
Получается ещё один повод заблокировать github из-за fastly…

При чем тут github? Он на fastly, но на своих айпи диапазонах на которых больше ничего нет

Получив токен можно сразу проверить, там похоже обычный прокси сервер

Спойлер
curl -x https://p.m1.fastly-masque.net:2499 \
  -H "Proxy-Authorization: Bearer <JWT>" \
  https://example.com

Из логов firefox

Спойлер
2026-04-05 09:04:28.868000 UTC - [Parent 8628: Socket Thread]: E/nsHttp TlsHandshaker::SetupSSL 1cd8f80da00 caps=0x1201001 TS........[tlsflags0x00000000]2ip.ru:443 (https:p.m1.fastly-masque.net:2499)[:]{CIK 8mvsbyelwfh00000}{TPRH}
2026-04-05 09:04:28.868000 UTC - [Parent 8628: Socket Thread]: V/nsHttp HttpConnectionBase::ChangeConnectionState this=1cd8f80da00 (1->4)
2026-04-05 09:04:28.868000 UTC - [Parent 8628: Socket Thread]: V/nsHttp HttpConnectionBase::ChangeState 0 -> 1 [this=1cd8f80da00]
2026-04-05 09:04:28.868000 UTC - [Parent 8628: Socket Thread]: V/nsHttp nsHttpConnection::SetupStream
2026-04-05 09:04:28.868000 UTC - [Parent 8628: Socket Thread]: V/nsHttp nsHttpConnection::MakeConnectString for transaction=1cd90968b00 h2ws=0[
2026-04-05 09:04:28.868000 UTC - [Parent 8628: Socket Thread]: E/nsHttp   CONNECT 2ip.ru:443 HTTP/1.1
2026-04-05 09:04:28.868000 UTC - [Parent 8628: Socket Thread]: E/nsHttp   User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:149.0) Gecko/20100101 Firefox/149.0
2026-04-05 09:04:28.868000 UTC - [Parent 8628: Socket Thread]: E/nsHttp   Proxy-Connection: keep-alive
2026-04-05 09:04:28.868000 UTC - [Parent 8628: Socket Thread]: E/nsHttp   Connection: keep-alive
2026-04-05 09:04:28.868000 UTC - [Parent 8628: Socket Thread]: E/nsHttp   Host: 2ip.ru:443
2026-04-05 09:04:28.868000 UTC - [Parent 8628: Socket Thread]: E/nsHttp   Proxy-Authorization: ***************************************************************************************

Ну хорошо, спасибо за информацию.

Да оказывается там masque и https connect. Через -H ничего не работает. Помучался и получилось запустить вот так. Все сервера можно тут посмотреть https://firefox.settings.services.mozilla.com/v1/buckets/main/collections/vpn-serverlist/records

curl -x “https://p.m1.fastly-masque.net:2499” --proxy-header “Proxy-Authorization: Bearer {token}” https://example.com

Хотелось бы и через masque конечно, но у меня ничего не вышло.

Токен для http-connect, наверное, можно посмотреть в proxychains4 mitmproxy, а долго ли он живёт?

Как --proxy-header указать какому-нибудь локальному прокси клиенту? Чтобы к нему можно было любой браузер прицепить.

http-connect значит будут работать только https сайты, не http. Но http сайтов осталось мало.

Токен fpn для подключения к прокси живёт 2 минуты. Токен access для генерации fpn живёт сутки. Я генерирую суточные через запрос oauth/token с использованием authorization хедера, просто достал его и использую. Ну работает, но пусть лучше кто поумнее кодом занимается, зачем мне постить эти костыли. Тем более без masque не особо интересно, лучше через браузер и использовать..

Уверен, даже костыльное решение пригодится людям.
Есть те, кто предпочитает хромобраузеры.

А отпечаток браузера не проверяется? По идее, vpn то только в FF)

Не думаю. Но то, что токен быстро устаревает, это плохо.

Сейчас нет. Посидел подольше с ним, очень не удобно всё-таки. Сам токен живёт 10 минут, а за 2 минуты до протухания он обновляется в браузере, причём там довольно хитро всё и без переподключения. Отдельно от браузера соотвественно нужно каждые 8-9 минут этот токен обновлять и перезагружать конфиг целиком, такое себе занятие..

Ну учитывая, что айфон превращается в тыкву целиком и полностью, если сервера эппл недоступны, то в интересах всех же чтобы блокировок эппла не было. Но опять же, а разве сайдлодинга нет на айфонах? Можно же вроде, если заморочиться.

Сорян, договорлись не офтопить в это теме. Все уже обсудили)

Кому интересно, навайбкодил на Go получалку и рефрешилку токена. Не думаю, что это достойно git-репозитория, поэтому вот ссылка на архив с исходным кодом: https://upload.adminforge.de/r/CYxKe_mPgK#iYKlXpEZiqQFwvQBQ0pozvdogIDqBNaceVA+qZ7EFdE=

Работает, спасибо. Единственное, не пускает с OVH адресов.
В домашней папки появился файл .firefox-vpn-tokens.json с реквизитами и в консоли они показались с именами серверов. curl работает.
Первая часть задачи решена.

Но как бы теперь автоматизировать обновление токена (я так полагаю надо в планировщик добавить, чтобы .firefox-vpn-tokens.json обновлялся) и скормить прокси браузеру (думаю, нужен локальный прокси клиент-посредник)?

Вот так можно получить --proxy-header
firefox-vpn-client | tail -n 1 > /tmp/bearer