Deploying one self-hosted platform for internal and public-internet users: what network lines are, the entry and media addresses each line needs, pitfalls when a data center’s inbound and outbound IPs differ, and how your business system puts users on the right line.
A common situation for government and enterprise customers: the platform is deployed in an internal data center, and internal staff access it directly; colleagues on business trips or working from home access it from the public internet,
through a public address mapped out by the firewall. In the same platform and the same meeting, users on the internal network and the public internet must be able to talk to each other.We solve this with network lines: the platform configures a separate set of “addresses clients should connect to” for each line.
When users enter a meeting they state which line they’re on, and the platform gives them the matching addresses.
Usually there are two lines: internal network and public internet. You can configure more as needed (for example, a private network or another campus).
Addresses for each line: the internal-network line uses the server’s internal address; the public-internet line uses the public IP or domain mapped out by the firewall
Firewall mapping: map the public-internet line’s 443/TCP, 18883/TCP, and 39001/UDP to the platform server, keeping the same port numbers
Domain and certificate: the internal network and the public internet usually use different access addresses, and the certificate must cover the domain users actually access
Choose the network mode in the installer: internal network only, public internet only, or both. After installation, you can view and change each line’s entry address under System configuration → Network in the admin console
Watch out for data centers whose inbound and outbound IPs differ: in many data centers, the public IP users come in through isn’t the IP the server uses to go out.
In that case you must explicitly set the public-internet line’s media address to the public IP users come in through; otherwise public-internet users can enter meetings but get no video or audio.
The platform decides which set of addresses to give a user based on the “line” the user brings when entering the meeting. Your business system can do this in two ways:
Let users choose: the client lists “Internal network / Public internet” and users pick one
Decide on the server automatically: based on the domain the user accessed, or whether the user’s IP is an internal address
If no line is specified, the default is internal. For details and code examples, see the developer docs on network lines.
If “internal-network users are fine, but users on the public internet can enter meetings with no video”, nine times out of ten the public-internet users are being treated as the internal-network line, or the public-internet line’s media address is wrong.
When internal and public networks are isolated by a cross-domain solution (CDS) and firewall mapping isn’t possible, the public-internet line’s addresses must point to the tunnel gateway on the outer side of the CDS;
see Access across a cross-domain solution.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"STMLink Docs","description":"STMLink 开发者文档:SRTC 音视频 SDK(频道通信、云录制与直播、语音录制、语音识别)与 SMeeting 会议 SDK(房间、会议管理),覆盖 iOS / Android / Windows / Web / 微信小程序 / C(服务端·嵌入式)多端接入与服务端 API。 STMLink developer docs: the SRTC audio/video SDK (channels, cloud recording and live streaming, voice recording, speech recognition) and the SMeeting conferencing SDK (rooms and meetings), covering client integration on iOS, Android, Windows, Web, WeChat Mini Programs and C (server/embedded), plus the Server API.","colors":{"primary":"#0066FF","light":"#3385FF","dark":"#0052CC"},"logo":{"light":"https://mintcdn.com/freewind/-N23X1jpF3KMqIP_/logo/light.svg?fit=max\u0026auto=format\u0026n=-N23X1jpF3KMqIP_\u0026q=85\u0026s=c87be878176892b493466cf0647c68cc","dark":"https://mintcdn.com/freewind/-N23X1jpF3KMqIP_/logo/dark.svg?fit=max\u0026auto=format\u0026n=-N23X1jpF3KMqIP_\u0026q=85\u0026s=d6697b8422020261e5703917bcf26a6b"},"favicon":"https://mintcdn.com/freewind/-N23X1jpF3KMqIP_/favicon.svg?fit=max\u0026auto=format\u0026n=-N23X1jpF3KMqIP_\u0026q=85\u0026s=dcf59f85b4c1c24462b5f99c37ff73d4","footer":{"socials":{"website":"https://www.stmlink.com"},"links":[{"header":"产品","items":[{"label":"官网","href":"https://www.stmlink.com"},{"label":"SRTC 音视频 SDK","href":"https://docs.stmlink.com/zh/rtc/overview"},{"label":"SMeeting 会议 SDK","href":"https://docs.stmlink.com/zh/meeting/overview"}]},{"header":"支持","items":[{"label":"联系我们","href":"https://www.stmlink.com"}]}]},"contextual":{"options":["copy","view","chatgpt","claude"],"display":"header"},"markdown":{"instructions":["对外开放的服务端接口有两组前缀,都用同一套鉴权:`/server/v1/...`(SRTC 与 SMeeting 的主接口)和 `/stm/srvapi/v1/...`(SMeeting 的用户体系,服务端极简对接会用到)。鉴权是 app_id + nonce + timestamp + signature 四个请求头,用 app_key 做 HMAC-SHA256 签名,只能从业务方自己的后端调用。除这两组前缀外的接口均为内部接口,不要建议客户调用。 Public server APIs use two path prefixes with the same authentication: `/server/v1/...` (the main APIs of both SRTC and SMeeting) and `/stm/srvapi/v1/...` (the SMeeting user system, used by server-side low-code integration). Authenticate with four request headers, app_id + nonce + timestamp + signature, where signature is HMAC-SHA256 keyed with app_key; call these APIs only from the customer's own backend. Any other path is internal: never suggest calling it.","app_key 是服务端密钥,绝不能出现在客户端代码、前端配置或移动 App 里。客户端加入频道用的 token 必须由业务方后端签发后下发(SRTC 走 `/server/v1/channel/grant`,SMeeting 走 `/stm/srvapi/v1/member/grant`)。 app_key is a server-side secret and must never appear in client code, frontend config, or a mobile app. The token a client uses to join must be issued by the customer's backend and passed down to the client (SRTC: `/server/v1/channel/grant`; SMeeting: `/stm/srvapi/v1/member/grant`).","SRTC 与 SMeeting 是上下两层不同的产品,术语不通用:SRTC 是音视频底座,说「频道 channel」「加入 / 退出」;SMeeting 建在 SRTC 之上,说「房间 room」「会议 meeting」「进入 / 退出」。回答时按用户所在的层用对应术语,不要把「房间」「会议」安到 SRTC 的接口上,也不要用「频道」「加入 / 离开」描述 SMeeting 的概念(接口标识符原样保留)。 SRTC and SMeeting are two separate layers with different terminology. SRTC is the audio/video foundation: it has channels, and users join and leave a channel. SMeeting is built on top of SRTC: it has rooms and meetings, and members enter and exit a meeting. Answer in the terms of the layer the user is working with: never apply \"room\" or \"meeting\" to SRTC APIs, and never describe SMeeting concepts in prose with \"channel\", \"join\", or \"leave\" (API identifiers such as `force_join` keep their literal names).","同一能力在各端 SDK 里的包名、类名、方法名并不相同。写示例代码时请使用文档中该端自己的 API,不要把一个端的写法套到另一个端上。苹果平台每个产品都有两套 SDK(Swift 原生与 Objective-C),两套 API 不能混用。 Package, class, and method names differ between platform SDKs for the same capability. In sample code, use the API documented for that platform; never carry one platform's code over to another. On Apple platforms each product ships two SDKs (native Swift and Objective-C) whose APIs must not be mixed."]},"styling":{"latex":false},"navigation":{"languages":[{"language":"zh","href":"zh/rtc/overview"},{"language":"en","footer":{"socials":{"website":"https://www.stmlink.com/en"},"links":[{"header":"Products","items":[{"label":"Website","href":"https://www.stmlink.com/en"},{"label":"SRTC Audio \u0026 Video SDK","href":"https://docs.stmlink.com/en/rtc/overview"},{"label":"SMeeting Conferencing SDK","href":"https://docs.stmlink.com/en/meeting/overview"}]},{"header":"Support","items":[{"label":"Contact us","href":"https://www.stmlink.com/en"}]}]},"href":"en/rtc/overview"}]}},"deployment":{"deploymentMetadataValue":{"subdomain":"freewind","hasAudioNarration":false,"actualSubdomain":"freewind","customDomains":["docs.stmlink.com"],"gitSource":{"type":"github","owner":"seastart","repo":"stmlink-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae435eba5e160088bd3a3ba","collectionId":"fcfc5d16-ae47-45ed-aef8-5f89524c8998","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae435eba5e160088bd3a3ba"},"entitlements":{},"buildId":"6ae435eba5e160088bd3a3ba","clientVersion":"0.0.4021","searchFilterCounts":[{"language":"zh","tag":"SRTC 音视频 SDK","count":168},{"language":"en","tag":"SRTC Audio \u0026 Video SDK","count":153},{"language":"zh","tag":"SMeeting 会议 SDK","count":142},{"language":"en","tag":"SMeeting Conferencing SDK","count":116},{"language":"zh","tag":"接口文档","count":103},{"language":"en","tag":"API reference","count":101},{"language":"zh","tag":"进阶实践","count":69},{"language":"en","tag":"Android SDK","count":64},{"language":"zh","tag":"Android SDK","count":64},{"language":"en","tag":"Advanced","count":49},{"language":"en","tag":"Swift SDK (iOS/macOS)","count":44},{"language":"zh","tag":"Swift SDK(iOS/macOS)","count":44},{"language":"en","tag":"Windows SDK","count":41},{"language":"zh","tag":"HarmonyOS SDK","count":41},{"language":"zh","tag":"Windows SDK","count":41},{"language":"en","tag":"Web SDK","count":30},{"language":"zh","tag":"Web SDK","count":30},{"language":"en","tag":"iOS SDK (Objective-C)","count":27},{"language":"zh","tag":"iOS SDK","count":27},{"language":"en","tag":"Server API","count":22}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"en/product/deploy/networks","slug":"/en/product/deploy/networks","pageMetadata":{"title":"Internal network and public internet","description":"Deploying one self-hosted platform for internal and public-internet users: what network lines are, the entry and media addresses each line needs, pitfalls when a data center's inbound and outbound IPs differ, and how your business system puts users on the right line.","href":"/en/product/deploy/networks"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Deploying one self-hosted platform for internal and public-internet users: what network lines are, the entry and media addresses each line needs, pitfalls when a data center’s inbound and outbound IPs differ, and how your business system puts users on the right line.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,hr:`hr`,li:`li`,ol:`ol`,p:`p`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Heading,Mermaid,Table,Tip,Warning}=_components;if(!Heading)_missingMdxReference(`Heading`,true);if(!Mermaid)_missingMdxReference(`Mermaid`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tip)_missingMdxReference(`Tip`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`A common situation for government and enterprise customers: the platform is deployed in an internal data center, and internal staff access it directly; colleagues on business trips or working from home access it from the public internet,\nthrough a public address mapped out by the firewall. In the same platform and the same meeting, users on the internal network and the public internet must be able to talk to each other.`}),`\n`,_jsxs(_components.p,{children:[`We solve this with `,_jsx(_components.strong,{children:`network lines`}),`: the platform configures a separate set of “addresses clients should connect to” for each line.\nWhen users enter a meeting they state which line they’re on, and the platform gives them the matching addresses.`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`what-a-network-line-is`,children:`What a network line is`}),`\n`,_jsx(Mermaid,{chart:`flowchart LR\n subgraph IN[\"Internal network\"]\n U1[\"Internal-network user\"]\n end\n subgraph OUT[\"Public internet\"]\n U2[\"Public-internet user\"]\n end\n FW[\"Firewall / NAT\u003cbr/>public IP 203.0.113.10\"]\n P[\"Platform server\u003cbr/>192.168.10.8\"]\n\n U1 -- \"Line: internal network\u003cbr/>connects to 192.168.10.8\" --> P\n U2 -- \"Line: public internet\u003cbr/>connects to 203.0.113.10\" --> FW\n FW --> P`}),`\n`,_jsx(_components.p,{children:`Each line has two kinds of address:`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Address`}),_jsx(_components.th,{children:`Role`}),_jsx(_components.th,{children:`Ports`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Entry address`}),_jsx(_components.td,{children:`APIs, signaling, web access`}),_jsx(_components.td,{children:`443/TCP, 18883/TCP`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Media address`}),_jsx(_components.td,{children:`Audio and video`}),_jsx(_components.td,{children:`39001/UDP`})]})]})]}),`\n`,_jsxs(_components.p,{children:[`Usually there are two lines: `,_jsx(_components.strong,{children:`internal network`}),` and `,_jsx(_components.strong,{children:`public internet`}),`. You can configure more as needed (for example, a private network or another campus).`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`what-to-prepare-at-deployment`,children:`What to prepare at deployment`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Addresses for each line`}),`: the internal-network line uses the server’s internal address; the public-internet line uses the public IP or domain mapped out by the firewall`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Firewall mapping`}),`: map the public-internet line’s 443/TCP, 18883/TCP, and 39001/UDP to the platform server, `,_jsx(_components.strong,{children:`keeping the same port numbers`})]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Domain and certificate`}),`: the internal network and the public internet usually use different access addresses, and the certificate must cover the domain users actually access`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Choose the network mode in the installer`}),`: internal network only, public internet only, or both. After installation, you can view and change each line’s entry address under `,_jsx(_components.strong,{children:`System configuration → Network`}),` in the admin console`]}),`\n`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Watch out for data centers whose inbound and outbound IPs differ`}),`: in many data centers, the public IP users come in through isn’t the IP the server uses to go out.\nIn that case you must explicitly set the public-internet line’s media address to `,_jsx(_components.strong,{children:`the public IP users come in through`}),`; otherwise public-internet users can enter meetings but get no video or audio.`]})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`putting-users-on-the-right-line`,children:`Putting users on the right line`}),`\n`,_jsx(_components.p,{children:`The platform decides which set of addresses to give a user based on the “line” the user brings when entering the meeting. Your business system can do this in two ways:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Let users choose`}),`: the client lists “Internal network / Public internet” and users pick one`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Decide on the server automatically`}),`: based on the domain the user accessed, or whether the user’s IP is an internal address`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`If no line is specified, the default is `,_jsx(_components.strong,{children:`internal`}),`. For details and code examples, see the developer docs on `,_jsx(_components.a,{href:`/en/rtc/network-line`,children:`network lines`}),`.`]}),`\n`,_jsx(Tip,{children:_jsx(_components.p,{children:`If “internal-network users are fine, but users on the public internet can enter meetings with no video”, nine times out of ten the public-internet users are being treated as the internal-network line, or the public-internet line’s media address is wrong.`})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`relation-to-cross-domain-solutions`,children:`Relation to cross-domain solutions`}),`\n`,_jsxs(_components.p,{children:[`When internal and public networks are isolated by a `,_jsx(_components.strong,{children:`cross-domain solution (CDS)`}),` and firewall mapping isn’t possible, the public-internet line’s addresses must point to the tunnel gateway on the outer side of the CDS;\nsee `,_jsx(_components.a,{href:`/en/product/deploy/optical-gap`,children:`Access across a cross-domain solution`}),`.`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Internal network and public internet","description":"Deploying one self-hosted platform for internal and public-internet users: what network lines are, the entry and media addresses each line needs, pitfalls when a data center's inbound and outbound IPs differ, and how your business system puts users on the right line.","href":"/en/product/deploy/networks"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"What a network line is","slug":"what-a-network-line-is","depth":2,"children":[]},{"title":"What to prepare at deployment","slug":"what-to-prepare-at-deployment","depth":2,"children":[]},{"title":"Putting users on the right line","slug":"putting-users-on-the-right-line","depth":2,"children":[]},{"title":"Relation to cross-domain solutions","slug":"relation-to-cross-domain-solutions","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"freewind","siteName":"STMLink Docs","title":"Internal network and public internet - STMLink Docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{"zh":{"href":"/zh/product/deploy/networks","matchLevel":1},"en":{"href":"/en/product/deploy/networks","matchLevel":0}}},"lastModified":"2026-10-24T10:00:14.745Z","originalFileLocation":"en/product/deploy/networks.md","locale":"en"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Deploying one self-hosted platform for internal and public-internet users: what network lines are, the entry and media addresses each line needs, pitfalls when a data center\u0026#x27;s inbound and outbound IPs differ, and how your business system puts users on the right line.\">\u003cmeta data-mint-head name=\"application-name\" content=\"STMLink Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/freewind/ZKlibvJ7BVLSobx8/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/freewind/ZKlibvJ7BVLSobx8/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/freewind/ZKlibvJ7BVLSobx8/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/freewind/ZKlibvJ7BVLSobx8/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/freewind/ZKlibvJ7BVLSobx8/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/freewind/ZKlibvJ7BVLSobx8/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/freewind/ZKlibvJ7BVLSobx8/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/freewind/ZKlibvJ7BVLSobx8/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/freewind/ZKlibvJ7BVLSobx8/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Internal network and public internet - STMLink Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Deploying one self-hosted platform for internal and public-internet users: what network lines are, the entry and media addresses each line needs, pitfalls when a data center\u0026#x27;s inbound and outbound IPs differ, and how your business system puts users on the right line.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"STMLink Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.stmlink.com/en/product/deploy/networks\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://freewind.mintlify.app/_mintlify/api/og/v2?division=Self-hosted+deployment\u0026amp;title=Internal+network+and+public+internet\u0026amp;description=Deploying+one+self-hosted+platform+for+internal+and+public-internet+users%3A+what+network+lines+are%2C+the+entry+and+media+addresses+each+line+needs%2C+pitfalls+when+\u0026amp;theme=654b2206dad3993961863283\u0026amp;signature=4f6c124bd34421434594940f3041b252185a5692f06f87b111fdb417ff3de686\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Internal network and public internet - STMLink Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Deploying one self-hosted platform for internal and public-internet users: what network lines are, the entry and media addresses each line needs, pitfalls when a data center\u0026#x27;s inbound and outbound IPs differ, and how your business system puts users on the right line.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://freewind.mintlify.app/_mintlify/api/og/v2?division=Self-hosted+deployment\u0026amp;title=Internal+network+and+public+internet\u0026amp;description=Deploying+one+self-hosted+platform+for+internal+and+public-internet+users%3A+what+network+lines+are%2C+the+entry+and+media+addresses+each+line+needs%2C+pitfalls+when+\u0026amp;theme=654b2206dad3993961863283\u0026amp;signature=4f6c124bd34421434594940f3041b252185a5692f06f87b111fdb417ff3de686\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/freewind/ZKlibvJ7BVLSobx8/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"STMLink Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#0066FF\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.stmlink.com/en/product/deploy/networks\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/en/product/deploy/networks.md\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"en\" href=\"https://docs.stmlink.com/en/product/deploy/networks\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"zh\" href=\"https://docs.stmlink.com/zh/product/deploy/networks\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"x-default\" href=\"https://docs.stmlink.com/zh/product/deploy/networks\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.stmlink.com/#organization\",\"name\":\"STMLink Docs\",\"url\":\"https://docs.stmlink.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/freewind/-N23X1jpF3KMqIP_/logo/light.svg?fit=max\u0026auto=format\u0026n=-N23X1jpF3KMqIP_\u0026q=85\u0026s=c87be878176892b493466cf0647c68cc\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.stmlink.com#website\",\"name\":\"STMLink Docs\",\"url\":\"https://docs.stmlink.com\",\"publisher\":{\"@id\":\"https://docs.stmlink.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.stmlink.com/en/product/deploy/networks#webpage\",\"url\":\"https://docs.stmlink.com/en/product/deploy/networks\",\"name\":\"Internal network and public internet\",\"description\":\"Deploying one self-hosted platform for internal and public-internet users: what network lines are, the entry and media addresses each line needs, pitfalls when a data center's inbound and outbound IPs differ, and how your business system puts users on the right line.\",\"dateModified\":\"2026-10-24T10:00:14.745Z\",\"isPartOf\":{\"@id\":\"https://docs.stmlink.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.stmlink.com/en/product/deploy/networks#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.stmlink.com/en/product/deploy/networks#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Self-hosted deployment\",\"item\":\"https://docs.stmlink.com/en/product/deploy/architecture\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Internal network and public internet\",\"item\":\"https://docs.stmlink.com/en/product/deploy/networks\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.stmlink.com/en/product/deploy/networks#article\",\"headline\":\"Internal network and public internet\",\"name\":\"Internal network and public internet\",\"description\":\"Deploying one self-hosted platform for internal and public-internet users: what network lines are, the entry and media addresses each line needs, pitfalls when a data center's inbound and outbound IPs differ, and how your business system puts users on the right line.\",\"url\":\"https://docs.stmlink.com/en/product/deploy/networks\",\"mainEntityOfPage\":{\"@id\":\"https://docs.stmlink.com/en/product/deploy/networks#webpage\"},\"dateModified\":\"2026-10-24T10:00:14.745Z\",\"publisher\":{\"@id\":\"https://docs.stmlink.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.stmlink.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"STMLink Docs\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"STMLink Docs","nav":{"global":null,"languages":[{"language":"zh","pages":[{"title":"zh","href":"/zh/product/deploy/networks"}]},{"language":"en","footer":{"socials":{"website":"https://www.stmlink.com/en"},"links":[{"header":"Products","items":[{"label":"Website","href":"https://www.stmlink.com/en"},{"label":"SRTC Audio \u0026 Video SDK","href":"https://docs.stmlink.com/en/rtc/overview"},{"label":"SMeeting Conferencing SDK","href":"https://docs.stmlink.com/en/meeting/overview"}]},{"header":"Support","items":[{"label":"Contact us","href":"https://www.stmlink.com/en"}]}]},"tabs":[{"tab":"SRTC Audio \u0026 Video SDK","pages":[{"title":"SRTC Audio \u0026 Video SDK","href":"/en/rtc/overview"}]},{"tab":"SMeeting Conferencing SDK","pages":[{"title":"SMeeting Conferencing SDK","href":"/en/meeting/overview"}]},{"tab":"Product \u0026 deployment","groups":[{"group":"Overview","pages":[{"title":"Product overview","href":"/en/product/overview"},{"title":"Admin console features","href":"/en/product/admin-console"},{"title":"Try it online","href":"/en/product/demos"}]},{"group":"Room Connector","pages":[{"title":"Room Connector overview","sidebarTitle":"Overview","href":"/en/product/device-access/overview"},{"title":"SIP / H.323 endpoints","href":"/en/product/device-access/sip-h323"},{"title":"Connect phone lines","sidebarTitle":"Phone lines (SIP)","href":"/en/product/device-access/phone-lines"},{"title":"GB28181 cameras","href":"/en/product/device-access/gb28181"},{"title":"RTSP streams","href":"/en/product/device-access/rtsp"},{"title":"Room Connector FAQ","sidebarTitle":"FAQ","href":"/en/product/device-access/faq"}]},{"group":"Endpoint apps","pages":[{"title":"Soft SIP / H.323 endpoint","sidebarTitle":"Soft SIP / H.323 endpoint","href":"/en/product/terminals/softsip"},{"title":"STM Link Rooms (Android TV edition)","sidebarTitle":"STM Link Rooms (TV edition)","href":"/en/product/terminals/tv"}]},{"group":"Self-hosted deployment","pages":[{"title":"Components and architecture","href":"/en/product/deploy/architecture"},{"title":"Network and port requirements","description":"Ports a self-hosted deployment opens: client ports 443/TCP, 18883/TCP, 39001/UDP; device gateway SIP / H.323 / GB28181 ports and RTP range; multi-node and MCU live ports; ports never to expose; firewall commands. Use it for firewall change requests to network and security teams.","href":"/en/product/deploy/ports"},{"title":"Internal network and public internet","href":"/en/product/deploy/networks"},{"title":"Multiple nodes and nearest access","description":"Deploying when one media server isn't enough or users are spread across data centers and regions: how multiple media nodes share channels by load, how a meeting overflows to other nodes when its node is full, how users connect to the nearest node by server group, plus capacity settings, prerequisites, and limits. Read before planning high-concurrency or multi-region deployments.","href":"/en/product/deploy/multi-node"},{"title":"Access across a cross-domain solution","href":"/en/product/deploy/optical-gap"}]}]}]}]},"title":"Internal network and public internet - STMLink Docs","buildId":"dpl_EnxDqhjaNc9a8MVa833TGULPd9uJ","deploymentId":"dpl_EnxDqhjaNc9a8MVa833TGULPd9uJ","dynamics":[],"chunks":[]}