Xray
Überblick
Bereitstellung und Konfiguration von Xray-Core – der fortschrittlichen Proxy-Plattform, die VLESS, VMess, Trojan und Shadowsocks mit modernen Transporten wie Reality, XTLS-Vision, WebSocket, gRPC und HTTP/2 unterstützt. Dieser Skill umfasst Server-Bereitstellung, Protokollauswahl, TLS/Reality-Konfiguration, Traffic-Routing, Multi-User-Verwaltung, CDN-Integration, Client-Konfiguration und Überwachung.
Anleitung
Schritt 1: Installation
bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ install
xray version
# Binary: /usr/local/bin/xray
# Config: /usr/local/etc/xray/config.json
# UUID und X25519-Schlüssel generieren
xray uuid
xray x25519 # Privat- + öffentlicher Schlüssel für Reality
Schritt 2: VLESS + Reality (Empfohlen)
Die sicherste Konfiguration. Reality imitiert den TLS-Handshake einer echten HTTPS-Webseite und benötigt weder eine Domain noch ein TLS-Zertifikat.
Server-Konfiguration (/usr/local/etc/xray/config.json):
{
"log": { "loglevel": "warning" },
"inbounds": [{
"listen": "0.0.0.0",
"port": 443,
"protocol": "vless",
"settings": {
"clients": [
{ "id": "YOUR-UUID", "flow": "xtls-rprx-vision", "email": "user1@proxy" }
],
"decryption": "none"
},
"streamSettings": {
"network": "tcp",
"security": "reality",
"realitySettings": {
"dest": "www.microsoft.com:443",
"serverNames": ["www.microsoft.com", "microsoft.com"],
"privateKey": "YOUR-PRIVATE-KEY",
"shortIds": ["", "0123456789abcdef"]
}
},
"sniffing": { "enabled": true, "destOverride": ["http", "tls", "quic"] }
}],
"outbounds": [
{ "protocol": "freedom", "tag": "direct" },
{ "protocol": "blackhole", "tag": "block" }
],
"routing": {
"rules": [{ "type": "field", "ip": ["geoip:private"], "outboundTag": "block" }]
}
}
Client-Share-Link:
vless://UUID@SERVER_IP:443?encryption=none&flow=xtls-rprx-vision&security=reality&sni=www.microsoft.com&fp=chrome&pbk=PUBLIC_KEY&sid=0123456789abcdef&type=tcp#MyProxy
systemctl enable --now xray
Schritt 3: VLESS + WebSocket + TLS (CDN-kompatibel)
Zur Weiterleitung durch das Cloudflare-CDN, um die Server-IP zu verbergen. Erfordert eine Domain mit Cloudflare-Proxy und ein TLS-Zertifikat.
apt install -y certbot
certbot certonly --standalone -d proxy.yourdomain.com
{
"inbounds": [
{
"port": 443, "protocol": "vless",
"settings": {
"clients": [{ "id": "YOUR-UUID" }],
"decryption": "none",
"fallbacks": [
{ "dest": 8080 },
{ "path": "/ws-path", "dest": 8443, "xver": 1 }
]
},
"streamSettings": {
"network": "tcp", "security": "tls",
"tlsSettings": {
"certificates": [{
"certificateFile": "/etc/letsencrypt/live/proxy.yourdomain.com/fullchain.pem",
"keyFile": "/etc/letsencrypt/live/proxy.yourdomain.com/privkey.pem"
}]
}
}
},
{
"listen": "127.0.0.1", "port": 8443, "protocol": "vless",
"settings": { "clients": [{ "id": "YOUR-UUID" }], "decryption": "none" },
"streamSettings": { "network": "ws", "wsSettings": { "path": "/ws-path" } }
}
],
"outbounds": [{ "protocol": "freedom", "tag": "direct" }]
}
Richte nginx auf Port 8080 als Fallback ein, und in Cloudflare: SSL/TLS Voll (Streng), WebSockets EIN.
Schritt 4: Trojan & Shadowsocks
Trojan (sieht aus wie normales HTTPS):
{
"inbounds": [{
"port": 443, "protocol": "trojan",
"settings": {
"clients": [{ "password": "your-strong-password", "email": "user1@trojan" }],
"fallbacks": [{ "dest": 8080 }]
},
"streamSettings": {
"network": "tcp", "security": "tls",
"tlsSettings": { "certificates": [{ "certificateFile": "...", "keyFile": "..." }] }
}
}]
}
Shadowsocks 2022 (moderne AEAD-Chiffren):
{
"inbounds": [{
"port": 8388, "protocol": "shadowsocks",
"settings": { "method": "2022-blake3-aes-128-gcm", "password": "BASE64_KEY", "network": "tcp,udp" }
}]
}
Schlüssel generieren: openssl rand -base64 16 (oder -base64 32 für aes-256)
Schritt 5: Multi-User-Verwaltung
"clients": [
{ "id": "uuid-1", "email": "alice@proxy", "flow": "xtls-rprx-vision" },
{ "id": "uuid-2", "email": "bob@proxy", "flow": "xtls-rprx-vision" },
{ "id": "uuid-3", "email": "carol@proxy", "flow": "xtls-rprx-vision" }
]
Pro-Benutzer-Traffic-Statistiken – Statistik-API aktivieren:
{
"stats": {},
"policy": {
"levels": { "0": { "statsUserUplink": true, "statsUserDownlink": true } },
"system": { "statsInboundUplink": true, "statsInboundDownlink": true }
},
"api": { "tag": "api", "services": ["StatsService", "HandlerService"] },
"inbounds": [
{ "listen": "127.0.0.1", "port": 10085, "protocol": "dokodemo-door",
"settings": { "address": "127.0.0.1" }, "tag": "api" }
],
"routing": { "rules": [{ "type": "field", "inboundTag": ["api"], "outboundTag": "api" }] }
}
Benutzer zur Laufzeit abfragen und verwalten:
xray api stats --server=127.0.0.1:10085 -name "user>>>alice@proxy>>>traffic>>>uplink"
xray api adi --server=127.0.0.1:10085 --inbound-tag proxy --id "new-uuid" --email "newuser@proxy"
xray api rmi --server=127.0.0.1:10085 --inbound-tag proxy --email "olduser@proxy"
Schritt 6: Routing-Regeln und Überwachung
Nach Domain/IP/Geo routen:
{
"routing": {
"domainStrategy": "IPIfNonMatch",
"rules": [
{ "type": "field", "domain": ["geosite:category-ads-all"], "outboundTag": "block" },
{ "type": "field", "ip": ["geoip:private"], "outboundTag": "block" },
{ "type": "field", "network": "tcp,udp", "outboundTag": "proxy" }
]
}
}
Überwachung:
systemctl status xray
journalctl -u xray -f
grep "accepted" /var/log/xray/access.log | awk '{print $3}' | sort | uniq -c | sort -rn
Firewall:
ufw allow 443/tcp && ufw allow 443/udp && ufw enable
Beispiele
Beispiel 1: VLESS + Reality-Proxy-Server für ein kleines Team bereitstellen
Benutzer-Eingabe: „Richte Xray auf unserem Debian 12 VPS unter 198.51.100.30 mit VLESS und Reality-Transport ein. Erstelle Konten für alice, bob und carol. Verwende microsoft.com als Reality-Ziel und gib mir die Share-Links für v2rayNG.“
Der Agent installiert Xray über das offizielle Skript, generiert eine UUID für jeden Benutzer und ein X25519-Schlüsselpaar, erstellt eine config.json mit einem VLESS-Inbound auf Port 443 mit Reality-Einstellungen für www.microsoft.com, fügt drei Client-Einträge mit xtls-rprx-vision-Flow hinzu, ergänzt Routing-Regeln zum Blockieren privater IPs, aktiviert und startet den xray-Dienst, öffnet Port 443 in der Firewall und gibt drei vless://-Share-Links mit Server-IP, öffentlichem Schlüssel, Short-ID und SNI aus.
Beispiel 2: CDN-gestützten VLESS-Proxy mit Cloudflare und einer Fallback-Website einrichten
Benutzer-Eingabe: „Ich habe proxy.mysite.com, das über Cloudflare auf unseren Server zeigt. Konfiguriere Xray mit VLESS über WebSocket auf /secret-ws, damit der Traffic durch das Cloudflare-CDN läuft. Nicht-Proxy-Besucher sollen eine normale nginx-Website sehen.“
Der Agent besorgt ein Let's-Encrypt-Zertifikat mit certbot, konfiguriert Xray mit einem Haupt-VLESS+TLS-Inbound auf Port 443 mit einem Fallback auf nginx auf Port 8080, fügt einen zweiten VLESS+WebSocket-Inbound auf localhost:8443 mit Pfad /secret-ws hinzu, richtet nginx für eine statische Seite auf Port 8080 ein, überprüft, ob Cloudflare SSL auf Voll (Streng) und WebSockets aktiviert ist, und gibt die Client-Verbindungszeichenfolge mit WebSocket-Pfad und Cloudflare-SNI aus.
Richtlinien
- Für neue Bereitstellungen immer VLESS + Reality verwenden; es benötigt weder eine Domain noch ein Zertifikat und ist das am schwersten zu erkennende und zu blockierende Protokoll
- Setze
"alterId": 0für alle VMess-Benutzer, um die obligatorische AEAD-Verschlüsselung zu erzwingen; ein von null verschiedener alterId verwendet das alte, weniger sichere Legacy-Format - Blockiere den Zugriff auf private IP-Bereiche (geoip:private) in den Routing-Regeln, um zu verhindern, dass der Proxy für SSRF-Angriffe auf interne Dienste verwendet wird
- Nutze die
xray api-Befehle, um Benutzer zur Laufzeit hinzuzufügen und zu entfernen, ohne den Dienst neu zu starten; so werden aktive Nutzer nicht getrennt - Wähle
destundserverNamesvon einer beliebten Website (microsoft.com, apple.com), die auf einer anderen IP als deinem Server gehostet wird, und stelle sicher, dass diese Site TLS 1.3 und HTTP/2 unterstützt - Aktiviere die Statistik-API mit benutzerspezifischer Nachverfolgung (
statsUserUplink/statsUserDownlink), um die Bandbreitennutzung zu überwachen und Missbrauch zu erkennen