From 0177cdf2e3e8493a0336261664645d63d9fb2f77 Mon Sep 17 00:00:00 2001 From: Thibaut Ackermann Date: Mon, 15 May 2017 10:12:44 +0200 Subject: [PATCH 01/20] Move web-admin interface to dedicated (and configurable) ip:port --- src/apps/relay/mainrelay.c | 23 ++++ src/apps/relay/turn_admin_server.c | 177 +++++++++++++++++++++++++++++ src/apps/relay/turn_admin_server.h | 10 ++ src/server/ns_turn_server.c | 31 +---- 4 files changed, 211 insertions(+), 30 deletions(-) diff --git a/src/apps/relay/mainrelay.c b/src/apps/relay/mainrelay.c index 7aba10c2..95e4bb89 100644 --- a/src/apps/relay/mainrelay.c +++ b/src/apps/relay/mainrelay.c @@ -606,6 +606,10 @@ static char Usage[] = "Usage: turnserver [options]\n" " For the security reasons, it is recommended to use the encrypted\n" " for of the password (see the -P command in the turnadmin utility).\n" " The dollar signs in the encrypted form must be escaped.\n" +" --no-web-admin Turn OFF the Web-admin support. By default it is always ON.\n" +" --web-admin-ip= Local system IP address to be used for Web-admin server endpoint. Default value\n" +" is 127.0.0.1.\n" +" --web-admin-port= Web-admin server port. Default is 8080.\n" " --server-relay Server relay. NON-STANDARD AND DANGEROUS OPTION. Only for those applications\n" " when we want to run server applications on the relay endpoints.\n" " This option eliminates the IP permissions check on the packets\n" @@ -725,6 +729,9 @@ enum EXTRA_OPTS { CLI_IP_OPT, CLI_PORT_OPT, CLI_PASSWORD_OPT, + NO_WEB_ADMIN_OPT, + WEB_ADMIN_IP_OPT, + WEB_ADMIN_PORT_OPT, SERVER_RELAY_OPT, CLI_MAX_SESSIONS_OPT, EC_CURVE_NAME_OPT, @@ -849,6 +856,9 @@ static const struct myoption long_options[] = { { "cli-ip", required_argument, NULL, CLI_IP_OPT }, { "cli-port", required_argument, NULL, CLI_PORT_OPT }, { "cli-password", required_argument, NULL, CLI_PASSWORD_OPT }, + { "no-web-admin", optional_argument, NULL, NO_WEB_ADMIN_OPT }, + { "web-admin-ip", required_argument, NULL, WEB_ADMIN_IP_OPT }, + { "web-admin-port", required_argument, NULL, WEB_ADMIN_PORT_OPT }, { "server-relay", optional_argument, NULL, SERVER_RELAY_OPT }, { "cli-max-output-sessions", required_argument, NULL, CLI_MAX_SESSIONS_OPT }, { "ec-curve-name", required_argument, NULL, EC_CURVE_NAME_OPT }, @@ -1005,6 +1015,19 @@ static void set_option(int c, char *value) case CLI_PASSWORD_OPT: STRCPY(cli_password,value); break; + case NO_WEB_ADMIN_OPT: + use_web_admin = !get_bool_value(value); + break; + case WEB_ADMIN_IP_OPT: + if(make_ioa_addr((const u08bits*)value, 0, &web_admin_addr) < 0) { + TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "Cannot set web-admin address: %s\n", value); + } else { + web_admin_addr_set = 1; + } + break; + case WEB_ADMIN_PORT_OPT: + web_admin_port = atoi(value); + break; case PROC_USER_OPT: { struct passwd* pwd = getpwnam(value); if(!pwd) { diff --git a/src/apps/relay/turn_admin_server.c b/src/apps/relay/turn_admin_server.c index 54c40a16..266a8b14 100644 --- a/src/apps/relay/turn_admin_server.c +++ b/src/apps/relay/turn_admin_server.c @@ -71,6 +71,8 @@ #include "dbdrivers/dbdriver.h" +#include "tls_listener.h" + /////////////////////////////// struct admin_server adminserver; @@ -86,6 +88,14 @@ char cli_password[CLI_PASSWORD_LENGTH] = ""; int cli_max_output_sessions = DEFAULT_CLI_MAX_OUTPUT_SESSIONS; + +int use_web_admin = 1; + +ioa_addr web_admin_addr; +int web_admin_addr_set = 0; + +int web_admin_port = WEB_ADMIN_DEFAULT_PORT; + /////////////////////////////// struct cli_session { @@ -1186,6 +1196,129 @@ static void cliserver_input_handler(struct evconnlistener *l, evutil_socket_t fd } } +static void web_admin_input_handler(ioa_socket_handle s, int event_type, + ioa_net_data *in_buffer, void *arg, int can_resume) { + + if (!arg) + return; + + UNUSED_ARG(event_type); + UNUSED_ARG(can_resume); + + ts_ur_super_session* ss = (ts_ur_super_session*)arg; + + if (ss->client_socket != s) { + return; + } + + int buffer_size = (int)ioa_network_buffer_get_size(in_buffer->nbh); + if (buffer_size > 0) { + + SOCKET_TYPE st = get_ioa_socket_type(ss->client_socket); + + if(is_stream_socket(st)) { + if(is_http((char*)ioa_network_buffer_data(in_buffer->nbh), buffer_size)) { + const char *proto = "HTTP"; + ioa_network_buffer_data(in_buffer->nbh)[buffer_size] = 0; + if(st == TLS_SOCKET) { + proto = "HTTPS"; + set_ioa_socket_app_type(ss->client_socket, HTTPS_CLIENT_SOCKET); + + TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO, "%s: %s (%s %s) request: %s\n", __FUNCTION__, proto, get_ioa_socket_cipher(ss->client_socket), get_ioa_socket_ssl_method(ss->client_socket), (char*)ioa_network_buffer_data(in_buffer->nbh)); + + TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO, "%s socket to be detached: 0x%lx, st=%d, sat=%d\n", __FUNCTION__,(long)ss->client_socket, get_ioa_socket_type(ss->client_socket), get_ioa_socket_app_type(ss->client_socket)); + + ioa_socket_handle new_s = detach_ioa_socket(ss->client_socket); + if(new_s) { + TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO, "%s new detached socket: 0x%lx, st=%d, sat=%d\n", __FUNCTION__,(long)new_s, get_ioa_socket_type(new_s), get_ioa_socket_app_type(new_s)); + + send_https_socket(new_s); + } + ss->to_be_closed = 1; + + } else { + set_ioa_socket_app_type(ss->client_socket, HTTP_CLIENT_SOCKET); + if(adminserver.verbose) { + TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO, "%s: %s request: %s\n", __FUNCTION__, proto, (char*)ioa_network_buffer_data(in_buffer->nbh)); + } + handle_http_echo(ss->client_socket); + } + } + } + } + + if (ss->to_be_closed) { + if(adminserver.verbose) { + TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO, + "session %018llu: web-admin socket to be closed in client handler: ss=0x%lx\n", (unsigned long long)(ss->id), (long)ss); + } + set_ioa_socket_tobeclosed(s); + } +} + +static int send_socket_to_admin_server(ioa_engine_handle e, struct message_to_relay *sm) +{ + // sm->relay_server is null for us. + + sm->t = RMT_SOCKET; + + if (sm->m.sm.s->defer_nbh) { + if (!sm->m.sm.nd.nbh) { + sm->m.sm.nd.nbh = sm->m.sm.s->defer_nbh; + sm->m.sm.s->defer_nbh = NULL; + } else { + ioa_network_buffer_delete(e, sm->m.sm.s->defer_nbh); + sm->m.sm.s->defer_nbh = NULL; + } + } + + ioa_socket_handle s = sm->m.sm.s; + + if (!s) { + TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "%s: web-admin socket EMPTY\n", __FUNCTION__); + + } else if (s->read_event || s->bev) { + TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, + "%s: web-admin socket wrongly preset: 0x%lx : 0x%lx\n", + __FUNCTION__, (long) s->read_event, (long) s->bev); + + IOA_CLOSE_SOCKET(s); + sm->m.sm.s = NULL; + } else { + s->e = e; + + struct socket_message *msg = &(sm->m.sm); + + ts_ur_super_session *ss = (ts_ur_super_session*)turn_malloc(sizeof(ts_ur_super_session)); + ns_bzero(ss, sizeof(ts_ur_super_session)); + + ss->client_socket = msg->s; + + if(register_callback_on_ioa_socket(e, ss->client_socket, IOA_EV_READ, + web_admin_input_handler, ss, 0) < 0) { + + TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO, "%s: Failed to register callback on web-admin ioa socket\n", __FUNCTION__); + IOA_CLOSE_SOCKET(s); + sm->m.sm.s = NULL; + + } else { + + set_ioa_socket_session(ss->client_socket, ss); + + if(msg->nd.nbh) { + web_admin_input_handler(ss->client_socket, IOA_EV_READ, &(msg->nd), ss, msg->can_resume); + ioa_network_buffer_delete(e, msg->nd.nbh); + msg->nd.nbh = NULL; + } + } + } + + ioa_network_buffer_delete(e, sm->m.sm.nd.nbh); + sm->m.sm.nd.nbh = NULL; + + return 0; +} + void setup_admin_thread(void) { adminserver.event_base = turn_event_base_new(); @@ -1197,6 +1330,25 @@ void setup_admin_thread(void) #endif ); + if(use_web_admin) { + // Support encryption on this ioa engine + // because the web-admin needs HTTPS + set_ssl_ctx(adminserver.e, turn_params.tls_ctx_ssl23, turn_params.tls_ctx_v1_0 +#if TLSv1_1_SUPPORTED + ,turn_params.tls_ctx_v1_1 +#if TLSv1_2_SUPPORTED + ,turn_params.tls_ctx_v1_2 +#endif +#endif +#if DTLS_SUPPORTED + ,turn_params.dtls_ctx +#endif +#if DTLSv1_2_SUPPORTED + ,turn_params.dtls_ctx_v1_2 +#endif + ); + } + TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO,"IO method (admin thread): %s\n",event_base_get_method(adminserver.event_base)); { @@ -1223,6 +1375,31 @@ void setup_admin_thread(void) bufferevent_enable(adminserver.https_in_buf, EV_READ); } + + // Setup the web-admin server + if(use_web_admin) { + if(!web_admin_addr_set) { + if(make_ioa_addr((const u08bits*)WEB_ADMIN_DEFAULT_IP, 0, &web_admin_addr) < 0) { + TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "Cannot set web-admin address %s\n", WEB_ADMIN_DEFAULT_IP); + return; + } + } + + addr_set_port(&web_admin_addr, web_admin_port); + + char saddr[129]; + addr_to_string_no_port(&web_admin_addr,(u08bits*)saddr); + + tls_listener_relay_server_type *tls_service = create_tls_listener_server(turn_params.listener_ifname, saddr, web_admin_port, turn_params.verbose, adminserver.e, send_socket_to_admin_server, NULL); + + if (tls_service == NULL) { + TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR,"Cannot create web-admin listener\n"); + return; + } + + addr_debug_print(adminserver.verbose, &web_admin_addr, "web-admin listener opened on "); + } + if(use_cli) { if(!cli_addr_set) { if(make_ioa_addr((const u08bits*)CLI_DEFAULT_IP,0,&cli_addr)<0) { diff --git a/src/apps/relay/turn_admin_server.h b/src/apps/relay/turn_admin_server.h index a1e5570c..7edb47f7 100644 --- a/src/apps/relay/turn_admin_server.h +++ b/src/apps/relay/turn_admin_server.h @@ -94,6 +94,16 @@ extern char cli_password[CLI_PASSWORD_LENGTH]; #define DEFAULT_CLI_MAX_OUTPUT_SESSIONS (256) extern int cli_max_output_sessions; + +extern int use_web_admin; + +#define WEB_ADMIN_DEFAULT_IP ("127.0.0.1") +extern ioa_addr web_admin_addr; +extern int web_admin_addr_set; + +#define WEB_ADMIN_DEFAULT_PORT (8080) +extern int web_admin_port; + //////////////////////////////////////////// void setup_admin_thread(void); diff --git a/src/server/ns_turn_server.c b/src/server/ns_turn_server.c index 1045ba95..b6d0bc4a 100644 --- a/src/server/ns_turn_server.c +++ b/src/server/ns_turn_server.c @@ -4542,37 +4542,8 @@ static int read_client_connection(turn_turnserver *server, return 0; } - } else { - SOCKET_TYPE st = get_ioa_socket_type(ss->client_socket); - if(is_stream_socket(st)) { - if(is_http((char*)ioa_network_buffer_data(in_buffer->nbh), ioa_network_buffer_get_size(in_buffer->nbh))) { - const char *proto = "HTTP"; - ioa_network_buffer_data(in_buffer->nbh)[ioa_network_buffer_get_size(in_buffer->nbh)] = 0; - if(st==TLS_SOCKET) { - proto = "HTTPS"; - set_ioa_socket_app_type(ss->client_socket,HTTPS_CLIENT_SOCKET); - TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO, "%s: %s (%s %s) request: %s\n", __FUNCTION__, proto, get_ioa_socket_cipher(ss->client_socket), get_ioa_socket_ssl_method(ss->client_socket), (char*)ioa_network_buffer_data(in_buffer->nbh)); - if(server->send_https_socket) { - TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO, "%s socket to be detached: 0x%lx, st=%d, sat=%d\n", __FUNCTION__,(long)ss->client_socket, get_ioa_socket_type(ss->client_socket), get_ioa_socket_app_type(ss->client_socket)); - ioa_socket_handle new_s = detach_ioa_socket(ss->client_socket); - if(new_s) { - TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO, "%s new detached socket: 0x%lx, st=%d, sat=%d\n", __FUNCTION__,(long)new_s, get_ioa_socket_type(new_s), get_ioa_socket_app_type(new_s)); - server->send_https_socket(new_s); - } - ss->to_be_closed = 1; - } - } else { - set_ioa_socket_app_type(ss->client_socket,HTTP_CLIENT_SOCKET); - if(server->verbose) { - TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO, "%s: %s request: %s\n", __FUNCTION__, proto, (char*)ioa_network_buffer_data(in_buffer->nbh)); - } - handle_http_echo(ss->client_socket); - } - return 0; - } - } } - + //Unrecognized message received, ignore it FUNCEND; From 4988ef6ae80fe643ef0c924f75fa755e8469742c Mon Sep 17 00:00:00 2001 From: Thibaut Ackermann Date: Tue, 2 Oct 2018 15:51:01 +0200 Subject: [PATCH 02/20] fix memory leak in web_admin_input_handler --- src/apps/relay/turn_admin_server.c | 48 +++++++++++------------------- 1 file changed, 17 insertions(+), 31 deletions(-) diff --git a/src/apps/relay/turn_admin_server.c b/src/apps/relay/turn_admin_server.c index 266a8b14..71de2b64 100644 --- a/src/apps/relay/turn_admin_server.c +++ b/src/apps/relay/turn_admin_server.c @@ -1198,23 +1198,16 @@ static void cliserver_input_handler(struct evconnlistener *l, evutil_socket_t fd static void web_admin_input_handler(ioa_socket_handle s, int event_type, ioa_net_data *in_buffer, void *arg, int can_resume) { - - if (!arg) - return; - UNUSED_ARG(event_type); UNUSED_ARG(can_resume); - - ts_ur_super_session* ss = (ts_ur_super_session*)arg; - - if (ss->client_socket != s) { - return; - } - + UNUSED_ARG(arg); + + int to_be_closed = 0; + int buffer_size = (int)ioa_network_buffer_get_size(in_buffer->nbh); if (buffer_size > 0) { - SOCKET_TYPE st = get_ioa_socket_type(ss->client_socket); + SOCKET_TYPE st = get_ioa_socket_type(s); if(is_stream_socket(st)) { if(is_http((char*)ioa_network_buffer_data(in_buffer->nbh), buffer_size)) { @@ -1222,35 +1215,35 @@ static void web_admin_input_handler(ioa_socket_handle s, int event_type, ioa_network_buffer_data(in_buffer->nbh)[buffer_size] = 0; if(st == TLS_SOCKET) { proto = "HTTPS"; - set_ioa_socket_app_type(ss->client_socket, HTTPS_CLIENT_SOCKET); + set_ioa_socket_app_type(s, HTTPS_CLIENT_SOCKET); - TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO, "%s: %s (%s %s) request: %s\n", __FUNCTION__, proto, get_ioa_socket_cipher(ss->client_socket), get_ioa_socket_ssl_method(ss->client_socket), (char*)ioa_network_buffer_data(in_buffer->nbh)); + TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO, "%s: %s (%s %s) request: %s\n", __FUNCTION__, proto, get_ioa_socket_cipher(s), get_ioa_socket_ssl_method(s), (char*)ioa_network_buffer_data(in_buffer->nbh)); - TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO, "%s socket to be detached: 0x%lx, st=%d, sat=%d\n", __FUNCTION__,(long)ss->client_socket, get_ioa_socket_type(ss->client_socket), get_ioa_socket_app_type(ss->client_socket)); + TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO, "%s socket to be detached: 0x%lx, st=%d, sat=%d\n", __FUNCTION__,(long)s, get_ioa_socket_type(s), get_ioa_socket_app_type(s)); - ioa_socket_handle new_s = detach_ioa_socket(ss->client_socket); + ioa_socket_handle new_s = detach_ioa_socket(s); if(new_s) { TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO, "%s new detached socket: 0x%lx, st=%d, sat=%d\n", __FUNCTION__,(long)new_s, get_ioa_socket_type(new_s), get_ioa_socket_app_type(new_s)); send_https_socket(new_s); } - ss->to_be_closed = 1; + to_be_closed = 1; } else { - set_ioa_socket_app_type(ss->client_socket, HTTP_CLIENT_SOCKET); + set_ioa_socket_app_type(s, HTTP_CLIENT_SOCKET); if(adminserver.verbose) { TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO, "%s: %s request: %s\n", __FUNCTION__, proto, (char*)ioa_network_buffer_data(in_buffer->nbh)); } - handle_http_echo(ss->client_socket); + handle_http_echo(s); } } } } - if (ss->to_be_closed) { + if (to_be_closed) { if(adminserver.verbose) { TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO, - "session %018llu: web-admin socket to be closed in client handler: ss=0x%lx\n", (unsigned long long)(ss->id), (long)ss); + "%s: web-admin socket to be closed in client handler: s=0x%lx\n", __FUNCTION__, (long)s); } set_ioa_socket_tobeclosed(s); } @@ -1289,13 +1282,8 @@ static int send_socket_to_admin_server(ioa_engine_handle e, struct message_to_re struct socket_message *msg = &(sm->m.sm); - ts_ur_super_session *ss = (ts_ur_super_session*)turn_malloc(sizeof(ts_ur_super_session)); - ns_bzero(ss, sizeof(ts_ur_super_session)); - - ss->client_socket = msg->s; - - if(register_callback_on_ioa_socket(e, ss->client_socket, IOA_EV_READ, - web_admin_input_handler, ss, 0) < 0) { + if(register_callback_on_ioa_socket(e, msg->s, IOA_EV_READ, + web_admin_input_handler, NULL, 0) < 0) { TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO, "%s: Failed to register callback on web-admin ioa socket\n", __FUNCTION__); IOA_CLOSE_SOCKET(s); @@ -1303,10 +1291,8 @@ static int send_socket_to_admin_server(ioa_engine_handle e, struct message_to_re } else { - set_ioa_socket_session(ss->client_socket, ss); - if(msg->nd.nbh) { - web_admin_input_handler(ss->client_socket, IOA_EV_READ, &(msg->nd), ss, msg->can_resume); + web_admin_input_handler(msg->s, IOA_EV_READ, &(msg->nd), NULL, msg->can_resume); ioa_network_buffer_delete(e, msg->nd.nbh); msg->nd.nbh = NULL; } From 04a9ba425dd805241a0f2b25598e14cd251be760 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=89SZ=C3=81ROS=20Mih=C3=A1ly?= Date: Wed, 10 Oct 2018 15:26:12 +0200 Subject: [PATCH 03/20] docker initial import (in progress) --- docker/Dockerfile | 68 ++++ docker/docker-compose.yml | 77 +++++ docker/turnserver.conf | 682 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 827 insertions(+) create mode 100644 docker/Dockerfile create mode 100644 docker/docker-compose.yml create mode 100644 docker/turnserver.conf diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 00000000..08f7a107 --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,68 @@ +### 1. stage: create build image +FROM debian:stable AS coturn-build + +ENV BUILD_PREFIX /usr/local/src + +# Install build dependencies +RUN export DEBIAN_FRONTEND=noninteractive && \ + apt-get update && \ + apt-get install -y build-essential git debhelper dpkg-dev libssl-dev libevent-dev sqlite3 libsqlite3-dev postgresql-client libpq-dev default-mysql-client default-libmysqlclient-dev libhiredis-dev libmongoc-dev libbson-dev + +# Clone coTURN +WORKDIR ${BUILD_PREFIX} +RUN git clone https://github.com/coturn/coturn.git + +# Build coTURN +WORKDIR coturn +RUN ./configure +RUN make + +### 2. stage: create production image + +FROM debian:stable-slim AS coturn + +ENV INSTALL_PREFIX /usr/local +ENV BUILD_PREFIX /usr/local/src +ENV TURNSERVER_GROUP turnserver +ENV TURNSERVER_USER turnserver + +COPY --from=coturn-build ${BUILD_PREFIX}/coturn/bin/ ${INSTALL_PREFIX}/bin/ +COPY --from=coturn-build ${BUILD_PREFIX}/coturn/man/ ${INSTALL_PREFIX}/man/ +COPY turnserver.conf ${INSTALL_PREFIX}/etc +COPY --from=coturn-build ${BUILD_PREFIX}/coturn/sqlite/turndb ${INSTALL_PREFIX}/var/db/turndb +# Install build dependencies +RUN export DEBIAN_FRONTEND=noninteractive && \ + apt-get update && \ + apt-get install -y libc6>=2.15 libevent-core-2.0-5>=2.0.10-stable libevent-extra-2.0-5>=2.0.10-stable libevent-openssl-2.0-5>=2.0.10-stable libevent-pthreads-2.0-5>=2.0.10-stable libhiredis0.13>=0.13.1 libmariadbclient18>=5.5.36 libpq5>=8.4~ libsqlite3-0>=3.6.0 libssl1.1>=1.1.0 libmongoc-1.0 libbson-1.0 + +RUN if ! getent group "$TURNSERVER_GROUP" >/dev/null; then \ + addgroup --system "$TURNSERVER_GROUP" || exit 1 ;\ + fi \ + && \ + if ! getent passwd "$TURNSERVER_USER" >/dev/null; then \ + adduser --system \ + --home / \ + --shell /bin/false \ + --no-create-home \ + --ingroup "$TURNSERVER_GROUP" \ + --disabled-password \ + --disabled-login \ + --gecos "turnserver daemon" \ + "$TURNSERVER_USER" || exit 1; \ + fi + + +# set startup parameters +# SUTN/TURN PORTS +EXPOSE 3478 3479 3478/udp 3479/udp 80 80/udp +EXPOSE 5349 5350 5349/udp 5350/udp 443 443/udp +# CLI +EXPOSE 5766 +# Relay Ports +EXPOSE 49152-65535 49152-65535/udp + + +WORKDIR ${INSTALL_PREFIX} + +CMD ${INSTALL_PREFIX}/bin/turnserver + diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml new file mode 100644 index 00000000..74784a3a --- /dev/null +++ b/docker/docker-compose.yml @@ -0,0 +1,77 @@ +version: "3" +services: + +# MySQL mariadb + mariadb: + image: mariadb + restart: unless-stopped + env_file: env/mysql.env + networks: + - backend + +# PostgreSQL + postgresql: + image: postgresql + restart: unless-stopped + env_file: env/postgresql.env + networks: + - backend + +# Redis + redis: + image: redis + restart: unless-stopped + env_file: env/redis.env + networks: + - backend + +# MongoDB + mongodb: + image: mongodb + restart: unless-stopped + env_file: env/mongodb.env + networks: + - backend + + +# coTURN + coturn: + image: coturn + restart: unless-stopped + ports: +## STUN/TURN + - "3478" + - "3478/udp" + - "3479" + - "3479/udp" + - "80" + - "80/udp" +## STUN/TURN SSL + - "5349" + - "5349/udp" + - "5350" + - "5350/udp" + - "443" + - "443/udp" +# Relay Ports + - "49152-65535" + - "49152-65535/udp" + networks: + - frontend + - backend + depends_on: + - mysql + - postgresql + - redis + - mongodb + env_file: + - env/coturn.env +# DB + - env/mysql.env + - env/postresql.env + - env/redis.env + - env/mongodb.env + +networks: + frontend: + backend: diff --git a/docker/turnserver.conf b/docker/turnserver.conf new file mode 100644 index 00000000..45b65141 --- /dev/null +++ b/docker/turnserver.conf @@ -0,0 +1,682 @@ +# Coturn TURN SERVER configuration file +# +# Boolean values note: where boolean value is supposed to be used, +# you can use '0', 'off', 'no', 'false', 'f' as 'false, +# and you can use '1', 'on', 'yes', 'true', 't' as 'true' +# If the value is missed, then it means 'true'. +# + +# Listener interface device (optional, Linux only). +# NOT RECOMMENDED. +# +#listening-device=eth0 + +# TURN listener port for UDP and TCP (Default: 3478). +# Note: actually, TLS & DTLS sessions can connect to the +# "plain" TCP & UDP port(s), too - if allowed by configuration. +# +listening-port=3478 + +# TURN listener port for TLS (Default: 5349). +# Note: actually, "plain" TCP & UDP sessions can connect to the TLS & DTLS +# port(s), too - if allowed by configuration. The TURN server +# "automatically" recognizes the type of traffic. Actually, two listening +# endpoints (the "plain" one and the "tls" one) are equivalent in terms of +# functionality; but we keep both endpoints to satisfy the RFC 5766 specs. +# For secure TCP connections, we currently support SSL version 3 and +# TLS version 1.0, 1.1 and 1.2. +# For secure UDP connections, we support DTLS version 1. +# +tls-listening-port=5349 + +# Alternative listening port for UDP and TCP listeners; +# default (or zero) value means "listening port plus one". +# This is needed for RFC 5780 support +# (STUN extension specs, NAT behavior discovery). The TURN Server +# supports RFC 5780 only if it is started with more than one +# listening IP address of the same family (IPv4 or IPv6). +# RFC 5780 is supported only by UDP protocol, other protocols +# are listening to that endpoint only for "symmetry". +# +alt-listening-port=0 + +# Alternative listening port for TLS and DTLS protocols. +# Default (or zero) value means "TLS listening port plus one". +# +alt-tls-listening-port=0 + +# Listener IP address of relay server. Multiple listeners can be specified. +# If no IP(s) specified in the config file or in the command line options, +# then all IPv4 and IPv6 system IPs will be used for listening. +# +#listening-ip=172.17.19.101 +#listening-ip=10.207.21.238 +#listening-ip=2607:f0d0:1002:51::4 + +# Auxiliary STUN/TURN server listening endpoint. +# Aux servers have almost full TURN and STUN functionality. +# The (minor) limitations are: +# +# 1) Auxiliary servers do not have alternative ports and +# they do not support STUN RFC 5780 functionality (CHANGE REQUEST). +# +# 2) Auxiliary servers also are never returning ALTERNATIVE-SERVER reply. +# +# Valid formats are 1.2.3.4:5555 for IPv4 and [1:2::3:4]:5555 for IPv6. +# +# There may be multiple aux-server options, each will be used for listening +# to client requests. +# +#aux-server=172.17.19.110:33478 +#aux-server=[2607:f0d0:1002:51::4]:33478 + +# (recommended for older Linuxes only) +# Automatically balance UDP traffic over auxiliary servers (if configured). +# The load balancing is using the ALTERNATE-SERVER mechanism. +# The TURN client must support 300 ALTERNATE-SERVER response for this +# functionality. +# +#udp-self-balance + +# Relay interface device for relay sockets (optional, Linux only). +# NOT RECOMMENDED. +# +#relay-device=eth1 + +# Relay address (the local IP address that will be used to relay the +# packets to the peer). +# Multiple relay addresses may be used. +# The same IP(s) can be used as both listening IP(s) and relay IP(s). +# +# If no relay IP(s) specified, then the turnserver will apply the default +# policy: it will decide itself which relay addresses to be used, and it +# will always be using the client socket IP address as the relay IP address +# of the TURN session (if the requested relay address family is the same +# as the family of the client socket). +# +#relay-ip=172.17.19.105 +#relay-ip=2607:f0d0:1002:51::5 + +# For Amazon EC2 users: +# +# TURN Server public/private address mapping, if the server is behind NAT. +# In that situation, if a -X is used in form "-X " then that ip will be reported +# as relay IP address of all allocations. This scenario works only in a simple case +# when one single relay address is be used, and no RFC5780 functionality is required. +# That single relay address must be mapped by NAT to the 'external' IP. +# The "external-ip" value, if not empty, is returned in XOR-RELAYED-ADDRESS field. +# For that 'external' IP, NAT must forward ports directly (relayed port 12345 +# must be always mapped to the same 'external' port 12345). +# +# In more complex case when more than one IP address is involved, +# that option must be used several times, each entry must +# have form "-X ", to map all involved addresses. +# RFC5780 NAT discovery STUN functionality will work correctly, +# if the addresses are mapped properly, even when the TURN server itself +# is behind A NAT. +# +# By default, this value is empty, and no address mapping is used. +# +#external-ip=60.70.80.91 +# +#OR: +# +#external-ip=60.70.80.91/172.17.19.101 +#external-ip=60.70.80.92/172.17.19.102 + + +# Number of the relay threads to handle the established connections +# (in addition to authentication thread and the listener thread). +# If explicitly set to 0 then application runs relay process in a +# single thread, in the same thread with the listener process +# (the authentication thread will still be a separate thread). +# +# If this parameter is not set, then the default OS-dependent +# thread pattern algorithm will be employed. Usually the default +# algorithm is the most optimal, so you have to change this option +# only if you want to make some fine tweaks. +# +# In the older systems (Linux kernel before 3.9), +# the number of UDP threads is always one thread per network listening +# endpoint - including the auxiliary endpoints - unless 0 (zero) or +# 1 (one) value is set. +# +#relay-threads=0 + +# Lower and upper bounds of the UDP relay endpoints: +# (default values are 49152 and 65535) +# +min-port=49152 +max-port=65535 + +# Uncomment to run TURN server in 'normal' 'moderate' verbose mode. +# By default the verbose mode is off. +verbose + +# Uncomment to run TURN server in 'extra' verbose mode. +# This mode is very annoying and produces lots of output. +# Not recommended under any normal circumstances. +# +#Verbose + +# Uncomment to use fingerprints in the TURN messages. +# By default the fingerprints are off. +# +fingerprint + +# Uncomment to use long-term credential mechanism. +# By default no credentials mechanism is used (any user allowed). +# +#lt-cred-mech + +# This option is opposite to lt-cred-mech. +# (TURN Server with no-auth option allows anonymous access). +# If neither option is defined, and no users are defined, +# then no-auth is default. If at least one user is defined, +# in this file or in command line or in usersdb file, then +# lt-cred-mech is default. +# +#no-auth + +# TURN REST API flag. +# (Time Limited Long Term Credential) +# Flag that sets a special authorization option that is based upon authentication secret. +# +# This feature's purpose is to support "TURN Server REST API", see +# "TURN REST API" link in the project's page +# https://github.com/coturn/coturn/ +# +# This option is used with timestamp: +# +# usercombo -> "timestamp:userid" +# turn user -> usercombo +# turn password -> base64(hmac(secret key, usercombo)) +# +# This allows TURN credentials to be accounted for a specific user id. +# If you don't have a suitable id, the timestamp alone can be used. +# This option is just turning on secret-based authentication. +# The actual value of the secret is defined either by option static-auth-secret, +# or can be found in the turn_secret table in the database (see below). +# +# Read more about it: +# - https://tools.ietf.org/html/draft-uberti-behave-turn-rest-00 +# - https://www.ietf.org/proceedings/87/slides/slides-87-behave-10.pdf +# +# Be aware that use-auth-secret overrides some part of lt-cred-mech. +# Notice that this feature depends internally on lt-cred-mech, so if you set +# use-auth-secret then it enables internally automatically lt-cred-mech option +# like if you enable both. +# +# You can use only one of the to auth mechanisms in the same time because, +# both mechanism use the username and password validation in different way. +# +# This way be aware that you can't use both auth mechnaism in the same time! +# Use in config either the lt-cred-mech or the use-auth-secret +# to avoid any confusion. +# +#use-auth-secret + +# 'Static' authentication secret value (a string) for TURN REST API only. +# If not set, then the turn server +# will try to use the 'dynamic' value in turn_secret table +# in user database (if present). The database-stored value can be changed on-the-fly +# by a separate program, so this is why that other mode is 'dynamic'. +# +#static-auth-secret=north + +# Server name used for +# the oAuth authentication purposes. +# The default value is the realm name. +# +#server-name=blackdow.carleon.gov + +# Flag that allows oAuth authentication. +# +#oauth + +# 'Static' user accounts for long term credentials mechanism, only. +# This option cannot be used with TURN REST API. +# 'Static' user accounts are NOT dynamically checked by the turnserver process, +# so that they can NOT be changed while the turnserver is running. +# +#user=username1:key1 +#user=username2:key2 +# OR: +#user=username1:password1 +#user=username2:password2 +# +# Keys must be generated by turnadmin utility. The key value depends +# on user name, realm, and password: +# +# Example: +# $ turnadmin -k -u ninefingers -r north.gov -p youhavetoberealistic +# Output: 0xbc807ee29df3c9ffa736523fb2c4e8ee +# ('0x' in the beginning of the key is what differentiates the key from +# password. If it has 0x then it is a key, otherwise it is a password). +# +# The corresponding user account entry in the config file will be: +# +#user=ninefingers:0xbc807ee29df3c9ffa736523fb2c4e8ee +# Or, equivalently, with open clear password (less secure): +#user=ninefingers:youhavetoberealistic +# + +# SQLite database file name. +# +# Default file name is /var/db/turndb or /usr/local/var/db/turndb or +# /var/lib/turn/turndb. +# +#userdb=/var/db/turndb + +# PostgreSQL database connection string in the case that we are using PostgreSQL +# as the user database. +# This database can be used for long-term credential mechanism +# and it can store the secret value for secret-based timed authentication in TURN RESP API. +# See http://www.postgresql.org/docs/8.4/static/libpq-connect.html for 8.x PostgreSQL +# versions connection string format, see +# http://www.postgresql.org/docs/9.2/static/libpq-connect.html#LIBPQ-CONNSTRING +# for 9.x and newer connection string formats. +# +#psql-userdb="host= dbname= user= password= connect_timeout=30" + +# MySQL database connection string in the case that we are using MySQL +# as the user database. +# This database can be used for long-term credential mechanism +# and it can store the secret value for secret-based timed authentication in TURN RESP API. +# +# Optional connection string parameters for the secure communications (SSL): +# ca, capath, cert, key, cipher +# (see http://dev.mysql.com/doc/refman/5.1/en/ssl-options.html for the +# command options description). +# +# Use string format as below (space separated parameters, all optional): +# +#mysql-userdb="host= dbname= user= password= port= connect_timeout= read_timeout=" + +# If you want to use in the MySQL connection string the password in encrypted format, +# then set in this option the MySQL password encryption secret key file. +# +# Warning: If this option is set, then mysql password must be set in "mysql-userdb" in encrypted format! +# If you want to use cleartext password then do not set this option! +# +# This is the file path which contain secret key of aes encryption while using password encryption. +# +#secret-key-file=/path/ + +# MongoDB database connection string in the case that we are using MongoDB +# as the user database. +# This database can be used for long-term credential mechanism +# and it can store the secret value for secret-based timed authentication in TURN RESP API. +# Use string format is described at http://hergert.me/docs/mongo-c-driver/mongoc_uri.html +# +#mongo-userdb="mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]" + +# Redis database connection string in the case that we are using Redis +# as the user database. +# This database can be used for long-term credential mechanism +# and it can store the secret value for secret-based timed authentication in TURN RESP API. +# Use string format as below (space separated parameters, all optional): +# +#redis-userdb="ip= dbname= password= port= connect_timeout=" + +# Redis status and statistics database connection string, if used (default - empty, no Redis stats DB used). +# This database keeps allocations status information, and it can be also used for publishing +# and delivering traffic and allocation event notifications. +# The connection string has the same parameters as redis-userdb connection string. +# Use string format as below (space separated parameters, all optional): +# +#redis-statsdb="ip= dbname= password= port= connect_timeout=" + +# The default realm to be used for the users when no explicit +# origin/realm relationship was found in the database, or if the TURN +# server is not using any database (just the commands-line settings +# and the userdb file). Must be used with long-term credentials +# mechanism or with TURN REST API. +# +# Note: If default realm is not specified at all, then realm falls back to the host domain name. +# If domain name is empty string, or '(None)', then it is initialized to am empty string. +# +#realm=mycompany.org + +# The flag that sets the origin consistency +# check: across the session, all requests must have the same +# main ORIGIN attribute value (if the ORIGIN was +# initially used by the session). +# +#check-origin-consistency + +# Per-user allocation quota. +# default value is 0 (no quota, unlimited number of sessions per user). +# This option can also be set through the database, for a particular realm. +# +#user-quota=0 + +# Total allocation quota. +# default value is 0 (no quota). +# This option can also be set through the database, for a particular realm. +# +#total-quota=0 + +# Max bytes-per-second bandwidth a TURN session is allowed to handle +# (input and output network streams are treated separately). Anything above +# that limit will be dropped or temporary suppressed (within +# the available buffer limits). +# This option can also be set through the database, for a particular realm. +# +#max-bps=0 + +# +# Maximum server capacity. +# Total bytes-per-second bandwidth the TURN server is allowed to allocate +# for the sessions, combined (input and output network streams are treated separately). +# +# bps-capacity=0 + +# Uncomment if no UDP client listener is desired. +# By default UDP client listener is always started. +# +#no-udp + +# Uncomment if no TCP client listener is desired. +# By default TCP client listener is always started. +# +#no-tcp + +# Uncomment if no TLS client listener is desired. +# By default TLS client listener is always started. +# +#no-tls + +# Uncomment if no DTLS client listener is desired. +# By default DTLS client listener is always started. +# +#no-dtls + +# Uncomment if no UDP relay endpoints are allowed. +# By default UDP relay endpoints are enabled (like in RFC 5766). +# +#no-udp-relay + +# Uncomment if no TCP relay endpoints are allowed. +# By default TCP relay endpoints are enabled (like in RFC 6062). +# +#no-tcp-relay + +# Uncomment if extra security is desired, +# with nonce value having limited lifetime. +# By default, the nonce value is unique for a session, +# and has unlimited lifetime. +# Set this option to limit the nonce lifetime. +# It defaults to 600 secs (10 min) if no value is provided. After that delay, +# the client will get 438 error and will have to re-authenticate itself. +# +#stale-nonce=600 + +# Uncomment if you want to set the maximum allocation +# time before it has to be refreshed. +# Default is 3600s. +# +#max-allocate-lifetime=3600 + + +# Uncomment to set the lifetime for the channel. +# Default value is 600 secs (10 minutes). +# This value MUST not be changed for production purposes. +# +#channel-lifetime=600 + +# Uncomment to set the permission lifetime. +# Default to 300 secs (5 minutes). +# In production this value MUST not be changed, +# however it can be useful for test purposes. +# +#permission-lifetime=300 + +# Certificate file. +# Use an absolute path or path relative to the +# configuration file. +# +#cert=/usr/local/etc/turn_server_cert.pem + +# Private key file. +# Use an absolute path or path relative to the +# configuration file. +# Use PEM file format. +# +#pkey=/usr/local/etc/turn_server_pkey.pem + +# Private key file password, if it is in encoded format. +# This option has no default value. +# +#pkey-pwd=... + +# Allowed OpenSSL cipher list for TLS/DTLS connections. +# Default value is "DEFAULT". +# +#cipher-list="DEFAULT" + +# CA file in OpenSSL format. +# Forces TURN server to verify the client SSL certificates. +# By default it is not set: there is no default value and the client +# certificate is not checked. +# +# Example: +#CA-file=/etc/ssh/id_rsa.cert + +# Curve name for EC ciphers, if supported by OpenSSL +# library (TLS and DTLS). The default value is prime256v1, +# if pre-OpenSSL 1.0.2 is used. With OpenSSL 1.0.2+, +# an optimal curve will be automatically calculated, if not defined +# by this option. +# +#ec-curve-name=prime256v1 + +# Use 566 bits predefined DH TLS key. Default size of the key is 1066. +# +#dh566 + +# Use 2066 bits predefined DH TLS key. Default size of the key is 1066. +# +#dh2066 + +# Use custom DH TLS key, stored in PEM format in the file. +# Flags --dh566 and --dh2066 are ignored when the DH key is taken from a file. +# +#dh-file= + +# Flag to prevent stdout log messages. +# By default, all log messages are going to both stdout and to +# the configured log file. With this option everything will be +# going to the configured log only (unless the log file itself is stdout). +# +#no-stdout-log + +# Option to set the log file name. +# By default, the turnserver tries to open a log file in +# /var/log, /var/tmp, /tmp and current directories directories +# (which open operation succeeds first that file will be used). +# With this option you can set the definite log file name. +# The special names are "stdout" and "-" - they will force everything +# to the stdout. Also, the "syslog" name will force everything to +# the system log (syslog). +# In the runtime, the logfile can be reset with the SIGHUP signal +# to the turnserver process. +# +#log-file=/var/tmp/turn.log + +# Option to redirect all log output into system log (syslog). +# +syslog + +# This flag means that no log file rollover will be used, and the log file +# name will be constructed as-is, without PID and date appendage. +# This option can be used, for example, together with the logrotate tool. +# +#simple-log + +# Option to set the "redirection" mode. The value of this option +# will be the address of the alternate server for UDP & TCP service in form of +# [:]. The server will send this value in the attribute +# ALTERNATE-SERVER, with error 300, on ALLOCATE request, to the client. +# Client will receive only values with the same address family +# as the client network endpoint address family. +# See RFC 5389 and RFC 5766 for ALTERNATE-SERVER functionality description. +# The client must use the obtained value for subsequent TURN communications. +# If more than one --alternate-server options are provided, then the functionality +# can be more accurately described as "load-balancing" than a mere "redirection". +# If the port number is omitted, then the default port +# number 3478 for the UDP/TCP protocols will be used. +# Colon (:) characters in IPv6 addresses may conflict with the syntax of +# the option. To alleviate this conflict, literal IPv6 addresses are enclosed +# in square brackets in such resource identifiers, for example: +# [2001:db8:85a3:8d3:1319:8a2e:370:7348]:3478 . +# Multiple alternate servers can be set. They will be used in the +# round-robin manner. All servers in the pool are considered of equal weight and +# the load will be distributed equally. For example, if we have 4 alternate servers, +# then each server will receive 25% of ALLOCATE requests. A alternate TURN server +# address can be used more than one time with the alternate-server option, so this +# can emulate "weighting" of the servers. +# +# Examples: +#alternate-server=1.2.3.4:5678 +#alternate-server=11.22.33.44:56789 +#alternate-server=5.6.7.8 +#alternate-server=[2001:db8:85a3:8d3:1319:8a2e:370:7348]:3478 + +# Option to set alternative server for TLS & DTLS services in form of +# :. If the port number is omitted, then the default port +# number 5349 for the TLS/DTLS protocols will be used. See the previous +# option for the functionality description. +# +# Examples: +#tls-alternate-server=1.2.3.4:5678 +#tls-alternate-server=11.22.33.44:56789 +#tls-alternate-server=[2001:db8:85a3:8d3:1319:8a2e:370:7348]:3478 + +# Option to suppress TURN functionality, only STUN requests will be processed. +# Run as STUN server only, all TURN requests will be ignored. +# By default, this option is NOT set. +# +#stun-only + +# Option to suppress STUN functionality, only TURN requests will be processed. +# Run as TURN server only, all STUN requests will be ignored. +# By default, this option is NOT set. +# +#no-stun + +# This is the timestamp/username separator symbol (character) in TURN REST API. +# The default value is ':'. +# rest-api-separator=: + +# Flag that can be used to disallow peers on the loopback addresses (127.x.x.x and ::1). +# This is an extra security measure. +# +no-loopback-peers + +# Flag that can be used to disallow peers on well-known broadcast addresses (224.0.0.0 and above, and FFXX:*). +# This is an extra security measure. +# +#no-multicast-peers + +# Option to set the max time, in seconds, allowed for full allocation establishment. +# Default is 60 seconds. +# +#max-allocate-timeout=60 + +# Option to allow or ban specific ip addresses or ranges of ip addresses. +# If an ip address is specified as both allowed and denied, then the ip address is +# considered to be allowed. This is useful when you wish to ban a range of ip +# addresses, except for a few specific ips within that range. +# +# This can be used when you do not want users of the turn server to be able to access +# machines reachable by the turn server, but would otherwise be unreachable from the +# internet (e.g. when the turn server is sitting behind a NAT) +# +# Examples: +# denied-peer-ip=83.166.64.0-83.166.95.255 +# allowed-peer-ip=83.166.68.45 + +# File name to store the pid of the process. +# Default is /var/run/turnserver.pid (if superuser account is used) or +# /var/tmp/turnserver.pid . +# +#pidfile="/var/run/turnserver.pid" + +# Require authentication of the STUN Binding request. +# By default, the clients are allowed anonymous access to the STUN Binding functionality. +# +#secure-stun + +# Mobility with ICE (MICE) specs support. +# +#mobility + +# Allocate Address Family according +# If enabled then TURN server allocates address family according the TURN +# Client <=> Server communication address family. +# (By default coTURN works according RFC 6156.) +# !!Warning: Enabling this option breaks RFC6156 section-4.2 (violates use default IPv4)!! +# +#keep-address-family + + +# User name to run the process. After the initialization, the turnserver process +# will make an attempt to change the current user ID to that user. +# +#proc-user= + +# Group name to run the process. After the initialization, the turnserver process +# will make an attempt to change the current group ID to that group. +# +#proc-group= + +# Turn OFF the CLI support. +# By default it is always ON. +# See also options cli-ip and cli-port. +# +#no-cli + +#Local system IP address to be used for CLI server endpoint. Default value +# is 127.0.0.1. +# +cli-ip=127.0.0.1 + +# CLI server port. Default is 5766. +# +cli-port=5766 + +# CLI access password. Default is empty (no password). +# For the security reasons, it is recommended to use the encrypted +# for of the password (see the -P command in the turnadmin utility). +# +# Secure form for password 'qwerty': +# +#cli-password=$5$79a316b350311570$81df9cfb9af7f5e5a76eada31e7097b663a0670f99a3c07ded3f1c8e59c5658a +# +# Or unsecure form for the same password: +# +#cli-password=qwerty + +# Server relay. NON-STANDARD AND DANGEROUS OPTION. +# Only for those applications when we want to run +# server applications on the relay endpoints. +# This option eliminates the IP permissions check on +# the packets incoming to the relay endpoints. +# +#server-relay + +# Maximum number of output sessions in ps CLI command. +# This value can be changed on-the-fly in CLI. The default value is 256. +# +#cli-max-output-sessions + +# Set network engine type for the process (for internal purposes). +# +#ne=[1|2|3] + +# Do not allow an TLS/DTLS version of protocol +# +#no-tlsv1 +#no-tlsv1_1 +#no-tlsv1_2 From e49f8fa3ae417c6da2dc8011bae960fc14da1840 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=89SZ=C3=81ROS=20Mih=C3=A1ly?= Date: Tue, 23 Oct 2018 07:44:03 +0200 Subject: [PATCH 04/20] split dockerfiles based on db --- docker/README.docker | 19 +++++ docker/{ => coturn}/Dockerfile | 10 ++- docker/coturn/cert.pem | 35 +++++++++ docker/coturn/coturn.env | 1 + docker/coturn/privkey.pem | 28 +++++++ docker/{ => coturn}/turnserver.conf | 23 +++++- docker/cp-schema.sh | 3 + docker/docker-compose-all.yml | 108 +++++++++++++++++++++++++++ docker/docker-compose-mongodb.yml | 63 ++++++++++++++++ docker/docker-compose-mysql.yml | 64 ++++++++++++++++ docker/docker-compose-postgresql.yml | 64 ++++++++++++++++ docker/docker-compose-redis.yml | 64 ++++++++++++++++ docker/docker-compose.yml | 77 ------------------- docker/mongodb/mongodb.env | 3 + docker/mysql/Dockerfile | 6 ++ docker/mysql/init-coturn-db.sql | 1 + docker/mysql/mysql.env | 6 ++ docker/mysql/schema.sql | 55 ++++++++++++++ docker/postgresql/Dockerfile | 4 + docker/postgresql/postgresql.env | 3 + docker/postgresql/schema.sql | 55 ++++++++++++++ docker/redis/Dockerfile | 6 ++ docker/redis/redis.conf | 3 + docker/redis/redis.env | 0 24 files changed, 617 insertions(+), 84 deletions(-) create mode 100644 docker/README.docker rename docker/{ => coturn}/Dockerfile (87%) create mode 100644 docker/coturn/cert.pem create mode 100644 docker/coturn/coturn.env create mode 100644 docker/coturn/privkey.pem rename docker/{ => coturn}/turnserver.conf (97%) create mode 100755 docker/cp-schema.sh create mode 100644 docker/docker-compose-all.yml create mode 100644 docker/docker-compose-mongodb.yml create mode 100644 docker/docker-compose-mysql.yml create mode 100644 docker/docker-compose-postgresql.yml create mode 100644 docker/docker-compose-redis.yml delete mode 100644 docker/docker-compose.yml create mode 100644 docker/mongodb/mongodb.env create mode 100644 docker/mysql/Dockerfile create mode 100644 docker/mysql/init-coturn-db.sql create mode 100644 docker/mysql/mysql.env create mode 100644 docker/mysql/schema.sql create mode 100644 docker/postgresql/Dockerfile create mode 100644 docker/postgresql/postgresql.env create mode 100644 docker/postgresql/schema.sql create mode 100644 docker/redis/Dockerfile create mode 100644 docker/redis/redis.conf create mode 100644 docker/redis/redis.env diff --git a/docker/README.docker b/docker/README.docker new file mode 100644 index 00000000..0f7cbfe8 --- /dev/null +++ b/docker/README.docker @@ -0,0 +1,19 @@ +Before you begin + * copy db schema run ./cp_schema.sh + * edit turnserver/turnserver.cfg according your db selection (mysql or postgresql or redis or mongodb) + +# start + + docker-compose -f docker-compose-all.yml up --build --detach + +# restart +Notice: May restart needed for coturn container, if it could not access database yet, due initialization delay. + docker restart docker_coturn_1 + +# stop + docker-compose -f docker-compose-all.yml down + + +# Or Stop with volume removal + docker-compose down --volumes + diff --git a/docker/Dockerfile b/docker/coturn/Dockerfile similarity index 87% rename from docker/Dockerfile rename to docker/coturn/Dockerfile index 08f7a107..6f61870e 100644 --- a/docker/Dockerfile +++ b/docker/coturn/Dockerfile @@ -19,7 +19,7 @@ RUN make ### 2. stage: create production image -FROM debian:stable-slim AS coturn +FROM debian:stable AS coturn ENV INSTALL_PREFIX /usr/local ENV BUILD_PREFIX /usr/local/src @@ -28,12 +28,14 @@ ENV TURNSERVER_USER turnserver COPY --from=coturn-build ${BUILD_PREFIX}/coturn/bin/ ${INSTALL_PREFIX}/bin/ COPY --from=coturn-build ${BUILD_PREFIX}/coturn/man/ ${INSTALL_PREFIX}/man/ -COPY turnserver.conf ${INSTALL_PREFIX}/etc +#COPY turnserver.conf ${INSTALL_PREFIX}/etc COPY --from=coturn-build ${BUILD_PREFIX}/coturn/sqlite/turndb ${INSTALL_PREFIX}/var/db/turndb +COPY --from=coturn-build ${BUILD_PREFIX}/coturn/turndb ${INSTALL_PREFIX}/turndb # Install build dependencies RUN export DEBIAN_FRONTEND=noninteractive && \ apt-get update && \ apt-get install -y libc6>=2.15 libevent-core-2.0-5>=2.0.10-stable libevent-extra-2.0-5>=2.0.10-stable libevent-openssl-2.0-5>=2.0.10-stable libevent-pthreads-2.0-5>=2.0.10-stable libhiredis0.13>=0.13.1 libmariadbclient18>=5.5.36 libpq5>=8.4~ libsqlite3-0>=3.6.0 libssl1.1>=1.1.0 libmongoc-1.0 libbson-1.0 +RUN apt-get install -y mysql-client postgresql-client redis-tools mongodb-clients RUN if ! getent group "$TURNSERVER_GROUP" >/dev/null; then \ addgroup --system "$TURNSERVER_GROUP" || exit 1 ;\ @@ -61,8 +63,8 @@ EXPOSE 5766 # Relay Ports EXPOSE 49152-65535 49152-65535/udp +#COPY ./docker-entrypoint.sh / +#ENTRYPOINT ["/docker-entrypoint.sh"] WORKDIR ${INSTALL_PREFIX} - CMD ${INSTALL_PREFIX}/bin/turnserver - diff --git a/docker/coturn/cert.pem b/docker/coturn/cert.pem new file mode 100644 index 00000000..00346262 --- /dev/null +++ b/docker/coturn/cert.pem @@ -0,0 +1,35 @@ +-----BEGIN CERTIFICATE----- +MIIGFzCCBP+gAwIBAgISA6lUbjohIPynulrqRhhtei8uMA0GCSqGSIb3DQEBCwUA +MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD +ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMzAeFw0xODA5MDkwOTM3NTJaFw0x +ODEyMDgwOTM3NTJaMCExHzAdBgNVBAMTFmRvY2tlci5sYWIudnZjLm5paWYuaHUw +ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDR2NpBf8lYR9x1Aq1AltIr +huhuWPqtzRSTxNPlHAD5qfx86IWex59jx+aNAfYZSUg9Zex13XNgJAO37fSxQ5LY +zEXDgGusIbaZ3rSW+62Smpw2p4nrDVetf39A83jXMTU/yWLT43ab6tgfpnggpHzO +YLnaG46DVjTXEJTd38sRZoGZdHUcMqV7A5463vsoukBrmO9wpPUz6U/uTw7tD0eQ +f5dJViqY88120hXIxqD9vxJpn7aOK2H9sa9OJ3XVRwyCpnB980CMM4kCqMh0j3EA +z6T0UblDpEiZjcMVKyjKAlDntbQXmy0bvABdU1LI98QXqEGzGYBA+wxVs6hcf4+n +AgMBAAGjggMeMIIDGjAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUH +AwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFKrVAeFyV+crd1H1 +SOlUXtyYCALQMB8GA1UdIwQYMBaAFKhKamMEfd265tE5t6ZFZe/zqOyhMG8GCCsG +AQUFBwEBBGMwYTAuBggrBgEFBQcwAYYiaHR0cDovL29jc3AuaW50LXgzLmxldHNl +bmNyeXB0Lm9yZzAvBggrBgEFBQcwAoYjaHR0cDovL2NlcnQuaW50LXgzLmxldHNl +bmNyeXB0Lm9yZy8wIQYDVR0RBBowGIIWZG9ja2VyLmxhYi52dmMubmlpZi5odTCB +/gYDVR0gBIH2MIHzMAgGBmeBDAECATCB5gYLKwYBBAGC3xMBAQEwgdYwJgYIKwYB +BQUHAgEWGmh0dHA6Ly9jcHMubGV0c2VuY3J5cHQub3JnMIGrBggrBgEFBQcCAjCB +ngyBm1RoaXMgQ2VydGlmaWNhdGUgbWF5IG9ubHkgYmUgcmVsaWVkIHVwb24gYnkg +UmVseWluZyBQYXJ0aWVzIGFuZCBvbmx5IGluIGFjY29yZGFuY2Ugd2l0aCB0aGUg +Q2VydGlmaWNhdGUgUG9saWN5IGZvdW5kIGF0IGh0dHBzOi8vbGV0c2VuY3J5cHQu +b3JnL3JlcG9zaXRvcnkvMIIBBAYKKwYBBAHWeQIEAgSB9QSB8gDwAHYAKTxRllTI +OWW6qlD8WAfUt2+/WHopctykwwz05UVH9HgAAAFlvejBzwAABAMARzBFAiEAwGHT +AIxt5AEprWh2r7eyK/GZKZZheimdNtCca6q4LMACICxxpzVgjAkikFARMwUxvGfs +73T5lSzAsRLa9w88bGSFAHYAwRZK4Kdy0tQ5LcgKwQdw1PDEm96ZGkhAwfoHUWT2 +M2AAAAFlvejDqgAABAMARzBFAiEAisNayIaZAimDAhbhpTuMhOY6ZCtqQqHHrTId +HRTJD8cCIFhfNrFMemmfT9kAWZ2phtRqtVjAHYVEq5HbbcLnQ3YwMA0GCSqGSIb3 +DQEBCwUAA4IBAQAHhIpkn23C53LMI+ns5QDFDtGLxJWycZt83WowFXfFuT87K+LW +n0kUMl3GLlEbP8hi7LAH21p9WNSfFFwQmdqiO/eRm8quDjfOMmDu7njVASzTSeke +uiuSgqGq2BRiFI5juHo1UqqzQItcv4BvMS8l7bAQRgek2bhmUlb68Ebr3awFEdSQ +McjzYKZT0mIQgVTWik7PyMJTnzFYu5KHiU6n8B/UZqZP3hAJnHt6pG0brjaKUcaD +aPQYYxE363Vo0L7aC0Gkmi8FnS9f2c0nkxI4aMqbFlxiIztydHvk5R1gO7bOakP/ +Im62n/0uRF4BrgWqxYEuAYnzCYsqg1oByl8V +-----END CERTIFICATE----- diff --git a/docker/coturn/coturn.env b/docker/coturn/coturn.env new file mode 100644 index 00000000..d9457330 --- /dev/null +++ b/docker/coturn/coturn.env @@ -0,0 +1 @@ +# for future usage diff --git a/docker/coturn/privkey.pem b/docker/coturn/privkey.pem new file mode 100644 index 00000000..f845d0c8 --- /dev/null +++ b/docker/coturn/privkey.pem @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDR2NpBf8lYR9x1 +Aq1AltIrhuhuWPqtzRSTxNPlHAD5qfx86IWex59jx+aNAfYZSUg9Zex13XNgJAO3 +7fSxQ5LYzEXDgGusIbaZ3rSW+62Smpw2p4nrDVetf39A83jXMTU/yWLT43ab6tgf +pnggpHzOYLnaG46DVjTXEJTd38sRZoGZdHUcMqV7A5463vsoukBrmO9wpPUz6U/u +Tw7tD0eQf5dJViqY88120hXIxqD9vxJpn7aOK2H9sa9OJ3XVRwyCpnB980CMM4kC +qMh0j3EAz6T0UblDpEiZjcMVKyjKAlDntbQXmy0bvABdU1LI98QXqEGzGYBA+wxV +s6hcf4+nAgMBAAECggEBAJ6vpMR5NLIcjXqyjn9UThR6TVP813wMpG3mHvKXTal+ +wR9X2ouqmz6iURb6j7apcwZzB/BNiUz/jwxM1ogh+G8Xcf4YI9QkHmiXP+sY4TYG +0vCFm0bzbQUXcAyW0R+x53mX+bMPxIa9fbfZc+gDWxnZjVGBGzD4RLcJo/lwnahG +gt02EROW4bbHu+7EgWTnwH0WNO8ivtFs5qq6twOcCiA/ri5op2Qy1iLAWY6g2pf5 +exvJNeqUP2QNOgWJJpUADD/B+fUDrsYtLA9hba63IkRnTgeSCsOfB2Rmqkehg9SB +bIZjqFDBCZuDhrdi4xyO+54TcKMAb04rNtu4g9vzXFkCgYEA/hs5CE/SEfh/FLaN ++mi/rAtgkVhEQzNOdV0KurPUf3fC8P86G0ylJcJ/qsNCZVxRU6R4lvk6ZE6OZY+o +hbzgj1M9yd/jY1d9Qcua9v8EoZxyp7sgWMf++/DxrpPvcgQTlNNRV5rX/aDz8uL4 +GnZrkyLA+/0WFn/zAV7OjCw2FXsCgYEA02kxcuU+ldNkgHl7YrEl0tlWscfbzm10 +fRqMzuyyRyRgPEgKAIKExI0OVuwmyWvCFTbi8IOpZs/jtG3+r83RFY9VA0r0g3ch +jilCaI+2P1ZYm0UAQCyVLCjtVLIZu4Z/h8TctHHDXUjy18xDdLNMTs7hIcbuH85Q +hpzfcMRgmMUCgYEAmw6Ti73hazPeoA4RrwbyRxKeN7LL3NHXA4jl/i2z8qBq5VJo +67WmZNc9vj7uKhneSpLnPwEQH5tMCy9RX2J1CSB7aM9k2v7NITQT+Lp+4fssf6uR +Pnuz3ZsWbzg4ebOBG2Sjkziaqlrn4YOcb9FpLVyctGeobcxfxatLkH999TcCgYBx +PhrHwbZJiSd/jhMipWNuUw8WQckjBQxt6ufb+3vvkbOe9rOs3D0ED87LjsmkAP3A +YVsknFIEiX0ebAEN6MCDvPg7wE3Dke++d6lj2v8zZCwoV8ivl3H8apveT1xrT7tG +XZQfcATHFklGgNrtSxGn8Tc04ZsyHFCUGrmxbO+VRQKBgE7CUNEDLRD1D34v/rYd +e2yAeuQQiiKW1pNACBv6Y+Bc/tftunBh3ekTz5Z4XwRE1RZjdCjmEiT47IWh5mlu +cylZTVCkk0RbbRDTA37uw5ggMuNrTy7p9ktC4V1RbfO/yFfu0+R5T4X/n+6UFxu0 +PQrYxRItI7dWCOyRl1nwUogT +-----END PRIVATE KEY----- diff --git a/docker/turnserver.conf b/docker/coturn/turnserver.conf similarity index 97% rename from docker/turnserver.conf rename to docker/coturn/turnserver.conf index 45b65141..ee982bc1 100644 --- a/docker/turnserver.conf +++ b/docker/coturn/turnserver.conf @@ -38,12 +38,12 @@ tls-listening-port=5349 # RFC 5780 is supported only by UDP protocol, other protocols # are listening to that endpoint only for "symmetry". # -alt-listening-port=0 +#alt-listening-port=0 # Alternative listening port for TLS and DTLS protocols. # Default (or zero) value means "TLS listening port plus one". # -alt-tls-listening-port=0 +#alt-tls-listening-port=0 # Listener IP address of relay server. Multiple listeners can be specified. # If no IP(s) specified in the config file or in the command line options, @@ -123,6 +123,8 @@ alt-tls-listening-port=0 # #external-ip=60.70.80.91/172.17.19.101 #external-ip=60.70.80.92/172.17.19.102 +#external-ip=60.70.80.92/172.17.19.102 +external-ip=193.224.22.37 # Number of the relay threads to handle the established connections @@ -167,7 +169,7 @@ fingerprint # Uncomment to use long-term credential mechanism. # By default no credentials mechanism is used (any user allowed). # -#lt-cred-mech +lt-cred-mech # This option is opposite to lt-cred-mech. # (TURN Server with no-auth option allows anonymous access). @@ -279,6 +281,8 @@ fingerprint # #psql-userdb="host= dbname= user= password= connect_timeout=30" +#psql-userdb="host=postgresql dbname=coturn user=coturn password=CHANGE_ME connect_timeout=30" + # MySQL database connection string in the case that we are using MySQL # as the user database. # This database can be used for long-term credential mechanism @@ -293,6 +297,8 @@ fingerprint # #mysql-userdb="host= dbname= user= password= port= connect_timeout= read_timeout=" +mysql-userdb="host=mysql dbname=coturn user=coturn password=CHANGE_ME port=3306 connect_timeout=10 read_timeout=10" + # If you want to use in the MySQL connection string the password in encrypted format, # then set in this option the MySQL password encryption secret key file. # @@ -311,6 +317,9 @@ fingerprint # #mongo-userdb="mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]" +#mongo-userdb="mongodb://coturn:CHANGE_ME@mongodb/coturn" +#mongo-userdb="mongodb://mongodb/coturn" + # Redis database connection string in the case that we are using Redis # as the user database. # This database can be used for long-term credential mechanism @@ -319,6 +328,8 @@ fingerprint # #redis-userdb="ip= dbname= password= port= connect_timeout=" +#redis-userdb="ip=redis dbname=2 password=CHANGE_ME connect_timeout=30" + # Redis status and statistics database connection string, if used (default - empty, no Redis stats DB used). # This database keeps allocations status information, and it can be also used for publishing # and delivering traffic and allocation event notifications. @@ -327,6 +338,8 @@ fingerprint # #redis-statsdb="ip= dbname= password= port= connect_timeout=" +#redis-statsdb="ip=redis dbname=2 password=CHANGE_ME connect_timeout=30" + # The default realm to be used for the users when no explicit # origin/realm relationship was found in the database, or if the TURN # server is not using any database (just the commands-line settings @@ -337,6 +350,7 @@ fingerprint # If domain name is empty string, or '(None)', then it is initialized to am empty string. # #realm=mycompany.org +realm=example.org # The flag that sets the origin consistency # check: across the session, all requests must have the same @@ -437,6 +451,7 @@ fingerprint # configuration file. # #cert=/usr/local/etc/turn_server_cert.pem +cert=/etc/ssl/certs/cert.pem # Private key file. # Use an absolute path or path relative to the @@ -444,6 +459,7 @@ fingerprint # Use PEM file format. # #pkey=/usr/local/etc/turn_server_pkey.pem +pkey=/etc/ssl/private/privkey.pem # Private key file password, if it is in encoded format. # This option has no default value. @@ -657,6 +673,7 @@ cli-port=5766 # Or unsecure form for the same password: # #cli-password=qwerty +cli-password=CHANGE_ME # Server relay. NON-STANDARD AND DANGEROUS OPTION. # Only for those applications when we want to run diff --git a/docker/cp-schema.sh b/docker/cp-schema.sh new file mode 100755 index 00000000..7b5411e8 --- /dev/null +++ b/docker/cp-schema.sh @@ -0,0 +1,3 @@ +#!/bin/bash +cp ../turndb/schema.sql mysql/ +cp ../turndb/schema.sql postgresql/ diff --git a/docker/docker-compose-all.yml b/docker/docker-compose-all.yml new file mode 100644 index 00000000..d3e06be8 --- /dev/null +++ b/docker/docker-compose-all.yml @@ -0,0 +1,108 @@ +version: "3" +services: + +# MySQL mariadb + mysql: + build: + context: ./mysql + restart: unless-stopped + volumes: + - mysql-data:/var/lib/mysql/data + env_file: + - mysql/mysql.env + networks: + - backend + +# PostgreSQL + postgresql: + build: + context: ./postgresql + restart: unless-stopped + volumes: + - postgresql-data:/var/lib/postgresql/data + env_file: + - postgresql/postgresql.env + networks: + - backend + +# Redis + redis: + build: + context: ./redis + restart: unless-stopped + volumes: + - redis-data:/data + env_file: + - redis/redis.env + networks: + - backend + +# MongoDB + mongodb: + image: mongo + restart: unless-stopped + volumes: + - mongodb-data:/data/db + env_file: + - mongodb/mongodb.env + networks: + - backend + + +# coTURN + coturn: + build: + context: ./coturn + restart: always + volumes: + - ${PWD}/coturn/turnserver.conf:/etc/turnserver.conf + - ${PWD}/coturn/privkey.pem:/etc/ssl/private/privkey.pem + - ${PWD}/coturn/cert.pem:/etc/ssl/certs/cert.pem + ports: +## STUN/TURN + - "3478:3478" + - "3478:3478/udp" + - "3479:3479" + - "3479:3479/udp" + - "80:80" + - "80:80/udp" +## STUN/TURN SSL + - "5349:5349" + - "5349:5349/udp" + - "5350:5350" + - "5350:5350/udp" + - "443:443" + - "443:443/udp" +# Relay Ports +# - "49152-65535:49152-65535" +# - "49152-65535:49152-65535/udp" + networks: + - frontend + - backend + depends_on: + - mysql + - postgresql + - redis + - mongodb + env_file: + - coturn/coturn.env +# DB + - mysql/mysql.env + - postgresql/postgresql.env + - redis/redis.env + - mongodb/mongodb.env +volumes: + mysql-data: + postgresql-data: + redis-data: + mongodb-data: + +networks: + frontend: + driver: bridge + ipam: + driver: default + config: + - subnet: 172.16.238.0/24 + backend: + internal: true diff --git a/docker/docker-compose-mongodb.yml b/docker/docker-compose-mongodb.yml new file mode 100644 index 00000000..c4c675ff --- /dev/null +++ b/docker/docker-compose-mongodb.yml @@ -0,0 +1,63 @@ +version: "3" +services: + +# MongoDB + mongodb: + image: mongo + restart: unless-stopped + volumes: + - mongodb-data:/data/db + env_file: + - mongodb/mongodb.env + networks: + - backend + + +# coTURN + coturn: + build: + context: ./coturn + restart: always + volumes: + - ${PWD}/coturn/turnserver.conf:/etc/turnserver.conf + - ${PWD}/coturn/privkey.pem:/etc/ssl/private/privkey.pem + - ${PWD}/coturn/cert.pem:/etc/ssl/certs/cert.pem + ports: +## STUN/TURN + - "3478:3478" + - "3478:3478/udp" + - "3479:3479" + - "3479:3479/udp" + - "80:80" + - "80:80/udp" +## STUN/TURN SSL + - "5349:5349" + - "5349:5349/udp" + - "5350:5350" + - "5350:5350/udp" + - "443:443" + - "443:443/udp" +# Relay Ports +# - "49152-65535:49152-65535" +# - "49152-65535:49152-65535/udp" + networks: + - frontend + - backend + depends_on: + - mongodb + env_file: + - coturn/coturn.env +# DB + - mongodb/mongodb.env +volumes: + mongodb-data: + +networks: + frontend: + driver: bridge + ipam: + driver: default + config: + - subnet: 172.16.238.0/24 + backend: + internal: true diff --git a/docker/docker-compose-mysql.yml b/docker/docker-compose-mysql.yml new file mode 100644 index 00000000..2a682668 --- /dev/null +++ b/docker/docker-compose-mysql.yml @@ -0,0 +1,64 @@ +version: "3" +services: + +# MySQL mariadb + mysql: + build: + context: ./mysql + restart: unless-stopped + volumes: + - mysql-data:/var/lib/mysql/data + env_file: + - mysql/mysql.env + networks: + - backend + + +# coTURN + coturn: + build: + context: ./coturn + restart: always + volumes: + - ${PWD}/coturn/turnserver.conf:/etc/turnserver.conf + - ${PWD}/coturn/privkey.pem:/etc/ssl/private/privkey.pem + - ${PWD}/coturn/cert.pem:/etc/ssl/certs/cert.pem + ports: +## STUN/TURN + - "3478:3478" + - "3478:3478/udp" + - "3479:3479" + - "3479:3479/udp" + - "80:80" + - "80:80/udp" +## STUN/TURN SSL + - "5349:5349" + - "5349:5349/udp" + - "5350:5350" + - "5350:5350/udp" + - "443:443" + - "443:443/udp" +# Relay Ports +# - "49152-65535:49152-65535" +# - "49152-65535:49152-65535/udp" + networks: + - frontend + - backend + depends_on: + - mysql + env_file: + - coturn/coturn.env +# DB + - mysql/mysql.env +volumes: + mysql-data: + +networks: + frontend: + driver: bridge + ipam: + driver: default + config: + - subnet: 172.16.238.0/24 + backend: + internal: true diff --git a/docker/docker-compose-postgresql.yml b/docker/docker-compose-postgresql.yml new file mode 100644 index 00000000..514a00e3 --- /dev/null +++ b/docker/docker-compose-postgresql.yml @@ -0,0 +1,64 @@ +version: "3" +services: + +# PostgreSQL + postgresql: + build: + context: ./postgresql + restart: unless-stopped + volumes: + - postgresql-data:/var/lib/postgresql/data + env_file: + - postgresql/postgresql.env + networks: + - backend + + +# coTURN + coturn: + build: + context: ./coturn + restart: always + volumes: + - ${PWD}/coturn/turnserver.conf:/etc/turnserver.conf + - ${PWD}/coturn/privkey.pem:/etc/ssl/private/privkey.pem + - ${PWD}/coturn/cert.pem:/etc/ssl/certs/cert.pem + ports: +## STUN/TURN + - "3478:3478" + - "3478:3478/udp" + - "3479:3479" + - "3479:3479/udp" + - "80:80" + - "80:80/udp" +## STUN/TURN SSL + - "5349:5349" + - "5349:5349/udp" + - "5350:5350" + - "5350:5350/udp" + - "443:443" + - "443:443/udp" +# Relay Ports +# - "49152-65535:49152-65535" +# - "49152-65535:49152-65535/udp" + networks: + - frontend + - backend + depends_on: + - postgresql + env_file: + - coturn/coturn.env +# DB + - postgresql/postgresql.env +volumes: + postgresql-data: + +networks: + frontend: + driver: bridge + ipam: + driver: default + config: + - subnet: 172.16.238.0/24 + backend: + internal: true diff --git a/docker/docker-compose-redis.yml b/docker/docker-compose-redis.yml new file mode 100644 index 00000000..4ae6f07a --- /dev/null +++ b/docker/docker-compose-redis.yml @@ -0,0 +1,64 @@ +version: "3" +services: + +# Redis + redis: + build: + context: ./redis + restart: unless-stopped + volumes: + - redis-data:/data + env_file: + - redis/redis.env + networks: + - backend + + +# coTURN + coturn: + build: + context: ./coturn + restart: always + volumes: + - ${PWD}/coturn/turnserver.conf:/etc/turnserver.conf + - ${PWD}/coturn/privkey.pem:/etc/ssl/private/privkey.pem + - ${PWD}/coturn/cert.pem:/etc/ssl/certs/cert.pem + ports: +## STUN/TURN + - "3478:3478" + - "3478:3478/udp" + - "3479:3479" + - "3479:3479/udp" + - "80:80" + - "80:80/udp" +## STUN/TURN SSL + - "5349:5349" + - "5349:5349/udp" + - "5350:5350" + - "5350:5350/udp" + - "443:443" + - "443:443/udp" +# Relay Ports +# - "49152-65535:49152-65535" +# - "49152-65535:49152-65535/udp" + networks: + - frontend + - backend + depends_on: + - redis + env_file: + - coturn/coturn.env +# DB + - redis/redis.env +volumes: + redis-data: + +networks: + frontend: + driver: bridge + ipam: + driver: default + config: + - subnet: 172.16.238.0/24 + backend: + internal: true diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml deleted file mode 100644 index 74784a3a..00000000 --- a/docker/docker-compose.yml +++ /dev/null @@ -1,77 +0,0 @@ -version: "3" -services: - -# MySQL mariadb - mariadb: - image: mariadb - restart: unless-stopped - env_file: env/mysql.env - networks: - - backend - -# PostgreSQL - postgresql: - image: postgresql - restart: unless-stopped - env_file: env/postgresql.env - networks: - - backend - -# Redis - redis: - image: redis - restart: unless-stopped - env_file: env/redis.env - networks: - - backend - -# MongoDB - mongodb: - image: mongodb - restart: unless-stopped - env_file: env/mongodb.env - networks: - - backend - - -# coTURN - coturn: - image: coturn - restart: unless-stopped - ports: -## STUN/TURN - - "3478" - - "3478/udp" - - "3479" - - "3479/udp" - - "80" - - "80/udp" -## STUN/TURN SSL - - "5349" - - "5349/udp" - - "5350" - - "5350/udp" - - "443" - - "443/udp" -# Relay Ports - - "49152-65535" - - "49152-65535/udp" - networks: - - frontend - - backend - depends_on: - - mysql - - postgresql - - redis - - mongodb - env_file: - - env/coturn.env -# DB - - env/mysql.env - - env/postresql.env - - env/redis.env - - env/mongodb.env - -networks: - frontend: - backend: diff --git a/docker/mongodb/mongodb.env b/docker/mongodb/mongodb.env new file mode 100644 index 00000000..1daa6579 --- /dev/null +++ b/docker/mongodb/mongodb.env @@ -0,0 +1,3 @@ +#MONGO_INITDB_ROOT_USERNAME=coturn +#MONGO_INITDB_ROOT_PASSWORD=CHANGE_ME +#MONGO_INITDB_DATABASE=coturn diff --git a/docker/mysql/Dockerfile b/docker/mysql/Dockerfile new file mode 100644 index 00000000..962f769f --- /dev/null +++ b/docker/mysql/Dockerfile @@ -0,0 +1,6 @@ +### init db with coturn schema +FROM mariadb + +ADD init-coturn-db.sql /docker-entrypoint-initdb.d + +ADD schema.sql /docker-entrypoint-initdb.d diff --git a/docker/mysql/init-coturn-db.sql b/docker/mysql/init-coturn-db.sql new file mode 100644 index 00000000..d4f5decd --- /dev/null +++ b/docker/mysql/init-coturn-db.sql @@ -0,0 +1 @@ +ALTER DATABASE coturn CHARACTER SET latin1; diff --git a/docker/mysql/mysql.env b/docker/mysql/mysql.env new file mode 100644 index 00000000..c59039da --- /dev/null +++ b/docker/mysql/mysql.env @@ -0,0 +1,6 @@ +MYSQL_ROOT_PASSWORD=CHANGE_ME + +MYSQL_USER=coturn +MYSQL_PASSWORD=CHANGE_ME +MYSQL_DATABASE=coturn + diff --git a/docker/mysql/schema.sql b/docker/mysql/schema.sql new file mode 100644 index 00000000..1c9eb60e --- /dev/null +++ b/docker/mysql/schema.sql @@ -0,0 +1,55 @@ + +CREATE TABLE turnusers_lt ( + realm varchar(127) default '', + name varchar(512), + hmackey char(128), + PRIMARY KEY (realm,name) +); + +CREATE TABLE turn_secret ( + realm varchar(127) default '', + value varchar(256), + primary key (realm,value) +); + +CREATE TABLE allowed_peer_ip ( + realm varchar(127) default '', + ip_range varchar(256), + primary key (realm,ip_range) +); + +CREATE TABLE denied_peer_ip ( + realm varchar(127) default '', + ip_range varchar(256), + primary key (realm,ip_range) +); + +CREATE TABLE turn_origin_to_realm ( + origin varchar(127), + realm varchar(127), + primary key (origin) +); + +CREATE TABLE turn_realm_option ( + realm varchar(127) default '', + opt varchar(32), + value varchar(128), + primary key (realm,opt) +); + +CREATE TABLE oauth_key ( + kid varchar(128), + ikm_key varchar(256), + timestamp bigint default 0, + lifetime integer default 0, + as_rs_alg varchar(64) default '', + realm varchar(127), + primary key (kid) +); + +CREATE TABLE admin_user ( + name varchar(32), + realm varchar(127), + password varchar(127), + primary key (name) +); diff --git a/docker/postgresql/Dockerfile b/docker/postgresql/Dockerfile new file mode 100644 index 00000000..8e68860c --- /dev/null +++ b/docker/postgresql/Dockerfile @@ -0,0 +1,4 @@ +### init db with coturn schema +FROM postgres + +ADD schema.sql /docker-entrypoint-initdb.d diff --git a/docker/postgresql/postgresql.env b/docker/postgresql/postgresql.env new file mode 100644 index 00000000..eb22d32d --- /dev/null +++ b/docker/postgresql/postgresql.env @@ -0,0 +1,3 @@ +POSTGRES_USER=coturn +POSTGRES_PASSWORD=CHANGE_ME +POSTGRES_DB=coturn diff --git a/docker/postgresql/schema.sql b/docker/postgresql/schema.sql new file mode 100644 index 00000000..1c9eb60e --- /dev/null +++ b/docker/postgresql/schema.sql @@ -0,0 +1,55 @@ + +CREATE TABLE turnusers_lt ( + realm varchar(127) default '', + name varchar(512), + hmackey char(128), + PRIMARY KEY (realm,name) +); + +CREATE TABLE turn_secret ( + realm varchar(127) default '', + value varchar(256), + primary key (realm,value) +); + +CREATE TABLE allowed_peer_ip ( + realm varchar(127) default '', + ip_range varchar(256), + primary key (realm,ip_range) +); + +CREATE TABLE denied_peer_ip ( + realm varchar(127) default '', + ip_range varchar(256), + primary key (realm,ip_range) +); + +CREATE TABLE turn_origin_to_realm ( + origin varchar(127), + realm varchar(127), + primary key (origin) +); + +CREATE TABLE turn_realm_option ( + realm varchar(127) default '', + opt varchar(32), + value varchar(128), + primary key (realm,opt) +); + +CREATE TABLE oauth_key ( + kid varchar(128), + ikm_key varchar(256), + timestamp bigint default 0, + lifetime integer default 0, + as_rs_alg varchar(64) default '', + realm varchar(127), + primary key (kid) +); + +CREATE TABLE admin_user ( + name varchar(32), + realm varchar(127), + password varchar(127), + primary key (name) +); diff --git a/docker/redis/Dockerfile b/docker/redis/Dockerfile new file mode 100644 index 00000000..fc027fa6 --- /dev/null +++ b/docker/redis/Dockerfile @@ -0,0 +1,6 @@ +### init db with coturn schema +FROM redis + +COPY redis.conf /usr/local/etc/redis/redis.conf +CMD [ "redis-server", "/usr/local/etc/redis/redis.conf" ] + diff --git a/docker/redis/redis.conf b/docker/redis/redis.conf new file mode 100644 index 00000000..90e39026 --- /dev/null +++ b/docker/redis/redis.conf @@ -0,0 +1,3 @@ +timeout 0 +tcp-keepalive 60 +requirepass CHANGE_ME diff --git a/docker/redis/redis.env b/docker/redis/redis.env new file mode 100644 index 00000000..e69de29b From 5f7030e49293369c02cc300897f7e90054db7163 Mon Sep 17 00:00:00 2001 From: Mathieu Aubin Date: Fri, 2 Nov 2018 06:01:24 -0400 Subject: [PATCH 05/20] dupe --- Dockerfile.build | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Dockerfile.build b/Dockerfile.build index 3c360a00..684805b3 100644 --- a/Dockerfile.build +++ b/Dockerfile.build @@ -7,5 +7,4 @@ RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \ libsqlite3-dev \ libevent-dev \ g++ \ - libboost-dev \ - libevent-dev + libboost-dev From 01a44b062b0fed8e06a1839f5ffe4532c409a2ea Mon Sep 17 00:00:00 2001 From: Majid Motallebikashani Date: Fri, 9 Nov 2018 00:56:30 +0330 Subject: [PATCH 06/20] Misspelling Correction (Enpoint) --- src/apps/natdiscovery/natdiscovery.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/apps/natdiscovery/natdiscovery.c b/src/apps/natdiscovery/natdiscovery.c index 31bde9d4..4e24218c 100644 --- a/src/apps/natdiscovery/natdiscovery.c +++ b/src/apps/natdiscovery/natdiscovery.c @@ -737,7 +737,7 @@ int main(int argc, char **argv) run_stunclient(&local_addr, &remote_addr, &reflexive_addr, &other_addr, &local_port, &rfc5780,0,0,padding); if(addr_eq(&tmp_addr,&reflexive_addr)){ - discoveryresult("NAT with Enpoint Independent Mapping!"); + discoveryresult("NAT with Endpoint Independent Mapping!"); } else { addr_cpy(&tmp_addr, &reflexive_addr); addr_cpy(&remote_addr, &other_addr); @@ -767,7 +767,7 @@ int main(int argc, char **argv) int res=0; res=run_stunclient(&local_addr, &remote_addr, &reflexive_addr, &other_addr, &local_port, &rfc5780,1,1,padding); if (!res) { - discoveryresult("NAT with Enpoint Independent Filtering!"); + discoveryresult("NAT with Endpoint Independent Filtering!"); } else { res=0; res=run_stunclient(&local_addr, &remote_addr, &reflexive_addr, &other_addr, &local_port, &rfc5780,0,1,padding); From 92509f4998c56defcb5baf73e5021331966bf940 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A9sz=C3=A1ros=20Mih=C3=A1ly?= Date: Thu, 3 Jan 2019 15:31:19 +0100 Subject: [PATCH 07/20] Fix: Many Thanks to Danlock.. --- docker/coturn/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/coturn/Dockerfile b/docker/coturn/Dockerfile index 6f61870e..1075f47a 100644 --- a/docker/coturn/Dockerfile +++ b/docker/coturn/Dockerfile @@ -31,7 +31,7 @@ COPY --from=coturn-build ${BUILD_PREFIX}/coturn/man/ ${INSTALL_PREFIX}/man/ #COPY turnserver.conf ${INSTALL_PREFIX}/etc COPY --from=coturn-build ${BUILD_PREFIX}/coturn/sqlite/turndb ${INSTALL_PREFIX}/var/db/turndb COPY --from=coturn-build ${BUILD_PREFIX}/coturn/turndb ${INSTALL_PREFIX}/turndb -# Install build dependencies +# Install lib dependencies RUN export DEBIAN_FRONTEND=noninteractive && \ apt-get update && \ apt-get install -y libc6>=2.15 libevent-core-2.0-5>=2.0.10-stable libevent-extra-2.0-5>=2.0.10-stable libevent-openssl-2.0-5>=2.0.10-stable libevent-pthreads-2.0-5>=2.0.10-stable libhiredis0.13>=0.13.1 libmariadbclient18>=5.5.36 libpq5>=8.4~ libsqlite3-0>=3.6.0 libssl1.1>=1.1.0 libmongoc-1.0 libbson-1.0 From 5d54bd5335b515d41ea9e6c202e3c6c746566318 Mon Sep 17 00:00:00 2001 From: Kirill Gribunin Date: Fri, 18 Jan 2019 19:18:34 +0300 Subject: [PATCH 08/20] Fixed missed \r\n symbols in HTTP headers from HTTPS management interface when no admin users defined --- src/apps/relay/turn_admin_server.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/apps/relay/turn_admin_server.c b/src/apps/relay/turn_admin_server.c index 6c68c47f..c5a29a51 100644 --- a/src/apps/relay/turn_admin_server.c +++ b/src/apps/relay/turn_admin_server.c @@ -1519,7 +1519,7 @@ static void https_finish_page(struct str_buffer *sb, ioa_socket_handle s, int cc send_str_from_ioa_socket_tcp(s,"\r\n"); send_str_from_ioa_socket_tcp(s,get_http_date_header()); if(cclose) { - send_str_from_ioa_socket_tcp(s,"Connection: close"); + send_str_from_ioa_socket_tcp(s,"Connection: close\r\n"); } send_str_from_ioa_socket_tcp(s,"Content-Type: text/html; charset=UTF-8\r\nContent-Length: "); From 2d59a5de2b7c99fe2ab4556c299119eba53ec582 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A9sz=C3=A1ros=20Mih=C3=A1ly?= Date: Tue, 29 Jan 2019 12:54:46 +0100 Subject: [PATCH 09/20] readd pwd check regression from 4.5.1.0 --- src/apps/relay/turn_admin_server.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/apps/relay/turn_admin_server.c b/src/apps/relay/turn_admin_server.c index 682fda15..d32d08e4 100644 --- a/src/apps/relay/turn_admin_server.c +++ b/src/apps/relay/turn_admin_server.c @@ -3295,7 +3295,7 @@ static void handle_logon_request(ioa_socket_handle s, struct http_request* hr) s->special_session_size = sizeof(struct admin_session); } - if(!(as->as_ok) && uname && is_secure_string((const u08bits*)uname,1)) { + if(!(as->as_ok) && uname && is_secure_string((const u08bits*)uname,1) && pwd) { const turn_dbdriver_t * dbd = get_dbdriver(); if (dbd && dbd->get_admin_user) { password_t password; From 3c355547d4bbff45531ab1c716f211c366757246 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A9sz=C3=A1ros=20Mih=C3=A1ly?= Date: Tue, 29 Jan 2019 13:10:30 +0100 Subject: [PATCH 10/20] Update ChangeLog --- ChangeLog | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/ChangeLog b/ChangeLog index a1a360d4..5be00638 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +10/02/2019 Oleg Moskalenko Mihály Mészáros +Version 4.5.1.1 'dan Eider': + - merge PR #330 missing \r\n after http Connection:close (by gribunin) + - merge PR #303 fix typo enpoint (by Majid Motallebikashani) + - merge PR #129 seperate http web-admin listener (by Thibaut ACKERMANN) + - readd pwd check - regression from 4.5.1.0 + - merge docker branch + 24/11/2018 Oleg Moskalenko Mihály Mészáros Version 4.5.1.0 'dan Eider': Consider to change config file after upgrade, because it contains some From 856c3c9ff620ae2b00354ac55c539ba3dadb16f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A9sz=C3=A1ros=20Mih=C3=A1ly?= Date: Tue, 29 Jan 2019 14:47:56 +0100 Subject: [PATCH 11/20] Fix typos and other regressions --- README.turnserver | 2 +- man/man1/turnadmin.1 | 2 +- man/man1/turnserver.1 | 4 ++-- man/man1/turnutils.1 | 2 +- src/apps/relay/mainrelay.c | 6 +++--- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/README.turnserver b/README.turnserver index cb764c01..fd14035f 100644 --- a/README.turnserver +++ b/README.turnserver @@ -563,7 +563,7 @@ Options with values: --web-admin-port= Web-admin server port. Default is 8080. --web-admin-listen-on-workers Enable for web-admin server to listens on STUN/TURN workers STUN/TURN ports. By default it is disabled for security resons! - (This beahvior used to be the default bahavior, and was enabled by default.) + (This behavior used to be the default behavior, and was enabled by default.) --ne=[1|2|3] Set network engine type for the process (for internal purposes). diff --git a/man/man1/turnadmin.1 b/man/man1/turnadmin.1 index cdcb4c9c..ec8c0321 100644 --- a/man/man1/turnadmin.1 +++ b/man/man1/turnadmin.1 @@ -1,5 +1,5 @@ .\" Text automatically generated by txt2man -.TH TURN 1 "31 October 2018" "" "" +.TH TURN 1 "29 January 2019" "" "" .SH GENERAL INFORMATION \fIturnadmin\fP is a TURN administration tool. This tool can be used to manage diff --git a/man/man1/turnserver.1 b/man/man1/turnserver.1 index 183256d3..fbe12714 100644 --- a/man/man1/turnserver.1 +++ b/man/man1/turnserver.1 @@ -1,5 +1,5 @@ .\" Text automatically generated by txt2man -.TH TURN 1 "31 October 2018" "" "" +.TH TURN 1 "29 January 2019" "" "" .SH GENERAL INFORMATION The \fBTURN Server\fP project contains the source code of a TURN server and TURN client @@ -813,7 +813,7 @@ Web\-admin server port. Default is 8080. \fB\-\-web\-admin\-listen\-on\-workers\fP Enable for web\-admin server to listens on STUN/TURN workers STUN/TURN ports. By default it is disabled for security resons! -(This beahvior used to be the default bahavior, and was enabled by default.) +(This behavior used to be the default behavior, and was enabled by default.) .TP .B \fB\-\-ne\fP=[1|2|3] diff --git a/man/man1/turnutils.1 b/man/man1/turnutils.1 index b9808795..74d1e424 100644 --- a/man/man1/turnutils.1 +++ b/man/man1/turnutils.1 @@ -1,5 +1,5 @@ .\" Text automatically generated by txt2man -.TH TURN 1 "31 October 2018" "" "" +.TH TURN 1 "29 January 2019" "" "" .SH GENERAL INFORMATION A set of turnutils_* programs provides some utility functionality to be used diff --git a/src/apps/relay/mainrelay.c b/src/apps/relay/mainrelay.c index ffc3a018..db99fa36 100644 --- a/src/apps/relay/mainrelay.c +++ b/src/apps/relay/mainrelay.c @@ -431,7 +431,7 @@ static char Usage[] = "Usage: turnserver [options]\n" " In more complex case when more than one IP address is involved,\n" " that option must be used several times in the command line, each entry must\n" " have form \"-X public-ip/private-ip\", to map all involved addresses.\n" -" --allow-loopback-peers Allow peers on the loopback addresses (127.x.x.x and ::1).\n" +" --allow-loopback-peers Allow peers on the loopback addresses (127.x.x.x and ::1).\n" " --no-multicast-peers Disallow peers on well-known broadcast addresses (224.0.0.0 and above, and FFXX:*).\n" " -m, --relay-threads Number of relay threads to handle the established connections\n" " (in addition to authentication thread and the listener thread).\n" @@ -630,9 +630,9 @@ static char Usage[] = "Usage: turnserver [options]\n" " --web-admin-ip= Local system IP address to be used for Web-admin server endpoint. Default value\n" " is 127.0.0.1.\n" " --web-admin-port= Web-admin server port. Default is 8080.\n" -" --web-admin-listen-on-workers Enable for web-admin server to listens on STUN/TURN workers STUN/TURN ports.\n" +" --web-admin-listen-on-workers Enable for web-admin server to listens on STUN/TURN workers STUN/TURN ports.\n" " By default it is disabled for security resons!\n" -" (This beahvior used to be the default bahavior, and was enabled by default.)\n" +" (This behavior used to be the default behavior, and was enabled by default.)\n" " --server-relay Server relay. NON-STANDARD AND DANGEROUS OPTION. Only for those applications\n" " when we want to run server applications on the relay endpoints.\n" " This option eliminates the IP permissions check on the packets\n" From 3d958c7c24178c12068207b56f3c1b415663477f Mon Sep 17 00:00:00 2001 From: David-dp- Date: Wed, 30 Jan 2019 12:34:34 +1300 Subject: [PATCH 12/20] Clarify standard installation on debian --- INSTALL | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/INSTALL b/INSTALL index 6b7a4ba9..1e7b38fd 100644 --- a/INSTALL +++ b/INSTALL @@ -6,7 +6,9 @@ At the present time, several operation systems have this project pre-packaged: http://packages.qa.debian.org/r/coturn.html -If you are using the Debian package from the project download site, +which can be installed the usual way: apt install coturn + +If instead you are using the Debian package from the project download site, then follow these instructions: Unpack the archive: From dc764dffda6839d8b9a428e2c58a05b40dfc165e Mon Sep 17 00:00:00 2001 From: root Date: Thu, 31 Jan 2019 14:45:36 +0100 Subject: [PATCH 13/20] rpm build fix --- rpm/turnserver.spec | 1 + 1 file changed, 1 insertion(+) diff --git a/rpm/turnserver.spec b/rpm/turnserver.spec index 0db6b202..79fe8574 100644 --- a/rpm/turnserver.spec +++ b/rpm/turnserver.spec @@ -204,6 +204,7 @@ fi %{_datadir}/%{name}/scripts/peer.sh %{_datadir}/%{name}/scripts/oauth.sh %{_datadir}/%{name}/scripts/readme.txt +%{_datadir}/%{name}/scripts/pack.sh %dir %{_datadir}/%{name}/scripts/basic %{_datadir}/%{name}/scripts/basic/dos_attack.sh %{_datadir}/%{name}/scripts/basic/relay.sh From 7f201e86a6de85c980297e66357e7af908556742 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A9sz=C3=A1ros=20Mih=C3=A1ly?= Date: Tue, 15 Jan 2019 15:40:01 +0100 Subject: [PATCH 14/20] Workaround for SPARC64 recv_ttl=0 Quick & Dirty fix to use default TTL TODO: to find a better fix.. --- src/apps/relay/ns_ioalib_engine_impl.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/apps/relay/ns_ioalib_engine_impl.c b/src/apps/relay/ns_ioalib_engine_impl.c index 02eba0a8..0c2ebe9e 100644 --- a/src/apps/relay/ns_ioalib_engine_impl.c +++ b/src/apps/relay/ns_ioalib_engine_impl.c @@ -2055,7 +2055,7 @@ int udp_recvfrom(evutil_socket_t fd, ioa_addr* orig_addr, const ioa_addr *like_a switch(l) { case IPPROTO_IP: switch(t) { -#if defined(IP_RECVTTL) +#if defined(IP_RECVTTL) && !defined(__sparc_v9__) case IP_RECVTTL: case IP_TTL: recv_ttl = *((recv_ttl_t *) CMSG_DATA(cmsgh)); @@ -2083,7 +2083,7 @@ int udp_recvfrom(evutil_socket_t fd, ioa_addr* orig_addr, const ioa_addr *like_a break; case IPPROTO_IPV6: switch(t) { -#if defined(IPV6_RECVHOPLIMIT) +#if defined(IPV6_RECVHOPLIMIT) && !defined(__sparc_v9__) case IPV6_RECVHOPLIMIT: case IPV6_HOPLIMIT: recv_ttl = *((recv_ttl_t *) CMSG_DATA(cmsgh)); From 53bae81e786686c0a15c849f8d228dbfa60375e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A9sz=C3=A1ros=20Mih=C3=A1ly?= Date: Tue, 15 Jan 2019 15:38:59 +0100 Subject: [PATCH 15/20] SPARC64 mem alingment fixes --- src/apps/uclient/uclient.c | 21 ++++++++++++--------- src/client/ns_turn_ioaddr.c | 20 +++++++++----------- src/client/ns_turn_msg.c | 21 ++++++++++++++------- 3 files changed, 35 insertions(+), 27 deletions(-) diff --git a/src/apps/uclient/uclient.c b/src/apps/uclient/uclient.c index ecd61bdf..0ca87598 100644 --- a/src/apps/uclient/uclient.c +++ b/src/apps/uclient/uclient.c @@ -672,13 +672,14 @@ static int client_read(app_ur_session *elem, int is_tcp_data, app_tcp_conn_info uint16_t chnumber = 0; - const message_info *mi = NULL; - + message_info mi; + int miset=0; size_t buffers = 1; if(is_tcp_data) { if ((int)elem->in_buffer.len == clmessage_length) { - mi = (message_info*)(elem->in_buffer.buf); + ns_bcopy((elem->in_buffer.buf), &mi, sizeof(message_info)); + miset=1; } } else if (stun_is_indication(&(elem->in_buffer))) { @@ -726,7 +727,8 @@ static int client_read(app_ur_session *elem, int is_tcp_data, app_tcp_conn_info const u08bits* data = stun_attr_get_value(sar); - mi = (const message_info*) data; + ns_bcopy(data, &mi, sizeof(message_info)); + miset=1; } } else if (stun_is_success_response(&(elem->in_buffer))) { @@ -781,7 +783,8 @@ static int client_read(app_ur_session *elem, int is_tcp_data, app_tcp_conn_info return rc; } - mi = (message_info*)(elem->in_buffer.buf + 4); + ns_bcopy(elem->in_buffer.buf + 4, &mi, sizeof(message_info)); + miset=1; applen = elem->in_buffer.len -4; } } else { @@ -790,15 +793,15 @@ static int client_read(app_ur_session *elem, int is_tcp_data, app_tcp_conn_info return rc; } - if(mi) { + if(miset) { /* printf("%s: 111.111: msgnum=%d, rmsgnum=%d, sent=%lu, recv=%lu\n",__FUNCTION__, mi->msgnum,elem->recvmsgnum,(unsigned long)mi->mstime,(unsigned long)current_mstime); */ - if(mi->msgnum != elem->recvmsgnum+1) + if(mi.msgnum != elem->recvmsgnum+1) ++(elem->loss); else { - u64bits clatency = (u64bits)time_minus(current_mstime,mi->mstime); + u64bits clatency = (u64bits)time_minus(current_mstime,mi.mstime); if(clatency>max_latency) max_latency = clatency; if(clatencyrecvmsgnum = mi->msgnum; + elem->recvmsgnum = mi.msgnum; } elem->rmsgnum+=buffers; diff --git a/src/client/ns_turn_ioaddr.c b/src/client/ns_turn_ioaddr.c index 138de18c..b4948a01 100644 --- a/src/client/ns_turn_ioaddr.c +++ b/src/client/ns_turn_ioaddr.c @@ -106,7 +106,8 @@ u32bits addr_hash(const ioa_addr *addr) if (addr->ss.sa_family == AF_INET) { ret = hash_int32(addr->s4.sin_addr.s_addr + addr->s4.sin_port); } else { - const u64bits *a = (const u64bits *) (&(addr->s6.sin6_addr)); + u64bits a[2]; + ns_bcopy(&(addr->s6.sin6_addr), &a, sizeof(a)); ret = (u32bits)((hash_int64(a[0])<<3) + (hash_int64(a[1] + addr->s6.sin6_port))); } return ret; @@ -121,7 +122,8 @@ u32bits addr_hash_no_port(const ioa_addr *addr) if (addr->ss.sa_family == AF_INET) { ret = hash_int32(addr->s4.sin_addr.s_addr); } else { - const u64bits *a = (const u64bits *) (&(addr->s6.sin6_addr)); + u64bits a[2]; + ns_bcopy(&(addr->s6.sin6_addr), &a, sizeof(a)); ret = (u32bits)((hash_int64(a[0])<<3) + (hash_int64(a[1]))); } return ret; @@ -153,10 +155,8 @@ int addr_eq(const ioa_addr* a1, const ioa_addr *a2) { return 1; } } else if(a1->ss.sa_family == AF_INET6 && a1->s6.sin6_port == a2->s6.sin6_port) { - const u64bits *p1=(const u64bits *)(&(a1->s6.sin6_addr)); - const u64bits *p2=(const u64bits *)(&(a2->s6.sin6_addr)); - if(p1[0]==p2[0] && p1[1]==p2[1]) { - return 1; + if( memcmp(&(a1->s6.sin6_addr), &(a2->s6.sin6_addr) ,sizeof(struct in6_addr)) == 0 ) { + return 1; } } } @@ -175,11 +175,9 @@ int addr_eq_no_port(const ioa_addr* a1, const ioa_addr *a2) { return 1; } } else if(a1->ss.sa_family == AF_INET6) { - const u64bits *p1=(const u64bits *)(&(a1->s6.sin6_addr)); - const u64bits *p2=(const u64bits *)(&(a2->s6.sin6_addr)); - if(p1[0]==p2[0] && p1[1]==p2[1]) { - return 1; - } + if( memcmp(&(a1->s6.sin6_addr), &(a2->s6.sin6_addr) ,sizeof(struct in6_addr)) == 0 ) { + return 1; + } } } return 0; diff --git a/src/client/ns_turn_msg.c b/src/client/ns_turn_msg.c index 037fdc47..03cff34f 100644 --- a/src/client/ns_turn_msg.c +++ b/src/client/ns_turn_msg.c @@ -1296,7 +1296,9 @@ u64bits stun_attr_get_reservation_token_value(stun_attr_ref attr) { if(attr) { const u08bits* value = stun_attr_get_value(attr); if(value && (stun_attr_get_len(attr) == 8)) { - return nswap64(((const u64bits*)value)[0]); + u64bits token; + ns_bcopy(value, &token, sizeof(u64bits)); + return nswap64(token); } } return 0; @@ -2432,8 +2434,9 @@ static int encode_oauth_token_gcm(const u08bits *server_name, encoded_oauth_toke ns_bcopy(dtoken->enc_block.mac_key,orig_field+len,dtoken->enc_block.key_length); len += dtoken->enc_block.key_length; - *((uint64_t*)(orig_field+len)) = nswap64(dtoken->enc_block.timestamp); - len += 8; + uint64_t ts = nswap64(dtoken->enc_block.timestamp); + ns_bcopy( &ts, (orig_field+len), sizeof(ts)); + len += sizeof(ts); *((uint32_t*)(orig_field+len)) = nswap32(dtoken->enc_block.lifetime); len += 4; @@ -2608,11 +2611,15 @@ static int decode_oauth_token_gcm(const u08bits *server_name, const encoded_oaut ns_bcopy(decoded_field+len,dtoken->enc_block.mac_key,dtoken->enc_block.key_length); len += dtoken->enc_block.key_length; - dtoken->enc_block.timestamp = nswap64(*((uint64_t*)(decoded_field+len))); - len += 8; + uint64_t ts; + ns_bcopy((decoded_field+len),&ts,sizeof(ts)); + dtoken->enc_block.timestamp = nswap64(ts); + len += sizeof(ts); - dtoken->enc_block.lifetime = nswap32(*((uint32_t*)(decoded_field+len))); - len += 4; + uint32_t lt; + ns_bcopy((decoded_field+len),<,sizeof(lt)); + dtoken->enc_block.lifetime = nswap32(lt); + len += sizeof(lt); return 0; } From 41ebbfcd6a8d2c44b4de79b32c881dae00e38e70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A9sz=C3=A1ros=20Mih=C3=A1ly?= Date: Sat, 2 Mar 2019 21:08:35 +0100 Subject: [PATCH 16/20] Fix indentation --- src/apps/uclient/uclient.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/apps/uclient/uclient.c b/src/apps/uclient/uclient.c index 0ca87598..d8b360be 100644 --- a/src/apps/uclient/uclient.c +++ b/src/apps/uclient/uclient.c @@ -677,10 +677,10 @@ static int client_read(app_ur_session *elem, int is_tcp_data, app_tcp_conn_info size_t buffers = 1; if(is_tcp_data) { - if ((int)elem->in_buffer.len == clmessage_length) { - ns_bcopy((elem->in_buffer.buf), &mi, sizeof(message_info)); - miset=1; - } + if ((int)elem->in_buffer.len == clmessage_length) { + ns_bcopy((elem->in_buffer.buf), &mi, sizeof(message_info)); + miset=1; + } } else if (stun_is_indication(&(elem->in_buffer))) { uint16_t method = stun_get_method(&elem->in_buffer); From 65e14366b00c2815acd4e545151374bdd1c75a8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A9sz=C3=A1ros=20Mih=C3=A1ly?= Date: Sat, 2 Mar 2019 20:27:10 +0100 Subject: [PATCH 17/20] Add web-admin-listen-on-workers option --- examples/etc/turnserver.conf | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/examples/etc/turnserver.conf b/examples/etc/turnserver.conf index 84caab8f..df2535c2 100644 --- a/examples/etc/turnserver.conf +++ b/examples/etc/turnserver.conf @@ -679,6 +679,11 @@ # #web-admin-port=8080 +# Web-admin server listen on STUN/TURN worker threads +# By default it is disabled for security resons! (Not recommended in any production environment!) +# +#web-admin-listen-on-workers + # Server relay. NON-STANDARD AND DANGEROUS OPTION. # Only for those applications when we want to run # server applications on the relay endpoints. From 055c0aa07ea404b4073cb0a42fec6ac505eddabf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A9sz=C3=A1ros=20Mih=C3=A1ly?= Date: Sat, 2 Mar 2019 20:48:29 +0100 Subject: [PATCH 18/20] Add changes to Changelog --- ChangeLog | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5be00638..abd10ba6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,10 +1,18 @@ -10/02/2019 Oleg Moskalenko Mihály Mészáros +02/03/2019 Oleg Moskalenko Mihály Mészáros Version 4.5.1.1 'dan Eider': - merge PR #330 missing \r\n after http Connection:close (by gribunin) - merge PR #303 fix typo enpoint (by Majid Motallebikashani) - merge PR #129 seperate http web-admin listener (by Thibaut ACKERMANN) - - readd pwd check - regression from 4.5.1.0 + - regression from 4.5.1.0 + * readd pwd check + * add to config missing web-admin-listen-on-workers option - merge docker branch + * Add Docker file for all database backend. + - merge sparc64 branch + * Fix mem alingment issue on 64 bit architecture + That issue caused earlier "bus error" on sparc64 and armhf + - merge PR #336 Clarify Debian install (by David-dp-) + - merge PR #339 RPM build fix (by Peter Hudec ) 24/11/2018 Oleg Moskalenko Mihály Mészáros Version 4.5.1.0 'dan Eider': From 6999135e00b8832331b46c422695ddfaa637cc91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A9sz=C3=A1ros=20Mih=C3=A1ly?= Date: Sat, 2 Mar 2019 21:31:34 +0100 Subject: [PATCH 19/20] Remove mistakenly installed cert&key for docker Install and use your own.. --- docker/coturn/cert.pem | 35 ----------------------------------- docker/coturn/privkey.pem | 28 ---------------------------- 2 files changed, 63 deletions(-) delete mode 100644 docker/coturn/cert.pem delete mode 100644 docker/coturn/privkey.pem diff --git a/docker/coturn/cert.pem b/docker/coturn/cert.pem deleted file mode 100644 index 00346262..00000000 --- a/docker/coturn/cert.pem +++ /dev/null @@ -1,35 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIGFzCCBP+gAwIBAgISA6lUbjohIPynulrqRhhtei8uMA0GCSqGSIb3DQEBCwUA -MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD -ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMzAeFw0xODA5MDkwOTM3NTJaFw0x -ODEyMDgwOTM3NTJaMCExHzAdBgNVBAMTFmRvY2tlci5sYWIudnZjLm5paWYuaHUw -ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDR2NpBf8lYR9x1Aq1AltIr -huhuWPqtzRSTxNPlHAD5qfx86IWex59jx+aNAfYZSUg9Zex13XNgJAO37fSxQ5LY -zEXDgGusIbaZ3rSW+62Smpw2p4nrDVetf39A83jXMTU/yWLT43ab6tgfpnggpHzO -YLnaG46DVjTXEJTd38sRZoGZdHUcMqV7A5463vsoukBrmO9wpPUz6U/uTw7tD0eQ -f5dJViqY88120hXIxqD9vxJpn7aOK2H9sa9OJ3XVRwyCpnB980CMM4kCqMh0j3EA -z6T0UblDpEiZjcMVKyjKAlDntbQXmy0bvABdU1LI98QXqEGzGYBA+wxVs6hcf4+n -AgMBAAGjggMeMIIDGjAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUH -AwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFKrVAeFyV+crd1H1 -SOlUXtyYCALQMB8GA1UdIwQYMBaAFKhKamMEfd265tE5t6ZFZe/zqOyhMG8GCCsG -AQUFBwEBBGMwYTAuBggrBgEFBQcwAYYiaHR0cDovL29jc3AuaW50LXgzLmxldHNl -bmNyeXB0Lm9yZzAvBggrBgEFBQcwAoYjaHR0cDovL2NlcnQuaW50LXgzLmxldHNl -bmNyeXB0Lm9yZy8wIQYDVR0RBBowGIIWZG9ja2VyLmxhYi52dmMubmlpZi5odTCB -/gYDVR0gBIH2MIHzMAgGBmeBDAECATCB5gYLKwYBBAGC3xMBAQEwgdYwJgYIKwYB -BQUHAgEWGmh0dHA6Ly9jcHMubGV0c2VuY3J5cHQub3JnMIGrBggrBgEFBQcCAjCB -ngyBm1RoaXMgQ2VydGlmaWNhdGUgbWF5IG9ubHkgYmUgcmVsaWVkIHVwb24gYnkg -UmVseWluZyBQYXJ0aWVzIGFuZCBvbmx5IGluIGFjY29yZGFuY2Ugd2l0aCB0aGUg -Q2VydGlmaWNhdGUgUG9saWN5IGZvdW5kIGF0IGh0dHBzOi8vbGV0c2VuY3J5cHQu -b3JnL3JlcG9zaXRvcnkvMIIBBAYKKwYBBAHWeQIEAgSB9QSB8gDwAHYAKTxRllTI -OWW6qlD8WAfUt2+/WHopctykwwz05UVH9HgAAAFlvejBzwAABAMARzBFAiEAwGHT -AIxt5AEprWh2r7eyK/GZKZZheimdNtCca6q4LMACICxxpzVgjAkikFARMwUxvGfs -73T5lSzAsRLa9w88bGSFAHYAwRZK4Kdy0tQ5LcgKwQdw1PDEm96ZGkhAwfoHUWT2 -M2AAAAFlvejDqgAABAMARzBFAiEAisNayIaZAimDAhbhpTuMhOY6ZCtqQqHHrTId -HRTJD8cCIFhfNrFMemmfT9kAWZ2phtRqtVjAHYVEq5HbbcLnQ3YwMA0GCSqGSIb3 -DQEBCwUAA4IBAQAHhIpkn23C53LMI+ns5QDFDtGLxJWycZt83WowFXfFuT87K+LW -n0kUMl3GLlEbP8hi7LAH21p9WNSfFFwQmdqiO/eRm8quDjfOMmDu7njVASzTSeke -uiuSgqGq2BRiFI5juHo1UqqzQItcv4BvMS8l7bAQRgek2bhmUlb68Ebr3awFEdSQ -McjzYKZT0mIQgVTWik7PyMJTnzFYu5KHiU6n8B/UZqZP3hAJnHt6pG0brjaKUcaD -aPQYYxE363Vo0L7aC0Gkmi8FnS9f2c0nkxI4aMqbFlxiIztydHvk5R1gO7bOakP/ -Im62n/0uRF4BrgWqxYEuAYnzCYsqg1oByl8V ------END CERTIFICATE----- diff --git a/docker/coturn/privkey.pem b/docker/coturn/privkey.pem deleted file mode 100644 index f845d0c8..00000000 --- a/docker/coturn/privkey.pem +++ /dev/null @@ -1,28 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDR2NpBf8lYR9x1 -Aq1AltIrhuhuWPqtzRSTxNPlHAD5qfx86IWex59jx+aNAfYZSUg9Zex13XNgJAO3 -7fSxQ5LYzEXDgGusIbaZ3rSW+62Smpw2p4nrDVetf39A83jXMTU/yWLT43ab6tgf -pnggpHzOYLnaG46DVjTXEJTd38sRZoGZdHUcMqV7A5463vsoukBrmO9wpPUz6U/u -Tw7tD0eQf5dJViqY88120hXIxqD9vxJpn7aOK2H9sa9OJ3XVRwyCpnB980CMM4kC -qMh0j3EAz6T0UblDpEiZjcMVKyjKAlDntbQXmy0bvABdU1LI98QXqEGzGYBA+wxV -s6hcf4+nAgMBAAECggEBAJ6vpMR5NLIcjXqyjn9UThR6TVP813wMpG3mHvKXTal+ -wR9X2ouqmz6iURb6j7apcwZzB/BNiUz/jwxM1ogh+G8Xcf4YI9QkHmiXP+sY4TYG -0vCFm0bzbQUXcAyW0R+x53mX+bMPxIa9fbfZc+gDWxnZjVGBGzD4RLcJo/lwnahG -gt02EROW4bbHu+7EgWTnwH0WNO8ivtFs5qq6twOcCiA/ri5op2Qy1iLAWY6g2pf5 -exvJNeqUP2QNOgWJJpUADD/B+fUDrsYtLA9hba63IkRnTgeSCsOfB2Rmqkehg9SB -bIZjqFDBCZuDhrdi4xyO+54TcKMAb04rNtu4g9vzXFkCgYEA/hs5CE/SEfh/FLaN -+mi/rAtgkVhEQzNOdV0KurPUf3fC8P86G0ylJcJ/qsNCZVxRU6R4lvk6ZE6OZY+o -hbzgj1M9yd/jY1d9Qcua9v8EoZxyp7sgWMf++/DxrpPvcgQTlNNRV5rX/aDz8uL4 -GnZrkyLA+/0WFn/zAV7OjCw2FXsCgYEA02kxcuU+ldNkgHl7YrEl0tlWscfbzm10 -fRqMzuyyRyRgPEgKAIKExI0OVuwmyWvCFTbi8IOpZs/jtG3+r83RFY9VA0r0g3ch -jilCaI+2P1ZYm0UAQCyVLCjtVLIZu4Z/h8TctHHDXUjy18xDdLNMTs7hIcbuH85Q -hpzfcMRgmMUCgYEAmw6Ti73hazPeoA4RrwbyRxKeN7LL3NHXA4jl/i2z8qBq5VJo -67WmZNc9vj7uKhneSpLnPwEQH5tMCy9RX2J1CSB7aM9k2v7NITQT+Lp+4fssf6uR -Pnuz3ZsWbzg4ebOBG2Sjkziaqlrn4YOcb9FpLVyctGeobcxfxatLkH999TcCgYBx -PhrHwbZJiSd/jhMipWNuUw8WQckjBQxt6ufb+3vvkbOe9rOs3D0ED87LjsmkAP3A -YVsknFIEiX0ebAEN6MCDvPg7wE3Dke++d6lj2v8zZCwoV8ivl3H8apveT1xrT7tG -XZQfcATHFklGgNrtSxGn8Tc04ZsyHFCUGrmxbO+VRQKBgE7CUNEDLRD1D34v/rYd -e2yAeuQQiiKW1pNACBv6Y+Bc/tftunBh3ekTz5Z4XwRE1RZjdCjmEiT47IWh5mlu -cylZTVCkk0RbbRDTA37uw5ggMuNrTy7p9ktC4V1RbfO/yFfu0+R5T4X/n+6UFxu0 -PQrYxRItI7dWCOyRl1nwUogT ------END PRIVATE KEY----- From 5e61bea8ec54ad8b7aa2117a0601619101b715ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A9sz=C3=A1ros=20Mih=C3=A1ly?= Date: Sat, 2 Mar 2019 22:02:35 +0100 Subject: [PATCH 20/20] Bumping version number --- rpm/build.settings.sh | 2 +- rpm/turnserver.spec | 4 +++- src/ns_turn_defs.h | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/rpm/build.settings.sh b/rpm/build.settings.sh index e9742e4a..90b9f36f 100755 --- a/rpm/build.settings.sh +++ b/rpm/build.settings.sh @@ -2,7 +2,7 @@ # Common settings script. -TURNVERSION=4.5.1.0 +TURNVERSION=4.5.1.1 BUILDDIR=~/rpmbuild ARCH=`uname -p` TURNSERVER_GIT_URL=https://github.com/coturn/coturn.git diff --git a/rpm/turnserver.spec b/rpm/turnserver.spec index 79fe8574..735b5549 100644 --- a/rpm/turnserver.spec +++ b/rpm/turnserver.spec @@ -1,5 +1,5 @@ Name: turnserver -Version: 4.5.1.0 +Version: 4.5.1.1 Release: 0%{dist} Summary: Coturn TURN Server @@ -296,6 +296,8 @@ fi %{_includedir}/turn/client/TurnMsgLib.h %changelog +* Sat Mar 2 2019 Mészáros Mihály + - Sync to 4.5.1.1 * Thu Dec 6 2018 Mészáros Mihály - Sync to 4.5.1.0 * Thu Sep 27 2018 Oleg Moskalenko diff --git a/src/ns_turn_defs.h b/src/ns_turn_defs.h index 99fe587e..6ef98725 100644 --- a/src/ns_turn_defs.h +++ b/src/ns_turn_defs.h @@ -31,7 +31,7 @@ #ifndef __IOADEFS__ #define __IOADEFS__ -#define TURN_SERVER_VERSION "4.5.1.0" +#define TURN_SERVER_VERSION "4.5.1.1" #define TURN_SERVER_VERSION_NAME "dan Eider" #define TURN_SOFTWARE "Coturn-" TURN_SERVER_VERSION " '" TURN_SERVER_VERSION_NAME "'"