// Providers — dense table instead of cards, with L1/L2 tabs const PROVIDERS = { l1: [ { name: 'Selectel', url: 'selectel.ru', price: 'от 300 ₽/мес', regions: 'MSK · SPB · LEN', desc: 'Партнёр ViPNet. IP в белых списках ТСПУ как корпоративный шифрованный трафик.', layer: 'l1' }, { name: 'Yandex Cloud', url: 'yandex.cloud', price: 'от 500 ₽/мес', regions: 'MSK · SPB', desc: 'Лучший белосписочный статус. 84.201.x.x в федеральном реестре Минцифры.', layer: 'l1' }, { name: 'VK Cloud', url: 'cloud.vk.com', price: 'от 500 ₽/мес', regions: 'MSK', desc: 'Нестабильный белосписочный статус — зависит от ДЦ. Требуется проверка IP.', layer: 'l1', warn: true }, ], l2: [ { name: 'Timeweb Cloud', url: 'timeweb.cloud', price: 'от 199 ₽/мес', regions: 'AMS · FRA · KZ · PL', desc: 'Российское юрлицо, зарубежные ДЦ. IP не в РКН блок‑листе.', layer: 'l2' }, { name: 'Serverspace', url: 'serverspace.io', price: 'от €4.59/мес', regions: 'KZ · RU · NL', desc: 'Казахстанский ДЦ Kazteleport. Tier II+. Низкая задержка из РФ (~15‑25мс).', layer: 'l2' }, { name: 'RUVDS', url: 'ruvds.com', price: 'от 139 ₽/мес', regions: 'MSK · SPB · LON · ZRH · AMS', desc: 'Российский провайдер с зарубежными ДЦ. Алматы + Амстердам — оптимальные exit‑локации.', layer: 'l2' }, { name: 'HOSTKEY', url: 'hostkey.com', price: 'от 300 ₽/мес', regions: 'NL · DE · FI', desc: 'Собственные ДЦ в Европе. Принимает BTC. Хорошая связность с РФ.', layer: 'l2' }, { name: 'VDSina', url: 'vdsina.com', price: 'от $2.10/мес', regions: 'MSK · AMS', desc: 'Российский хостинг с ДЦ в Нидерландах. Амстердам идеален для exit‑нод.', layer: 'l2' }, { name: 'Fornex', url: 'fornex.com', price: 'от €5.50/мес', regions: 'DE · NL · SE · CH · US', desc: 'Европа + США. Принимает USDT. Стабильная работа с РФ.', layer: 'l2' }, ], }; const ProviderRow = ({ p }) => (
{p.name} {p.warn && ⚠ нестабильный} {p.url} ↗
{p.desc}
{p.regions}
{p.price}
{p.layer === 'l1' ? 'L1 RELAY' : 'L2 EXIT'}
); const Providers = () => { const [tab, setTab] = React.useState('l1'); const list = PROVIDERS[tab]; return (

Провайдеры VPS

§ 02 · aggregator · {list.length} of {PROVIDERS.l1.length + PROVIDERS.l2.length}
provider
description
regions
price
layer
{list.map(p => )}
); }; Object.assign(window, { Providers });