Trojan: конфиг (и почему это устаревает)
Trojan держу как резерв другого «вида» — на случай, если VLESS-паттерн начали фингерпринтить. Он прикидывается обычным HTTPS-сайтом и при «тыке» отдаёт настоящую страницу. Ниже два рабочих конфига и честно про то, почему я не делаю его основным. Впиши данные в конструктор сверху.
Где место Trojan
Сразу рамка, чтобы не было завышенных ожиданий. Trojan — это резерв, а не основной канал под РФ. Его смысл в том, что он другого протокольного «вида»: если у клиента начали фингерпринтить именно VLESS-паттерн, Trojan под ту же волну может не попасть — снаружи он выглядит как обычный HTTPS-сайт. При «тыке» браузером отдаёт настоящую страницу через fallback, а проксирует только клиентов с верным паролем.
Но голый Trojan+TLS светит SNI твоего домена ровно так же, как честный VLESS+TLS, — и режется по списку доменов. Поэтому если и брать Trojan под DPI, то в связке с Reality. Ниже оба варианта.
Вариант A — Trojan + TLS (свой домен, есть fallback на сайт)
Честный TLS на твоём сертификате, с fallback на реальную страницу. Сначала серт:
apt -y install certbot
certbot certonly --standalone -d your-domain.com -m admin@your-domain.com --agree-tos --non-interactiveКонфиг-профиль целиком:
{
"log": { "loglevel": "none" },
"inbounds": [
{
"tag": "trojan-tls",
"listen": "0.0.0.0",
"port": 443,
"protocol": "trojan",
"settings": {
"clients": [{ "password": "СИЛЬНЫЙ_ПАРОЛЬ" }],
"fallbacks": [{ "dest": "8080" }]
},
"sniffing": { "enabled": true, "destOverride": ["http", "tls", "quic"] },
"streamSettings": {
"network": "raw",
"security": "tls",
"tlsSettings": {
"serverName": "your-domain.com",
"alpn": ["h2", "http/1.1"],
"certificates": [
{
"certificateFile": "/etc/letsencrypt/live/your-domain.com/fullchain.pem",
"keyFile": "/etc/letsencrypt/live/your-domain.com/privkey.pem"
}
]
}
}
}
],
"outbounds": [
{ "tag": "DIRECT", "protocol": "freedom" },
{ "tag": "BLOCK", "protocol": "blackhole" }
],
"routing": { "rules": [
{ "ip": ["geoip:private"], "outboundTag": "BLOCK" },
{ "domain": ["geosite:category-ads-all"], "outboundTag": "BLOCK" },
{ "protocol": ["bittorrent"], "outboundTag": "BLOCK" }
]}
}fallbacks → dest 8080 — «левый» трафик без верного пароля уходит на реальный сайт/nginx на :8080, ткнёшься браузером — увидишь нормальную страницу. В панели clients можно оставить пустым (панель наполнит), пароль тут показан для наглядности.
Вариант B — Trojan + Reality (без своего домена/серта)
Стелс надёжнее — Reality маскирует под чужой донор, свой серт не нужен. Ключи:
xray x25519 # privateKey → в конфиг
openssl rand -hex 8 # shortId{
"log": { "loglevel": "none" },
"inbounds": [
{
"tag": "trojan-reality",
"listen": "0.0.0.0",
"port": 443,
"protocol": "trojan",
"settings": { "clients": [{ "password": "СИЛЬНЫЙ_ПАРОЛЬ" }] },
"sniffing": { "enabled": true, "destOverride": ["http", "tls", "quic"] },
"streamSettings": {
"network": "raw",
"security": "reality",
"realitySettings": {
"show": false,
"target": "your-donor.de:443",
"serverNames": ["your-donor.de"],
"privateKey": "PRIVATE_KEY_X25519",
"shortIds": ["REALITY_SHORT_ID"]
}
}
}
],
"outbounds": [
{ "tag": "DIRECT", "protocol": "freedom" },
{ "tag": "BLOCK", "protocol": "blackhole" }
],
"routing": { "rules": [
{ "ip": ["geoip:private"], "outboundTag": "BLOCK" },
{ "domain": ["geosite:category-ads-all"], "outboundTag": "BLOCK" },
{ "protocol": ["bittorrent"], "outboundTag": "BLOCK" }
]}
}Host в панели
Password : СИЛЬНЫЙ_ПАРОЛЬ
Address : your-domain.com (или IP/домен ноды)
Port : 443
SNI / Host : your-domain.com (Вариант B — your-donor.de)
publicKey : REALITY_PUBLIC_KEY (только Вариант B)
shortId : REALITY_SHORT_ID (только Вариант B)
fingerprint : firefoxПочему это устаревает
Честная часть. Trojan — уходящая натура, и вот почему я не строю на нём сервис:
- Голый Trojan+TLS светит SNI — та же уязвимость, что у честного VLESS+TLS, режется по списку доменов. Без Reality под жёстким РФ-DPI он заметен.
- Reality-обвязка спасает, но тогда проще взять VLESS+Reality — тот же стелс, более развитая экосистема, активная поддержка. Trojan оправдан только как «другой вид» для разнообразия протоколов на ноде.
- Пароль делай длинным, без пробелов (
openssl rand -hex 16), одинаковым на сервере и хосте. Это единственный секрет Trojan — слабый пароль убивает всю схему.
Итог: Trojan держи как резервный протокол другого «вида» на случай точечного фингерпринта VLESS, но основной канал строй на VLESS+Reality. Механику Reality, которая и тут делает основную работу, разбирал в теории про Reality.
Следующий гайд Shadowsocks: почему это уже не вариант → ↗ Не понравилась статья или что-то непонятно? Напишите мне — помогу или поправлю. @notrealvpn →