Чисто техническая обнова. Без нового функционала, потребление ОЗУ упало примерно в 3 раза, убрал пул сессий(-sessions) и заменил на perStreamSession за счет чего соединение стало очень стабильным
firefox-proxy.zip (2,9 МБ)
Подскажите, а у многих работает Мозиловский впн просто кликнув на кнопку на панели вверху?
Можно предположить что у многих судя по низкой активности в треде.
Летом подключался напрямую, потом только с обходом блокировки для vpn.mozilla.org, попробовал сейчас и оказалось что работает напрямую.
Возможно зависит от наличия блокировки хостинга Fastly https://cheburcheck.ru/check?target=vpn.mozilla.org https://hyperion-cs.github.io/dpi-checkers/ru/tcp-16-20/.
У меня иногда подключается, но периодически отваливается. В момент отвала не пингуется vpn.mozilla.org
Ладно наши, думал, что они будут ограничивать
До этого без впна (варпа) вообще не подключалось, щас вроде заработало
Через прокси от tendy с фрагментированием ClientHello
Офф внутри браузера
Недавно в sing-box 1.15 alpha добавили поддержку masque, поэтому можно сделать вот такую интересную штуку.
Я уже проверил и это реально все работает и даже прям нормально.
FirefoxVPN реализован по стандарту RFC masque connect-tcp/udp поэтому его проще и удобно использовать.
Что нужно сделать в ffproxy чтобы использовать прокси ff через sing-box и подобные клиенты.
- В ffproxy добавить http сервер с эндпоинтами, которые отдают конфиги с свежим токеном авторизации. Нужно возвращать json конфиг для sing-box с outbounds
- Добавить в сингбокс этот адрес как подписку и сделать автообновление каждые 5мин(токен живет 10мин)
Можно добавить использование шаблона конфига sing-box, чтобы сервер брал шаблон и заполнял только outbounds, конкретно добавлял бы все точки прокси как outbound и заполнил бы selector для выбора прокси.
Так же отмечу что реализация sing-box позволяет проксировать udp трафик а так же умеет в http1.1/h2/h3 (quic).
От клиента ffproxy останется только ходить за списком доступных нод, рефрешить токен и отдавать список конфигов для sing-box, а в будущем и под clash/xray(happ).
Пример конфига:
{
"$schema": "https://raw.githubusercontent.com/SagerNet/sing-box/refs/heads/testing/docs/schema.json",
"log": {
"level": "trace",
"timestamp": true
},
"certificate": {
"store": "mozilla"
},
"dns": {
"servers": [
{
"type": "local",
"tag": "local-dns"
},
{
"type": "https",
"tag": "bootstrap-dns",
"server": "77.88.8.8"
},
{
"type": "https",
"tag": "direct-cloudflare-dns",
"domain_resolver": "bootstrap-dns",
"server": "one.one.one.one"
},
{
"type": "https",
"tag": "direct-quad9-dns",
"domain_resolver": "bootstrap-dns",
"server": "dns.quad9.net"
},
{
"type": "https",
"tag": "remote-cloudflare-dns",
"domain_resolver": "bootstrap-dns",
"server": "one.one.one.one",
"detour": "proxy-out"
},
],
"rules": [
{
"preferred_by": "local-dns",
"server": "local-dns"
},
{
"action": "evaluate",
"server": "remote-cloudflare-dns",
"tag": "remote-cloudflare-dns",
"timeout": "1s"
},
{
"action": "evaluate",
"server": "direct-cloudflare-dns",
"tag": "direct-cloudflare-dns"
},
{
"action": "evaluate",
"server": "direct-quad9-dns",
"tag": "direct-quad9-dns"
},
{
"match_response": "remote-cloudflare-dns",
"response_rcode": "NOERROR",
"action": "respond"
},
{
"match_response": "direct-cloudflare-dns",
"response_rcode": "NOERROR",
"action": "respond"
},
{
"match_response": "direct-quad9-dns",
"response_rcode": "NOERROR",
"action": "respond"
}
],
"final": "bootstrap-dns",
"strategy": "ipv4_only",
"disable_cache": true
},
"http_clients": [
{
"tag": "default-http-client",
"engine": "go",
"version": 2,
"tls": {
"utls": {
"enabled": true,
"fingerprint": "firefox"
}
},
"detour": "direct-out"
}
],
"inbounds": [
{
"type": "tun",
"tag": "tun-in",
"address": "172.19.0.1/30",
"auto_route": true,
"strict_route": true
},
{
"type": "mixed",
"tag": "mixed-in",
"listen": "::",
"listen_port": 10808
}
],
"outbounds": [
{
"type": "direct",
"tag": "direct-out"
},
{
"type": "selector",
"tag": "proxy-out",
"outbounds": [
"Recomended Location",
"Germany",
"United States"
]
},
{
"type": "http",
"tag": "Recomended Location",
"server": "p.m1.fastly-masque.net",
"server_port": 2499,
"headers": {
"Proxy-Authorization": "Bearer ${token}"
},
"version": 1, // HTTP Version 1/2/3
"disable_version_fallback": true, // enable version fallback
"tls": {
"enabled": true,
"engine": "go",
"utls": {
"enabled": true,
"fingerprint": "firefox"
},
"fragment": true,
"fragment_fallback_delay": "300ms",
}
},
{
"type": "http",
"tag": "Germany",
"server": "muc139.m1.fastly-masque.net",
"server_port": 2499,
"headers": {
"Proxy-Authorization": "Bearer ${token}"
},
"version": 2, // HTTP Version 1/2/3
"max_concurrent_streams": 5,
"disable_version_fallback": false, // enable version fallback
"tls": {
"enabled": true,
"engine": "go",
"utls": {
"enabled": true,
"fingerprint": "firefox"
},
"fragment": true,
"fragment_fallback_delay": "300ms"
}
},
{
"type": "http",
"tag": "United States",
"server": "us.m1.fastly-masque.net",
"server_port": 2499,
"headers": {
"Proxy-Authorization": "Bearer ${token}"
},
"version": 3, // HTTP Version 1/2/3
"max_concurrent_streams": 5,
"disable_version_fallback": false, // enable version fallback
"tls": {
"enabled": true,
"engine": "go",
"utls": {
"enabled": true,
"fingerprint": "firefox"
},
"fragment": true,
"fragment_fallback_delay": "300ms"
}
}
],
"route": {
"rules": [
{
"inbound": "tun-in",
"action": "sniff"
},
{
"type": "logical",
"mode": "or",
"rules": [
{
"port": 53
},
{
"protocol": "dns"
}
],
"action": "hijack-dns"
},
{
"ip_is_private": true,
"action": "bypass"
},
{
"outbound": "proxy-out"
}
],
"final": "direct-out",
"find_process": true,
"auto_detect_interface": true,
"default_domain_resolver": "direct-cloudflare-dns",
"default_http_client": "default-http-client"
},
"experimental": {
"clash_api": {
"external_controller": "127.0.0.1:9090",
"external_ui": "/ui",
"external_ui_download_url": "https://github.com/Zephyruso/zashboard/releases/latest/download/dist.zip",
"default_mode": "Rule"
}
}
}



