Anulación de punto final en Windows y Linux
Enrute el punto final HTTPS fijo de un cliente local autorizado a través de mitmproxy, con captura de alcance, confianza TLS, transmisión y reversión.
Utilice la función integrada de un cliente URL base/punto final personalizado/BYOK configuración siempre que sea posible. Ver Guías de conexión y Copiloto de GitHub. La intercepción HTTPS local es un recurso opcional para un cliente que no puede cambiar su punto final, no es un requisito para usar Model Gate.
Esto no es universalmente compatible. El cliente debe enviar un protocolo, una ruta y un modelo compatibles con su cuenta de Model Gate, aceptar su autoridad de certificación local y permitirle configurar una clave API de Model Gate. La fijación de certificados, un almacén de confianza privado, solicitudes firmadas, un modelo codificado o un host de extensión remoto pueden impedir que este método funcione. Una reescritura de URL no convierte las finalizaciones de OpenAI Chat en mensajes o respuestas antrópicos, no agrega capacidades de modelo ni reemplaza la autenticación de GitHub.
Intercepte únicamente aplicaciones y tráfico de su propiedad o que esté autorizado a inspeccionar. Obtenga aprobación en estaciones de trabajo administradas. mitmproxy ve mensajes descifrados, código fuente y encabezados de autenticación; su clave privada de CA local puede hacerse pasar por servidores HTTPS ante los clientes que confían en ella. No comparta claves privadas de CA, exporte flujos/archivos HAR no redactados, exponga su interfaz de usuario a la red ni deshabilite la verificación TLS.
Qué cambia este ejemplo
El ejemplo asigna exactamente este origen de origen al origen de la API del modelo que se muestra en la documentación de este sitio:
https://api.deepseek.com/v1/chat/completions
-> local mitmproxy
-> https://api.model-gate.com/v1/chat/completions
Configurar un clave API Model Gate dedicada, no una clave de DeepSeek, en el campo de credenciales del cliente. Elija un modelo de Model Gate habilitado o un alias administrado por el administrador en la lista catalogo de modelos. Utilice el origen de la API del modelo que se muestra en esta guía con su clave API coincidente; no utilice el panel ni el host de API de socio.
La regla no edita intencionalmente el método HTTP, la ruta, la consulta, el cuerpo JSON, model, Authorization, o el JSON stream valor. Cambia el destino y HTTP Host / HTTP/2 :authority; TLS ascendente se conecta al nuevo destino. La versión HTTP, el formato/orden del encabezado, los encabezados de conexión y el marco también pueden diferir. No se trata de una preservación byte por byte de todos los encabezados o del tráfico de red.
Preparar transmisión de solo respuesta (ambos sistemas)
Guarde lo siguiente como model-gate-response-stream.py en su directorio de trabajo. El mismo archivo se incluye en la versión dentro de la aplicación PHP en deploy/client-tools/; se ejecuta dentro de mitmproxy y no necesita una instalación separada de Python cuando se usa el paquete nativo.
"""Keep map_remote requests buffered; stream responses without retaining bodies."""
from mitmproxy import ctx, exceptions, http
def configure(updated: set[str]) -> None:
if ctx.options.stream_large_bodies is not None:
raise exceptions.OptionsError(
"Unset stream_large_bodies: map_remote must run before request forwarding."
)
def requestheaders(flow: http.HTTPFlow) -> None:
flow.request.stream = False
def responseheaders(flow: http.HTTPFlow) -> None:
if flow.response is not None:
flow.response.stream = True
el incorporado map_remote El complemento reescribe el destino en el pedido gancho, después de leer el cuerpo de la solicitud. Mantenga la transmisión de solicitudes deshabilitada hasta que se haya realizado la reescritura. no usar --set stream_large_bodies=1 con esta receta: puede reenviar la solicitud original antes de la reescritura. El pequeño complemento anterior solo permite la transmisión de respuestas, incluido SSE, sin modificar el cuerpo JSON ni reproducir solicitudes.
Los siguientes comandos utilizan --set stream_large_bodies sin signo igual o valor para restablecer esta configuración opcional a Noney deshabilite explícitamente la retención de cuerpo transmitido. El complemento rechaza habilitar un umbral de transmisión global más adelante. Elimine otros complementos de transmisión/reescritura de solicitudes de esta sesión dedicada y resuelva cualquier error de inicio antes de colocar una clave en el cliente. El proxy no es un límite de credenciales cerrado ante fallas: primero valide la ruta con una clave ficticia.
Windows: ejemplo de Visual Studio
Instale el paquete nativo oficial de Windows desde Descargas. Vuelva a abrir PowerShell y verifique mitmweb --version. No lo instale dentro de WSL para este ejemplo de proceso de Windows.
Cree y confíe en la CA local de esta instalación
Comience una vez con la misma cuenta de Windows que ejecutará el proxy:
mitmweb --listen-host 127.0.0.1 --web-host 127.0.0.1
Después del inicio, deténgalo con Ctrl+C. mitmproxy crea su CA en %USERPROFILE%\.mitmproxy. Preferir Usuario actual confianza para una aplicación que se ejecuta como usted:
$ca = Join-Path $env:USERPROFILE '.mitmproxy\mitmproxy-ca-cert.cer'
if (-not (Test-Path -LiteralPath $ca)) { throw 'Start mitmweb once under this account first.' }
certutil -user -addstore Root "$ca"
if ($LASTEXITCODE -ne 0) { throw 'CA installation failed.' }
Confíe únicamente en la CA generada por su propia instalación. mitmproxy-ca-cert.cer es el certificado público; mitmproxy-ca.pem también contiene la clave privada y debe permanecer privada. Reinicie Visual Studio después de cambiar la confianza.
Sólo cuando una solicitud aprobada necesita específicamente Máquina local confianza, use un PowerShell elevado y certutil -addstore Root "$ca" sin -user. Esto confía en la CA en toda la máquina, es un cambio de seguridad más amplio y requiere la eliminación del almacén de máquinas correspondiente a continuación. Elevación bajo un diferente la cuenta de administrador puede utilizar un perfil y una CA diferentes; Mantenga la configuración de cuenta, certificado y proxy coherente.
Capture solo el proceso y el host previstos
Ejecute PowerShell nativo como administrador cuando lo requieran los permisos de captura de Windows, utilizando la misma cuenta/perfil. Inicie Visual Studio primero. Este ejemplo apunta al nombre del proceso. devenv:
mitmweb --mode local:devenv `
--listen-host 127.0.0.1 --web-host 127.0.0.1 `
--allow-hosts '^api\.deepseek\.com(:443)?$' `
--set connection_strategy=lazy --set upstream_cert=false `
--set stream_large_bodies --set store_streamed_bodies=false `
-s .\model-gate-response-stream.py `
--set 'map_remote=|^https://api\.deepseek\.com(?::443)?/|https://api.model-gate.com/'
No debe haber espacios después del acento grave de continuación de línea de PowerShell. La regla anclada coincide solo con el origen HTTPS especificado, incluido un puerto explícito 443; un nombre de host de proveedor que aparece dentro de una consulta u otro nombre de host no se reescribe. La lista de hosts permitidos evita descifrar destinos no relacionados del proceso seleccionado. lazy más upstream_cert=false evita una conexión innecesaria de rastreo de certificados con el proveedor original. La verificación TLS del flujo ascendente real todavía está habilitada.
Visual Studio es no Código VS. Una extensión puede enviar solicitudes a través de un ServiceHub, un servidor de idiomas o un proceso auxiliar independiente en lugar de devenv. Identifique el proceso real de propiedad de la red antes de ampliar la captura. Para inspeccionar instancias de Visual Studio:
Get-Process -Name devenv | Select-Object Id, ProcessName, Path
Reemplazar local:devenv con local:12345 utilizando el PID real o una lista separada por comas de PID identificados explícitamente. Los PID cambian después de los reinicios. no usar $PID para una variable personalizada de PowerShell; se refiere al propio proceso de PowerShell. No cambie a toda la máquina --mode local simplemente para hacer aparecer una solicitud faltante.
Linux: el mismo mapeo de alcance
Instale una compilación oficial actual de mitmproxy y verifique mitmweb --version y uname -r. La captura local utiliza eBPF; el piso de soporte oficial es Linux 6.8. Necesita un ayudante privilegiado iniciado a través de sudo. Correr mitmweb como su usuario normal con --mode local:... en la línea de comando para que pueda solicitar ese privilegio; evite cambiar todo el proxy a root y usarlo accidentalmente /root/.mitmproxy.
Primero inicialice la CA en su cuenta ordinaria, luego deténgase con Ctrl+C:
mitmweb --listen-host 127.0.0.1 --web-host 127.0.0.1
Prefiere el mecanismo de CA personalizado documentado de la aplicación. En Ubuntu/Debian, las aplicaciones que utilizan el almacén de confianza del sistema pueden utilizar esta instalación opcional para todo el sistema:
sudo install -m 0644 "$HOME/.mitmproxy/mitmproxy-ca-cert.pem" \
/usr/local/share/ca-certificates/model-gate-local-mitmproxy.crt
sudo update-ca-certificates
Reinicie el cliente. Un almacén de confianza privado de Java/nodo/navegador o una aplicación confinada puede necesitar su propia configuración de confianza documentada; importar a la tienda del sistema operativo no garantiza que todos los clientes confíen en él. Otras distribuciones utilizan sus propios procedimientos de almacenamiento de CA.
Para un proceso de VS Code local llamado code, el mapeo es:
mitmweb --mode local:code \
--listen-host 127.0.0.1 --web-host 127.0.0.1 \
--allow-hosts '^api\.deepseek\.com(:443)?$' \
--set connection_strategy=lazy --set upstream_cert=false \
--set stream_large_bodies --set store_streamed_bodies=false \
-s ./model-gate-response-stream.py \
--set 'map_remote=|^https://api\.deepseek\.com(?::443)?/|https://api.model-gate.com/'
Al igual que en Windows, utilice el proceso/PID de producción de solicitudes real, no necesariamente la ventana del editor. Inspeccionar ps -eo pid,comm,args y sustituir local:12345 según sea necesario. La coincidencia de nombres de Linux está limitada a los primeros 16 caracteres. La captura local en WSL no es compatible y los contenedores necesitan una red de host para este modo. El tráfico desde un host de extensión remota/SSH debe configurarse en la máquina donde se ejecuta ese proceso, no solo en su escritorio.
Streaming, rutas y otros proveedores
El complemento de solo respuesta reenvía respuestas HTTP sin esperar la respuesta completa, lo cual es importante para la entrega de tokens SSE. Los cuerpos de solicitud permanecen almacenados en buffer hasta map_remote ha cambiado el destino. Los cuerpos de transmisión no se retienen para inspección por defecto; los encabezados y el estado siguen siendo útiles. No habilite la retención de cuerpos o la exportación de flujo simplemente para solucionar problemas de una clave. Esta configuración no cambia el JSON del cliente. stream marca y no puede hacer que un proveedor que no sea de transmisión transmita.
La asignación predeterminada conserva las rutas. Un cliente enviando /chat/completions sin /v1 seguirá enviando esa ruta a Model Gate y puede recibir 404. Solo para una API de origen cuyas rutas se sabe que requieren esta normalización, reemplace el map_remote valor con:
map_remote=|^https://api\.deepseek\.com(?::443)?/(?:v1/)?|https://api.model-gate.com/v1/
Esto agrega deliberadamente uno /v1/ prefijo, preservando uno existente, la ruta restante y la consulta. Es una variante separada que cambia de ruta, no el ejemplo de origen exclusivo. Verifique el punto final resultante antes de enviar un mensaje real.
Para un proveedor diferente, reemplace el nombre de host de origen exacto en ambos allow-hosts y map_remote, escape los puntos de expresiones regulares y elija el origen/ruta de destino correcto. Mantén el partido anclado con ^https:// y un límite de nombre de host; nunca utilice un reemplazo de subcadena amplia. Los complementos guardados existentes o las reglas de reescritura pueden alterar el resultado, así que inspeccione su configuración de mitmproxy antes de realizar la prueba.
Aceptación y solución de problemas.
Primera prueba de enrutamiento con una credencial ficticia y un mensaje no sensible; Se espera un error de autenticación en el destino previsto. Sólo después de confirmar el destino, realice una solicitud deliberadamente pequeña con una clave limitada dedicada; la inferencia puede ser facturable. En mitmweb, verifique que el destino sea el host API de Model Gate deseado, que la ruta sea compatible, que el ID/alias del modelo exista y que el estado HTTP sea exitoso. Verifique el historial de solicitudes de Model Gate y confirme que el texto transmitido llegue progresivamente. No publique un encabezado de Autorización ni una exportación de flujo como evidencia.
Ninguna solicitud capturada. El ayudante/PID real, privilegios de captura, ejecución local versus remota, nombre de host de origen y soporte del kernel.
Fallo del certificado TLS. Corrija CA/perfil/tienda y reinicio del cliente. La fijación de certificados es una limitación de compatibilidad, no un motivo para desactivar la verificación.
401. El cliente debe utilizar una clave Model Gate para la cuenta/dominio API coincidente; map_remote no intercambia credenciales.
404. Inspeccione el camino real; el mapeo solo de origen no agrega /v1.
400 o messages.0 / system error. Verifique la compatibilidad del protocolo de solicitud. Una reescritura de origen no traduce las funciones de los mensajes ni otros campos JSON.
Modelo no disponible. Utilice una ID canónica habilitada o un alias existente; el mapeo no cambia el nombre model.
El streaming llega de golpe. Verifique que el complemento de solo respuesta se cargó exitosamente, el cliente stream valor y soporte real del proveedor. No habilite la transmisión de solicitudes globales.
Detener y quitar la confianza
Antes de detener la interceptación, cierre el cliente o elimine la clave Model Gate de su configuración de proveedor original. De lo contrario, su próxima solicitud directa puede enviar esa clave al proveedor original. No asuma que al detener el proxy se produce un error. Detenga mitmweb con Ctrl+C, luego restaure la configuración normal del punto final/clave del cliente.
para las ventanas Usuario actual importe arriba, elimine solo el certificado exacto de esta instalación:
$ca = Join-Path $env:USERPROFILE '.mitmproxy\mitmproxy-ca-cert.cer'
$cert = [System.Security.Cryptography.X509Certificates.X509Certificate2]::new($ca)
certutil -user -delstore Root $cert.Thumbprint
if ($LASTEXITCODE -ne 0) { throw 'CA removal failed; inspect the certificate store.' }
Para el opcional Máquina local importar, usar un shell elevado y certutil -delstore Root $cert.Thumbprint en cambio. Conserve el archivo de CA público hasta que haya identificado y eliminado el certificado de confianza coincidente; no elimine las raíces confiables no relacionadas por nombre.
Para la importación de todo el sistema Ubuntu/Debian anterior:
sudo rm -- /usr/local/share/ca-certificates/model-gate-local-mitmproxy.crt
sudo update-ca-certificates --fresh
Elimine también cualquier configuración de CA específica de la aplicación. Reinicie los clientes. Elimine los artefactos capturados confidenciales y gire la tecla Model Gate dedicada si quedó expuesta o enviada a un destino no deseado. Estos pasos de la estación de trabajo no requieren cambiar nginx, almacenes de confianza del servidor, producción .env archivos o la política TLS de Model Gate.
Referencias oficiales
Revisado el 2026-09-08. Confirme las opciones con su instalado mitmweb --options; La captura de clientes y el comportamiento de confianza aún requieren pruebas en su estación de trabajo.
- Modos y limitaciones de captura local de mitmproxy
- Mapeo y transmisión de URL de mitmproxy
- Ejemplo de complemento de transmisión de respuesta mitmproxy
- Implementación del gancho de solicitud mitmproxy map_remote
- opciones de mitmproxy
- Certificados y fijación de CA mitmproxy
- Autoridad y destino de solicitud HTTP mitmproxy
- Microsoft certutil
- Instalación y eliminación de Ubuntu CA