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

Нашлись еще входные адреса (из документации fastly):
Список известных адресов:

Здорово, отлично натяпляпили) Сколько у вас там всего полезного. Спасибо!

В termux с установкой golang’а разворачивается и работает как сокс прокси.

Лично у меня был Pixel 10, и на нём VPN не работал.

More complete list.

IP DC loc note
2a04:4e41:8001::1 proxy.m1.fastly-masque.net San Jose, CA, US absent in vpn-serverlist/records
2a04:4e41:8001::2 San Jose, CA, US
2a04:4e41:8001::3 Denver, CO, US
2a04:4e41:8001::4 kewr174.m1.fastly-masque.net Newark, NJ, US absent
2a04:4e41:8001::5 yyz45.m1.fastly-masque.net Toronto, CA
2a04:4e41:8001::6 klot810.m1.fastly-masque.net Chicago, IL, US absent
2a04:4e41:8001::7 kbur820.m1.fastly-masque.net:2499 Los Angeles, CA, US absent
2a04:4e41:8001::8 muc139.m1.fastly-masque.net Munich, DE
2a04:4e41:8001::9 lfpb115.m1.fastly-masque.net Paris, FR
2a04:4e41:8001::10 eglc860.m1.fastly-masque.net London, GB
2a04:4e41:8001::11 p.m1.fastly-masque.net Los Angeles, CA, US
2a04:4e41:8001::12 Los Angeles, CA, US
2a04:4e41:8001::13 Los Angeles, CA, US
2a04:4e41:8001::ffff Los Angeles, CA, US

For the missing DC domain,

  • San Jose has airport ksjc and krhv.
  • Denver has kden, kcfo, kbjc and kapa
  • Los Angles has klax and kwhp.

I looked up all ${ICAO}{0-999}.m1.fastly-masque.net but did not find any.


Edit: added kbur820.m1.fastly-masque.net:2499 according to user77.

Los Angeles, CA, US: kbur820.m1.fastly-masque.net:2499 (2a04:4e41:8001::7)

Fastly docs

Okay thank. BUR was labelled Burbank, CA instead of Los Angeles, CA so I missed it. https://www.globalair.com/airport/airports_in_california.aspx?city=burbank

Браузер берет отсюда данные для подключения

https://firefox.settings.services.mozilla.com/v1/buckets/main/collections/vpn-serverlist/records

Сделал обертку для firefox-vpn-client, которая висит в трее и позволяет легко переключать сервера, просто запуская proxy.exe с нужными параметрами. По ЛКМ показывает/скрывает консоль. По ПКМ выдает меню - список серверов. По умолчанию выбирается сервер 8 - Anycast.
Для запуска нужен скомпилированный proxy.exe отсюда или из архива, который приложен ниже (исходный proxy-demo.exe нужно переименовать в proxy.exe).
Принимает аргументы:

ffproxy-tray.exe -server 2 -console
-console - показывать консоль
-server 0-8
серверы:
0 London, GB,          "eglc860.m1.fastly-masque.net:2499"
1 Paris, FR,           "lfpb115.m1.fastly-masque.net:2499"
2 Munich, DE,          "muc139.m1.fastly-masque.net:2499"
3 Toronto, CA,         "yyz45.m1.fastly-masque.net:2499"
4 Newark, NJ, US,      "proxy.m1.fastly-masque.net:2499"
5 Newark, NJ, US,      "kewr174.m1.fastly-masque.net:2499"
6 Chicago, IL, US,     "klot810.m1.fastly-masque.net:2499"
7 Los Angeles, CA, US, "kbur820.m1.fastly-masque.net:2499"
8 Anycast,             "p.m1.fastly-masque.net:2499"
Скриншот

ffproxy-tray.exe (81 КБ) - exe

firefox-proxy-tray.zip (36,3 КБ) - исходники (WinAPI, VS2019)

Еще внес незначительные изменения в сам клиент: токены находятся рядом с exe (удобно, но не безопасно), подключение к прокси через IPv4/IPv6 (ключи командной строки -4 или -6), полезно для тех у кого плохие IPv4/IPv6 маршруты до Fastly, из списка серверов удалены дубликаты.

Спойлер
>ping -4 p.m1.fastly-masque.net
Обмен пакетами с p.m1.fastly-masque.net [23.235.42.11] с 32 байтами данных:
Ответ от 23.235.42.11: число байт=32 время=80мс TTL=55
Ответ от 23.235.42.11: число байт=32 время=79мс TTL=55
Ответ от 23.235.42.11: число байт=32 время=80мс TTL=55
Ответ от 23.235.42.11: число байт=32 время=79мс TTL=55

>ping -6 p.m1.fastly-masque.net
Обмен пакетами с p.m1.fastly-masque.net [2a04:4e41:8001::11] с 32 байтами данных:
Ответ от 2a04:4e41:8001::11: время=159мс
Ответ от 2a04:4e41:8001::11: время=159мс
Ответ от 2a04:4e41:8001::11: время=159мс
Ответ от 2a04:4e41:8001::11: время=158мс

>proxy.exe -print-info
Refreshing token... OK
=== User Info ===
Subscribed:    false
UID:           3392128
Max Limit:     50.00 Gb

...

=== Usage Quota ===
Limit:         50.00 Gb
Remaining:     46.96 Gb
Resets At:     2026-05-01T00:00:00.000Z

=== Server List ===
p.m1.fastly-masque.net:2499 - Recomended Location
eglc860.m1.fastly-masque.net:2499 - United Kingdom
lfpb115.m1.fastly-masque.net:2499 - France
yyz45.m1.fastly-masque.net:2499 - Canada
muc139.m1.fastly-masque.net:2499 - Germany

firefox-proxy.zip (15,5 КБ)

Работает, очень удобно, спасибо!
Подружить бы еще с модом Xunlei, чтоб можно было использовать доп. параметры (менять порт socks к примеру)

В принципе это несложно, нужно чтобы у мода был конфиг по умолчанию (в котором прописаны нужные параметры).

Upd. Собрал для мода Xunlei. Обертка запускает proxy.exe c параметром -override-proxy-address. Конфиг должен быть в default.txt.

Xunlei.zip (2,9 МБ)

Сейчас он называется -override-proxy-address. Мне удобнее сразу несколько инстансов держать, чтобы можно было пользоваться несколькими странами одновременно. Пока пилю yaml конфигурацию, чтобы можно было разные настройки Outbound, TLS и другие применялись для соединения, в зависимости от хостинга назначения.

Круто, спасибо!
Но конфига по умолчанию пока что нет, поэтому и доп. настройки не подхватывает

Нужно немного поправить функцию parseArgs() в main.go, чтобы у параметра config было значение по умолчанию. Вроде несложно, но у меня не получилось его собрать, что-то там с зависимостями.

Спойлер
func parseArgs() *CLIArgs {
	args := &CLIArgs{}

	utils.SetFlags(&args.common)

	// flag.StringVar(&args.guardian, "guardian", GuardianEndpointDefault, "Guardian API endpoint")
	flag.BoolVar(&args.login, "login", false, "Force fresh login (ignore saved refresh token)")
	flag.BoolVar(&args.printInfo, "print-info", false, "Print user info, quota info, and server list")
	flag.StringVar(&args.stateFile, "state-file", "fxastate.json", "file name used to persist Firefox API client state")
	flag.StringVar(&args.email, "email", "", "Firefox Account email for login")
	flag.StringVar(&args.password, "password", "", "Firefox Account password for login")
	flag.StringVar(&args.overrideProxyAddress, "override-proxy-address", "", "use fixed proxy address instead of server address returned by API")

	//utils.ReadConfig("default.conf") // конфиг по умолчанию
	flag.Func("config", "read configuration from file with space-separated keys and values", utils.ReadConfig)

	flag.Parse()

	utils.ParseLog(&args.common)

	return args
}

Собирать необходимо из каталога, где лежит go.work, что-то вроде такого:

set GOEXPERIMENT=nosystemcrypto
set GOAMD64=v1

go.exe build "-ldflags=-s -w -buildid=" -buildvcs=false -trimpath -o ".\firefox-proxy.exe" incos/firefox-proxy

Почему-то у меня не работает, ни скачанный бинарник, ни самостоятельно собранный, запускаю без параметров:

Спойлер
2026-04-23T17:47:10.378Z [ INFO] firefox-proxy client version (devel) is starting…
2026-04-23T17:47:10.378Z [ INFO] Logging in…
2026-04-23T17:47:10.943Z [FATAL] failed: login failed
RPC call failed
bad http status: 400 Bad Request, headers: http.Header{"Accept-Ranges":[]string{"bytes"}, "Cache-Control":[]string{"no-cache"}, "Content-Length":[]string{"225"}, "Content-Type":[]string{"application/json; charset=utf-8"}, "Date":[]string{"Thu, 23 Apr 2026 17:47:10 GMT"}, "Server":[]string{"nginx"}, "Strict-Transport-Security":[]string{"max-age=31536000; includeSubDomains"}, "Timestamp":[]string{"1776966429"}, "Vary":[]string{"origin"}, "Via":[]string{"1.1 google, 1.1 varnish, 1.1 varnish"}, "X-Cache":[]string{"MISS, MISS"}, "X-Cache-Hits":[]string{"0, 0"}, "X-Content-Type-Options":[]string{"nosniff"}, "X-Download-Options":[]string{"noopen"}, "X-Frame-Options":[]string{"DENY"}, "X-Served-By":[]string{"cache-fra-eddf8230178-FRA, cache-fra-eddf8230178-FRA"}, "X-Timer":[]string{"S1776966430.794152,VS0,VE229"}, "X-Xss-Protection":[]string{"1; mode=block"}}

С этим флагом у меня не компилится set GOEXPERIMENT=nosystemcrypto

Эта опция для Microsoft build of Go, чтобы не ловить segfault при использовании некоторых поломанных системных криптографических функций.

Происходит попытка логина с пустым email и паролем — серверу такое не нравиться. Пример использования для текущей версии (которую переделаю на yaml когда-нибудь).

Подправил версию Xunlei, конфиг должен быть в default.txt

Огромное спасибо и вам и Xunlei! Все работает)

Добавил проверки, сейчас не подключается если нет конфига / логина / пароля. Сейчас еще посмотрю и выложу.

#конфига нет
>proxy.exe
2026-04-24T05:52:30.622Z [FATAL] Config file error: unable to open config file "default.txt": open default.txt: The system cannot find the file specified.

#конфиг есть, в нем пустой пароль
>proxy.exe
2026-04-24T05:52:38.715Z [ INFO] firefox-proxy client version (devel) is starting…
2026-04-24T05:52:38.716Z [FATAL] Email and password are required: no saved session found. Set them in default.txt or pass -email / -password flags.

main.go.zip (6,8 КБ)