coturn/coturn

GitHub: coturn/coturn

企业级开源 TURN/STUN 服务器,用于 WebRTC 和 VoIP 应用的 NAT 穿透与媒体中继。

Stars: 13675 | Forks: 2209

[![Docker CI](https://github.com/coturn/coturn/actions/workflows/docker.yml/badge.svg "Docker CI")](https://github.com/coturn/coturn/actions/workflows/docker.yml) [![Docker Hub](https://img.shields.io/docker/pulls/coturn/coturn?label=Docker%20Hub%20pulls "Docker Hub pulls")](https://hub.docker.com/r/coturn/coturn) [![Fuzzing Status](https://oss-fuzz-build-logs.storage.googleapis.com/badges/coturn.svg)](https://bugs.chromium.org/p/oss-fuzz/issues/list?sort=-opened&can=1&q=proj:coturn) [Docker Hub](https://hub.docker.com/r/coturn/coturn) | [GitHub Container Registry](https://github.com/orgs/coturn/packages/container/package/coturn) | [Quay.io](https://quay.io/repository/coturn/coturn) # Coturn TURN 服务器 coturn 是一个免费开源的 TURN 和 STUN 服务器实现。 TURN 服务器是一个 VoIP 媒体流量 NAT 穿透服务器和网关。 ## 安装 / 入门 Linux 发行版可能包含 coturn 的版本,您可以通过以下方式安装: ``` apt install coturn turnserver --log-file stdout ``` 或者使用 Docker 容器运行 coturn: ``` docker run -d -p 3478:3478 -p 3478:3478/udp -p 5349:5349 -p 5349:5349/udp -p 49152-65535:49152-65535/udp coturn/coturn ``` 有关使用 Docker 容器的更多详细信息,请参阅 [Docker Readme](https://github.com/coturn/coturn/blob/master/docker/coturn/README.md) ## 开发 ### 依赖项 coturn 需要先安装以下依赖项 - libevent2 可选 - openssl(支持 TLS 和 DTLS,授权 STUN 和 TURN) - libmicrohttp 和 [prometheus-client-c](https://github.com/digitalocean/prometheus-client-c)(prometheus 接口) - MariaDB/MySQL(用户数据库) - [Hiredis](https://github.com/redis/hiredis)(用户数据库,监控) - SQLite(用户数据库) - PostgreSQL(用户数据库) ### 构建 ``` git clone git@github.com:coturn/coturn.git cd coturn ./configure make ``` ## 功能 STUN 规范: * [RFC 3489](https://datatracker.ietf.org/doc/html/rfc3489) - “经典” STUN * [RFC 5389](https://datatracker.ietf.org/doc/html/rfc5389) - 基础“新” STUN 规范 * [RFC 5769](https://datatracker.ietf.org/doc/html/rfc5769) - STUN 协议测试的测试向量 * [RFC 5780](https://datatracker.ietf.org/doc/html/rfc5780) - NAT 行为发现支持 * [RFC 7443](https://datatracker.ietf.org/doc/html/rfc7443) - STUN & TURN 的 ALPN 支持 * [RFC 7635](https://datatracker.ietf.org/doc/html/rfc7635) - oAuth 第三方 TURN/STUN 授权 TURN 规范: * [RFC 5766](https://datatracker.ietf.org/doc/html/rfc5766) - 基础 TURN 规范 * [RFC 6062](https://datatracker.ietf.org/doc/html/rfc6062) - TCP 中继 TURN 扩展 * [RFC 6156](https://datatracker.ietf.org/doc/html/rfc6156) - TURN 的 IPv6 扩展 * [RFC 7443](https://datatracker.ietf.org/doc/html/rfc7443) - STUN & TURN 的 ALPN 支持 * [RFC 7635](https://datatracker.ietf.org/doc/html/rfc7635) - oAuth 第三方 TURN/STUN 授权 * [RFC 8016](https://datatracker.ietf.org/doc/html/rfc8016) - 使用中继穿越 NAT (TURN) 的移动性 * DTLS 支持 (http://tools.ietf.org/html/draft-petithuguenin-tram-turn-dtls-00) * TURN REST API (http://tools.ietf.org/html/draft-uberti-behave-turn-rest-00) * TURN 中的 Origin 字段(多租户 TURN 服务器)(https://tools.ietf.org/html/draft-ietf-tram-stun-origin-06) * TURN 带宽草案规范 (http://tools.ietf.org/html/draft-thomson-tram-turn-bandwidth-01) * TURN-bis(双重分配)草案规范 (http://tools.ietf.org/html/draft-ietf-tram-turnbis-04) ICE 及相关规范: * [RFC 5245](https://datatracker.ietf.org/doc/html/rfc5245) - ICE * [RFC 5768](https://datatracker.ietf.org/doc/html/rfc5768) – ICE–SIP * [RFC 6336](https://datatracker.ietf.org/doc/html/rfc6336) – ICE–IANA 注册表 * [RFC 6544](https://datatracker.ietf.org/doc/html/rfc6544) – ICE–TCP * [RFC 5928](https://datatracker.ietf.org/doc/html/rfc5928) - TURN 解析机制 该实现完全支持以下客户端到 TURN 服务器的协议: * UDP(依据 [RFC 5766](https://datatracker.ietf.org/doc/html/rfc5766)) * TCP(依据 [RFC 5766](https://datatracker.ietf.org/doc/html/rfc5766) 和 [RFC 6062](https://datatracker.ietf.org/doc/html/rfc6062)) * TLS(依据 [RFC 5766](https://datatracker.ietf.org/doc/html/rfc) 和 [RFC 6062](https://datatracker.ietf.org/doc/html/rfc6062)):包括 TLS1.3;支持 ECDHE。 * DTLS1.0 和 DTLS1.2 (http://tools.ietf.org/html/draft-petithuguenin-tram-turn-dtls-00) * SCTP(实验性实现)。 中继协议: * UDP(依据 [RFC 5766](https://datatracker.ietf.org/doc/html/rfc5766)) * TCP(依据 [RFC 6062](https://datatracker.ietf.org/doc/html/rfc6062)) 用户数据库(用于用户存储库,包含密码或密钥,如果需要身份验证): * SQLite * MariaDB/MySQL * PostgreSQL * Redis * MongoDB 管理接口: * telnet cli * HTTPS 接口 监控: * Redis 可用于状态和统计存储及通知 * [prometheus](https://prometheus.io/) 接口(在 apt 包中不可用) 消息完整性摘要算法: * HMAC-SHA1,使用 MD5 哈希密钥(根据 STUN 和 TURN 标准的要求) TURN 身份验证机制: * “经典”长期凭证机制; * TURN REST API(长期机制的修改版,用于基于密钥的限时身份验证,适用于 WebRTC 应用程序:http://tools.ietf.org/html/draft-uberti-behave-turn-rest-00); * 实验性的第三方基于 oAuth 的客户端授权选项; 性能和负载均衡: 当作为 ICE 解决方案的一部分用于 VoIP 连接时,此 TURN 服务器每个 CPU 可以处理数千个并发呼叫(使用 TURN 协议时),或者仅使用 STUN 协议时数万个呼叫。为了实现几乎无限的可扩展性,可以使用负载均衡方案。负载均衡可以通过以下工具(其中一个或它们的组合)来实现: * 基于 DNS SRV 的负载均衡; * 内置 300 ALTERNATE-SERVER 机制(需要 TURN 客户端支持 300 响应); * 网络负载均衡服务器。 已实现流量带宽限制和拥塞避免算法。 目标平台: * Linux (Debian, Ubuntu, Mint, CentOS, Fedora, Redhat, Amazon Linux, Arch Linux, OpenSUSE) * BSD (FreeBSD, NetBSD, OpenBSD, DragonFlyBSD) * Solaris 11 * Mac OS X * Cygwin(用于非生产环境的 R&D 目的) * Windows(原生,例如使用 MSVC 工具链) 该项目也可以在其他 `*NIX` 平台上成功使用,但这不是官方支持的。 该实现旨在简单、易于安装和配置。该项目专注于性能、可扩展性和简单性。目标是提供企业级的 TURN 解决方案。 为了实现高性能和可扩展性,TURN 服务器实现了以下功能: * 使用高性能工业级网络 IO 引擎 libevent2 * 实现可配置的多线程模型,以允许充分利用可用的 CPU 资源(如果 OS 允许多线程) * 可以配置多个监听和中继地址 * 使用高效的内存模型 * TURN 项目代码可用于自定义的专有网络环境。在 TURN 服务器代码中,使用了抽象的网络 API。只需重写项目中的几个文件即可将 TURN 服务器插入到专有环境中。本项目仅提供标准 UNIX 网络/IO API 的实现,但用户可以实现任何其他环境。TURN 服务器代码最初是为高性能专有企业环境开发的,随后被适配用于 UNIX 网络 API * TURN 服务器作为用户空间进程运行,对系统没有任何特殊要求 ## 链接 - 项目主页:https://coturn.github.io/ - 代码仓库:https://github.com/coturn/coturn/ - 问题追踪:https://github.com/coturn/coturn/issues - Google 讨论组:https://groups.google.com/forum/#!forum/turn-server-project-rfc5766-turn-server
标签:coturn, Docker容器, ICE协议, libevent, NAT穿透, RFC3489, RFC5389, STUN服务器, TLS/DTLS加密, TURN服务器, UDP/TCP, VoIP, WebRTC, 代理服务, 信令协议, 安全测试工具, 实时通信, 客户端加密, 客户端加密, 开源, 搜索引擎查询, 攻击面发现, 数据包转发, 服务端软件, 流媒体服务, 测试用例, 系统运维, 网络中继, 网络基础设施, 自定义请求头, 请求拦截