MONO VPN
Technische Dokumentation

SSTP und NaiveProxy einrichten

Anbieterneutrale Beispiele für die Anbindung Ihres eigenen Servers oder eines Drittpunkts an MONO VPN. Wählen Sie das gewünschte Schema aus und passen Sie es an Ihre Infrastruktur an.

SSTP-Server

SSTP erfordert einen öffentlichen Hostnamen, TCP 443 oder einen anderen verfügbaren TCP-Port, ein TLS-Zertifikat, eine PPP-Authentifizierung und eine IPv4-Konfiguration auf dem Server. RouterOS-, SoftEther- und Windows-RRAS-Bereitstellungen sind geeignet, wenn sie einen kompatiblen SSTP-Dienst bereitstellen.

Beispiel im RouterOS-Stil

/ip pool
add name=your-pool ranges=10.20.30.10-10.20.30.200

/ppp profile
add name=sstp-profile \
    local-address=10.20.30.1 \
    remote-address=your-pool \
    dns-server=1.1.1.1,8.8.8.8 \
    use-encryption=yes

/ppp secret
add name=username password="strong-password" service=sstp profile=sstp-profile

/interface sstp-server server
set enabled=yes \
    port=443 \
    certificate=your-certificate-name \
    authentication=mschap2 \
    default-profile=sstp-profile

Verbindungslink

sstp://username:strong-password@yourdomain.com:443?name=Office&cc=DE&label=Work
  • Verwenden Sie nach Möglichkeit ein gültiges öffentliches TLS-Zertifikat.
  • Öffnen Sie den SSTP-TCP-Port in der Firewall.
  • Erstellen Sie eindeutige Anmeldeinformationen für jeden Benutzer oder jedes Gerät.
  • Lassen Sie den PPP-Server IP- und DNS-Parameter bereitstellen, wenn Ihr Schema dies unterstützt.
  • Verwenden Sie RADIUS- oder native Serverbeschränkungen für Ablauf, Abrechnung und Grenzwerte für gleichzeitige Sitzungen.

Checkliste für die SSTP-Diagnose

SymptomWas zu überprüfen ist
TLS wird sofort geschlossenZertifikatskette, SNI/Hostname, Firewall, nicht unterstützte TLS-Richtlinie oder Proxy vor SSTP.
AuthentifizierungsfehlerLogin und Passwort, PPP-Authentifizierungsmethode, Kontostatus, geheimes Ablaufdatum und RADIUS-Antwort.
Verbunden, aber kein VerkehrRouten, NAT/Masquerade, DNS, Weiterleitungsregeln in der Firewall und Server-IP-Pool.
Verbindungsabbruch beim NetzwerkwechselServer-Timeout-Richtlinie und Client-Wiederverbindungsverhalten: Beim Wechsel von WLAN/Mobilfunknetzwerk zu iOS wird der Pfad möglicherweise neu erstellt.

NaiveProxy mit Caddy

Ein gängiges NaiveProxy-Schema verwendet Caddy mit einer Assembly, zu der ein Forward-Proxy hinzugefügt wird. Der wichtige Teil ist die authentifizierte HTTP-VERBINDUNG über TLS. Der genaue Aufbau von Caddy und die Plugin-Syntax können variieren, daher ist das unten gezeigte Bereitstellungsmuster kein garantiertes Kopieren und Einfügen.

yourdomain.com {
    tls admin@yourdomain.com

    route {
        forward_proxy {
            basic_auth username strong-password
            hide_ip
            hide_via
            probe_resistance
        }

        respond 204
    }
}
naive+https://username:strong-password@yourdomain.com:443?sni=yourdomain.com&name=Office&cc=DE&label=Work

Diese Option wird häufig für die übliche TLS-Vervollständigung am Proxy, automatische Zertifikate und einfache Basisauthentifizierung gewählt.

NaiveProxy mit Sing-Box

Eine andere Möglichkeit besteht darin, Sing-Box direkt über Naive Inbound auszuführen. Dies ist praktisch, wenn eine Binärdatei sowohl den Proxy-Listener als auch die Routing-Logik besitzen muss.

{
  "log": { "level": "warn" },
  "inbounds": [
    {
      "type": "naive",
      "tag": "naive-in",
      "listen": "0.0.0.0",
      "listen_port": 443,
      "users": [
        { "username": "username", "password": "strong-password" }
      ],
      "tls": {
        "enabled": true,
        "server_name": "yourdomain.com",
        "certificate_path": "/etc/letsencrypt/live/yourdomain.com/fullchain.pem",
        "key_path": "/etc/letsencrypt/live/yourdomain.com/privkey.pem"
      }
    }
  ],
  "outbounds": [
    { "type": "direct", "tag": "direct" }
  ],
  "route": { "final": "direct" }
}
[Unit]
Description=sing-box naive proxy
After=network-online.target
Wants=network-online.target

[Service]
ExecStart=/usr/local/bin/sing-box run -c /etc/sing-box/config.json
Restart=on-failure
RestartSec=3
LimitNOFILE=1048576

[Install]
WantedBy=multi-user.target

UDP-over-TCP für NaiveProxy

NaiveProxy ist hauptsächlich TCP-orientiert. Wenn Benutzer UDP-ähnlichen Datenverkehr über ein Naive-Profil benötigen, kann MONO VPN UDP-Streams an einen separaten Naive TCP-Listener weiterleiten. Hinzufügen uot auf den Link und führen Sie einen kompatiblen Listener auf diesem Port aus.

naive+https://username:strong-password@yourdomain.com:443?sni=yourdomain.com&uot=8443
{
  "log": { "level": "warn" },
  "inbounds": [
    {
      "type": "naive",
      "tag": "naive-uot-in",
      "listen": "0.0.0.0",
      "listen_port": 8443,
      "users": [
        { "username": "username", "password": "strong-password" }
      ],
      "tls": {
        "enabled": true,
        "server_name": "yourdomain.com",
        "certificate_path": "/etc/letsencrypt/live/yourdomain.com/fullchain.pem",
        "key_path": "/etc/letsencrypt/live/yourdomain.com/privkey.pem"
      }
    }
  ],
  "outbounds": [
    { "type": "direct", "tag": "direct" }
  ],
  "route": { "final": "direct" }
}

Öffnen Sie den UoT-TCP-Port nur, wenn Sie diesen Modus verwenden. Wenn uot fehlt, verwendet MONO VPN den regulären NaiveProxy-Zweig für TCP-Verkehr und ein zusätzlicher Listener ist nicht erforderlich.

Sicherheit und Betrieb

  • Veröffentlichen Sie keine echten Passwörter, Root-Zugangsdaten oder langlebigen gemeinsamen Schlüssel.
  • Geben Sie jedem Benutzer oder Gerät eindeutige Anmeldeinformationen aus.
  • Rufen Sie Daten ab und rotieren Sie sie, wenn ein Benutzer die Website verlässt, ein Link durchgesickert ist oder der Zugriff abgelaufen ist.
  • Aktualisieren Sie Caddy, Sing-Box, RouterOS, SoftEther oder den von Ihnen gewählten VPN-Stack.
  • Begrenzen Sie die Verwaltungsports nach IP-Quelle und trennen Sie die Verwaltung von den VPN-/Proxy-Ports.
ufw allow 443/tcp
ufw allow 443/udp
ufw allow 8443/tcp

Öffnen Sie nur Ports, die Ihrem Design entsprechen. UDP 443 ist optional und hängt von der Verwendung von QUIC/HTTP3 ab. TCP 8443 wird nur für das UDP-over-TCP-Beispiel benötigt.