Route machine egress through a Shadowsocks proxy with template primitives.
Nullspace does not ship a first-class proxy product surface in private beta.
You can still build a template that starts a Shadowsocks client and points your
workload at the local SOCKS proxy.
Transparent egress requires root networking privileges inside the guest and is
best kept to dedicated templates. Use ss-redir and explicit iptables rules:
Prefer the local SOCKS variant unless you control the full template and have a
clear reason to intercept all TCP egress.Concept: Create. API reference:
buildTemplate, createMachine, and
execCommand.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Nullspace","description":"Nullspace is composable machines for AI agents: on-demand microVM compute that agents create, scale, pause, and fork.","colors":{"primary":"#1a1d23","light":"#d7dae0","dark":"#1a1d23"},"logo":{"light":"https://mintcdn.com/catamaranresearch/IKCWYZugMKgGJaLI/images/logo-light.svg?fit=max\u0026auto=format\u0026n=IKCWYZugMKgGJaLI\u0026q=85\u0026s=fbbc2f6e5c18d0cc912d4eb6bd3af8ca","dark":"https://mintcdn.com/catamaranresearch/IKCWYZugMKgGJaLI/images/logo-dark.svg?fit=max\u0026auto=format\u0026n=IKCWYZugMKgGJaLI\u0026q=85\u0026s=45090618928ba93bf1541f1237343216"},"favicon":"https://mintcdn.com/catamaranresearch/Nr4-Qd7vJxaLolgu/images/favicon.svg?fit=max\u0026auto=format\u0026n=Nr4-Qd7vJxaLolgu\u0026q=85\u0026s=af5b7478b24f7fa69691fdc785300537","api":{"openapi":"openapi.yaml","playground":{"display":"interactive","proxy":true},"examples":{"defaults":"required","languages":["python","curl"],"prefill":true,"autogenerate":true},"url":"full"},"appearance":{"default":"system"},"background":{"color":{"light":"#fafafa","dark":"#121212"}},"navbar":{"links":[{"href":"https://github.com/catamaran-research/nullspace","type":"github"}]},"footer":{"socials":{"github":"https://github.com/catamaran-research/nullspace"}},"search":{"prompt":"Search Nullspace docs"},"seo":{"indexing":"navigable"},"fonts":{"heading":{"family":"JetBrains Mono"}},"icons":{"library":"lucide"},"styling":{"codeblocks":{"theme":{"light":"one-light","dark":"one-dark-pro"}},"latex":false},"contextual":{"options":["copy","assistant","chatgpt","claude","cursor","vscode","mcp"],"display":"header"},"thumbnails":{"appearance":"dark","background":"https://mintcdn.com/catamaranresearch/bD-Cd21B2-kH3wuD/images/og-card.svg?fit=max\u0026auto=format\u0026n=bD-Cd21B2-kH3wuD\u0026q=85\u0026s=c0f0e8a21a89402d5babb5b32aaf4786"},"interaction":{"drilldown":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"catamaranresearch","hasAudioNarration":false,"actualSubdomain":"catamaranresearch","customDomains":["docs.ns.rocks"],"gitSource":{"type":"github","owner":"catamaran-hq","repo":"nullspace","deployBranch":"main","contentDirectory":"docs/site","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6a3822b512441f3b9589a265","collectionId":"7fc4efa0-bd9b-434b-a45f-b0aeb2b88e14","schemaVersion":"v3"},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6a3822b512441f3b9589a265:success","clientVersion":"0.0.4006","searchFilterCounts":[{"language":"default","tag":"API Reference","count":258},{"language":"default","tag":"Endpoints","count":256},{"language":"default","tag":"Documentation","count":95},{"language":"default","tag":"Templates","count":62},{"language":"default","tag":"Machines","count":51},{"language":"default","tag":"Reference","count":48},{"language":"default","tag":"Volumes","count":42},{"language":"default","tag":"Desktop","count":38},{"language":"default","tag":"Agent Deployments","count":23},{"language":"default","tag":"Files","count":23}]},"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":"editor-v7-file-tree","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":"pause-universal-search-reconcile","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":"per-site-search-delta","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":"editor-private-page-search","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":"editor-nav-generations","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":"editor-agent-model-picker","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":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":true},"customCss":[],"page":{"pagePath":"guides/proxy-tunneling","slug":"/guides/proxy-tunneling","pageMetadata":{"title":"Tunnel Egress Through Your Own Proxy","description":"Route machine egress through a Shadowsocks proxy with template primitives.","href":"/guides/proxy-tunneling"},"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: \"Route machine egress through a Shadowsocks proxy with template primitives.\"\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`,code:`code`,p:`p`,pre:`pre`,span:`span`,..._provideComponents(),...props.components},{CodeBlock,Heading}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`Nullspace does not ship a first-class proxy product surface in private beta.\nYou can still build a template that starts a Shadowsocks client and points your\nworkload at the local SOCKS proxy.`}),`\n`,_jsx(Heading,{level:`2`,id:`local-socks-proxy`,children:`Local SOCKS proxy`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`20`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes one-light one-dark-pro`,style:{backgroundColor:`#FAFAFA`,\"--shiki-dark-bg\":`#282c34`,color:`#383A42`,\"--shiki-dark\":`#abb2bf`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`20`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#A626A4`,\"--shiki-dark\":`#C678DD`},children:`from`}),_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#ABB2BF`},children:` nullspace `}),_jsx(_components.span,{style:{color:`#A626A4`,\"--shiki-dark\":`#C678DD`},children:`import`}),_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#ABB2BF`},children:` Machine, Template, wait_for_port`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#ABB2BF`},children:`builder `}),_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#56B6C2`},children:`=`}),_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#ABB2BF`},children:` (`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#ABB2BF`},children:` Template.`}),_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#61AFEF`},children:`from_ubuntu_image`}),_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#ABB2BF`},children:`(`}),_jsx(_components.span,{style:{color:`#50A14F`,\"--shiki-dark\":`#98C379`},children:`\"22.04\"`}),_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#ABB2BF`},children:`)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#ABB2BF`},children:` .`}),_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#61AFEF`},children:`apt_install`}),_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#ABB2BF`},children:`([`}),_jsx(_components.span,{style:{color:`#50A14F`,\"--shiki-dark\":`#98C379`},children:`\"shadowsocks-libev\"`}),_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#ABB2BF`},children:`, `}),_jsx(_components.span,{style:{color:`#50A14F`,\"--shiki-dark\":`#98C379`},children:`\"curl\"`}),_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#ABB2BF`},children:`, `}),_jsx(_components.span,{style:{color:`#50A14F`,\"--shiki-dark\":`#98C379`},children:`\"ca-certificates\"`}),_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#ABB2BF`},children:`])`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#ABB2BF`},children:` .`}),_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#61AFEF`},children:`set_runtime_envs`}),_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#ABB2BF`},children:`(`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#ABB2BF`},children:` Machine.`}),_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#61AFEF`},children:`enable_tunnel`}),_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#ABB2BF`},children:`(`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#50A14F`,\"--shiki-dark\":`#98C379`},children:` \"proxy.example.com\"`}),_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#ABB2BF`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#50A14F`,\"--shiki-dark\":`#98C379`},children:` \"change-me\"`}),_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#ABB2BF`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#986801`,\"--shiki-light-font-style\":`inherit`,\"--shiki-dark\":`#E06C75`,\"--shiki-dark-font-style\":`italic`},children:` port`}),_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#56B6C2`},children:`=`}),_jsx(_components.span,{style:{color:`#986801`,\"--shiki-dark\":`#D19A66`},children:`8388`}),_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#ABB2BF`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#986801`,\"--shiki-light-font-style\":`inherit`,\"--shiki-dark\":`#E06C75`,\"--shiki-dark-font-style\":`italic`},children:` method`}),_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#56B6C2`},children:`=`}),_jsx(_components.span,{style:{color:`#50A14F`,\"--shiki-dark\":`#98C379`},children:`\"aes-256-gcm\"`}),_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#ABB2BF`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#986801`,\"--shiki-light-font-style\":`inherit`,\"--shiki-dark\":`#E06C75`,\"--shiki-dark-font-style\":`italic`},children:` mode`}),_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#56B6C2`},children:`=`}),_jsx(_components.span,{style:{color:`#50A14F`,\"--shiki-dark\":`#98C379`},children:`\"socks5\"`}),_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#ABB2BF`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#ABB2BF`},children:` )`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#ABB2BF`},children:` )`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#ABB2BF`},children:` .`}),_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#61AFEF`},children:`set_start_cmd`}),_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#ABB2BF`},children:`(`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#50A14F`,\"--shiki-dark\":`#98C379`},children:` \"ss-local -s $SS_SERVER -p $SS_SERVER_PORT \"`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#50A14F`,\"--shiki-dark\":`#98C379`},children:` \"-k $SS_PASSWORD -m $SS_METHOD -b 127.0.0.1 -l 1080\"`}),_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#ABB2BF`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#986801`,\"--shiki-light-font-style\":`inherit`,\"--shiki-dark\":`#E06C75`,\"--shiki-dark-font-style\":`italic`},children:` readiness`}),_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#56B6C2`},children:`=`}),_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#61AFEF`},children:`wait_for_port`}),_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#ABB2BF`},children:`(`}),_jsx(_components.span,{style:{color:`#986801`,\"--shiki-dark\":`#D19A66`},children:`1080`}),_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#ABB2BF`},children:`),`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#ABB2BF`},children:` )`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#ABB2BF`},children:`)`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Applications can then use `,_jsx(_components.code,{children:`socks5h://127.0.0.1:1080`}),`:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`9`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes one-light one-dark-pro`,style:{backgroundColor:`#FAFAFA`,\"--shiki-dark-bg\":`#282c34`,color:`#383A42`,\"--shiki-dark\":`#abb2bf`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`9`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#ABB2BF`},children:`machine `}),_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#56B6C2`},children:`=`}),_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#ABB2BF`},children:` Machine.`}),_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#61AFEF`},children:`create`}),_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#ABB2BF`},children:`(`}),_jsx(_components.span,{style:{color:`#986801`,\"--shiki-light-font-style\":`inherit`,\"--shiki-dark\":`#E06C75`,\"--shiki-dark-font-style\":`italic`},children:`template`}),_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#56B6C2`},children:`=`}),_jsx(_components.span,{style:{color:`#50A14F`,\"--shiki-dark\":`#98C379`},children:`\"my-proxy-template\"`}),_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#ABB2BF`},children:`)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#A626A4`,\"--shiki-dark\":`#C678DD`},children:`try`}),_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#ABB2BF`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#ABB2BF`},children:` result `}),_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#56B6C2`},children:`=`}),_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#ABB2BF`},children:` machine.commands.`}),_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#61AFEF`},children:`run`}),_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#ABB2BF`},children:`(`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#50A14F`,\"--shiki-dark\":`#98C379`},children:` \"curl --socks5-hostname 127.0.0.1:1080 https://ifconfig.me\"`}),_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#ABB2BF`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#986801`,\"--shiki-light-font-style\":`inherit`,\"--shiki-dark\":`#E06C75`,\"--shiki-dark-font-style\":`italic`},children:` shell`}),_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#56B6C2`},children:`=`}),_jsx(_components.span,{style:{color:`#986801`,\"--shiki-dark\":`#D19A66`},children:`True`}),_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#ABB2BF`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#ABB2BF`},children:` )`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0184BC`,\"--shiki-dark\":`#56B6C2`},children:` print`}),_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#ABB2BF`},children:`(result.stdout.`}),_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#61AFEF`},children:`strip`}),_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#ABB2BF`},children:`())`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#A626A4`,\"--shiki-dark\":`#C678DD`},children:`finally`}),_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#ABB2BF`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#ABB2BF`},children:` machine.`}),_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#61AFEF`},children:`kill`}),_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#ABB2BF`},children:`()`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`transparent-proxy-variant`,children:`Transparent proxy variant`}),`\n`,_jsxs(_components.p,{children:[`Transparent egress requires root networking privileges inside the guest and is\nbest kept to dedicated templates. Use `,_jsx(_components.code,{children:`ss-redir`}),` and explicit `,_jsx(_components.code,{children:`iptables`}),` rules:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`11`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes one-light one-dark-pro`,style:{backgroundColor:`#FAFAFA`,\"--shiki-dark-bg\":`#282c34`,color:`#383A42`,\"--shiki-dark\":`#abb2bf`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`11`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#ABB2BF`},children:`builder `}),_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#56B6C2`},children:`=`}),_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#ABB2BF`},children:` (`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#ABB2BF`},children:` Template.`}),_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#61AFEF`},children:`from_ubuntu_image`}),_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#ABB2BF`},children:`(`}),_jsx(_components.span,{style:{color:`#50A14F`,\"--shiki-dark\":`#98C379`},children:`\"22.04\"`}),_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#ABB2BF`},children:`)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#ABB2BF`},children:` .`}),_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#61AFEF`},children:`apt_install`}),_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#ABB2BF`},children:`([`}),_jsx(_components.span,{style:{color:`#50A14F`,\"--shiki-dark\":`#98C379`},children:`\"shadowsocks-libev\"`}),_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#ABB2BF`},children:`, `}),_jsx(_components.span,{style:{color:`#50A14F`,\"--shiki-dark\":`#98C379`},children:`\"iptables\"`}),_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#ABB2BF`},children:`, `}),_jsx(_components.span,{style:{color:`#50A14F`,\"--shiki-dark\":`#98C379`},children:`\"ca-certificates\"`}),_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#ABB2BF`},children:`])`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#ABB2BF`},children:` .`}),_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#61AFEF`},children:`set_runtime_envs`}),_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#ABB2BF`},children:`(Machine.`}),_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#61AFEF`},children:`enable_tunnel`}),_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#ABB2BF`},children:`(`}),_jsx(_components.span,{style:{color:`#50A14F`,\"--shiki-dark\":`#98C379`},children:`\"proxy.example.com\"`}),_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#ABB2BF`},children:`, `}),_jsx(_components.span,{style:{color:`#50A14F`,\"--shiki-dark\":`#98C379`},children:`\"change-me\"`}),_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#ABB2BF`},children:`))`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#ABB2BF`},children:` .`}),_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#61AFEF`},children:`set_start_cmd`}),_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#ABB2BF`},children:`(`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#50A14F`,\"--shiki-dark\":`#98C379`},children:` \"ss-redir -s $SS_SERVER -p $SS_SERVER_PORT -k $SS_PASSWORD \"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#50A14F`,\"--shiki-dark\":`#98C379`},children:` \"-m $SS_METHOD -b 127.0.0.1 -l 1081 \u0026 \"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#50A14F`,\"--shiki-dark\":`#98C379`},children:` \"iptables -t nat -A OUTPUT -p tcp -m owner ! --uid-owner root \"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#50A14F`,\"--shiki-dark\":`#98C379`},children:` \"-j REDIRECT --to-ports 1081 \u0026\u0026 tail -f /dev/null\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#ABB2BF`},children:` )`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#383A42`,\"--shiki-dark\":`#ABB2BF`},children:`)`})}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Prefer the local SOCKS variant unless you control the full template and have a\nclear reason to intercept all TCP egress.`}),`\n`,_jsxs(_components.p,{children:[`Concept: `,_jsx(_components.a,{href:`/concepts/create`,children:`Create`}),`. API reference:\n`,_jsx(_components.a,{href:`/api-reference`,children:`buildTemplate`}),`, `,_jsx(_components.a,{href:`/api-reference`,children:`createMachine`}),`, and\n`,_jsx(_components.a,{href:`/api-reference`,children:`execCommand`}),`.`]})]})}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":{"codeStyling":{"theme":{"light":"one-light","dark":"one-dark-pro"}},"config":{},"pageMetadata":{"title":"Tunnel Egress Through Your Own Proxy","description":"Route machine egress through a Shadowsocks proxy with template primitives.","href":"/guides/proxy-tunneling"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Local SOCKS proxy","slug":"local-socks-proxy","depth":2,"children":[]},{"title":"Transparent proxy variant","slug":"transparent-proxy-variant","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"catamaranresearch","siteName":"Nullspace","title":"Tunnel Egress Through Your Own Proxy - Nullspace","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-06-21T17:43:48.386Z","originalFileLocation":"guides/proxy-tunneling.mdx"},"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=\"Route machine egress through a Shadowsocks proxy with template primitives.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Nullspace\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/catamaranresearch/u9xmdi3i1cKfEW81/_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/catamaranresearch/u9xmdi3i1cKfEW81/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/catamaranresearch/u9xmdi3i1cKfEW81/_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/catamaranresearch/u9xmdi3i1cKfEW81/_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/catamaranresearch/u9xmdi3i1cKfEW81/_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/catamaranresearch/u9xmdi3i1cKfEW81/_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/catamaranresearch/u9xmdi3i1cKfEW81/_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/catamaranresearch/u9xmdi3i1cKfEW81/_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/catamaranresearch/u9xmdi3i1cKfEW81/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Tunnel Egress Through Your Own Proxy - Nullspace\">\u003cmeta data-mint-head property=\"og:description\" content=\"Route machine egress through a Shadowsocks proxy with template primitives.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Nullspace\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.ns.rocks/guides/proxy-tunneling\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://catamaranresearch.mintlify.app/_mintlify/api/og/v2?division=Networking\u0026amp;title=Tunnel+Egress+Through+Your+Own+Proxy\u0026amp;description=Route+machine+egress+through+a+Shadowsocks+proxy+with+template+primitives.\u0026amp;theme=09658a1c05675b16b601ee5f\u0026amp;signature=01545a8c247d43de52cf95f3a9e98d859f8e41727d012e39c15a3aa98570b6b5\">\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=\"Tunnel Egress Through Your Own Proxy - Nullspace\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Route machine egress through a Shadowsocks proxy with template primitives.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://catamaranresearch.mintlify.app/_mintlify/api/og/v2?division=Networking\u0026amp;title=Tunnel+Egress+Through+Your+Own+Proxy\u0026amp;description=Route+machine+egress+through+a+Shadowsocks+proxy+with+template+primitives.\u0026amp;theme=09658a1c05675b16b601ee5f\u0026amp;signature=01545a8c247d43de52cf95f3a9e98d859f8e41727d012e39c15a3aa98570b6b5\">\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/catamaranresearch/u9xmdi3i1cKfEW81/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Nullspace\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#1a1d23\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.ns.rocks/guides/proxy-tunneling\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/guides/proxy-tunneling.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.ns.rocks/#organization\",\"name\":\"Nullspace\",\"url\":\"https://docs.ns.rocks\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/catamaranresearch/IKCWYZugMKgGJaLI/images/logo-light.svg?fit=max\u0026auto=format\u0026n=IKCWYZugMKgGJaLI\u0026q=85\u0026s=fbbc2f6e5c18d0cc912d4eb6bd3af8ca\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.ns.rocks#website\",\"name\":\"Nullspace\",\"url\":\"https://docs.ns.rocks\",\"publisher\":{\"@id\":\"https://docs.ns.rocks/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.ns.rocks/guides/proxy-tunneling#webpage\",\"url\":\"https://docs.ns.rocks/guides/proxy-tunneling\",\"name\":\"Tunnel Egress Through Your Own Proxy\",\"description\":\"Route machine egress through a Shadowsocks proxy with template primitives.\",\"dateModified\":\"2026-06-21T17:43:48.386Z\",\"isPartOf\":{\"@id\":\"https://docs.ns.rocks#website\"},\"breadcrumb\":{\"@id\":\"https://docs.ns.rocks/guides/proxy-tunneling#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.ns.rocks/guides/proxy-tunneling#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Networking\",\"item\":\"https://docs.ns.rocks/networking/overview\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Tunnel Egress Through Your Own Proxy\",\"item\":\"https://docs.ns.rocks/guides/proxy-tunneling\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.ns.rocks/guides/proxy-tunneling#article\",\"headline\":\"Tunnel Egress Through Your Own Proxy\",\"name\":\"Tunnel Egress Through Your Own Proxy\",\"description\":\"Route machine egress through a Shadowsocks proxy with template primitives.\",\"url\":\"https://docs.ns.rocks/guides/proxy-tunneling\",\"mainEntityOfPage\":{\"@id\":\"https://docs.ns.rocks/guides/proxy-tunneling#webpage\"},\"dateModified\":\"2026-06-21T17:43:48.386Z\",\"publisher\":{\"@id\":\"https://docs.ns.rocks/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.ns.rocks#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Nullspace\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Nullspace","nav":{"global":null,"tabs":[{"tab":"Documentation","icon":"book-open","groups":[{"group":"Get started","icon":"rocket","pages":[{"title":"Welcome to Nullspace","sidebarTitle":"Welcome","href":"/introduction"},{"title":"Build","href":"/build"},{"title":"First Machine","href":"/quickstarts/first-machine"},{"title":"Development Environment","href":"/quickstarts/development-environment"},{"title":"Recipes","href":"/quickstarts/recipes"},{"title":"Self-Hosted Single-Host","href":"/quickstarts/self-hosted-single-host"}]},{"group":"Machines","icon":"box","pages":[{"title":"Machines","href":"/machines/overview"},{"title":"Create, Connect, And List Machines","href":"/machines/create-connect-list"},{"title":"Machine Lifecycle","href":"/machines/lifecycle"},{"group":"Lifecycle primitives","pages":[{"title":"Create","href":"/concepts/create"},{"title":"Exec","href":"/concepts/exec"},{"title":"Hibernate","href":"/concepts/hibernate"},{"title":"Resume","href":"/concepts/resume"},{"title":"Fork","href":"/concepts/fork"},{"title":"Destroy","href":"/concepts/destroy"}]},{"title":"Persistence","href":"/machines/persistence"},{"title":"Auto-Resume","href":"/machines/auto-resume"},{"title":"Snapshots","href":"/machines/snapshots"},{"title":"Fork","href":"/machines/fork"},{"title":"Metrics And Timeouts","href":"/machines/metrics-timeouts"}]},{"group":"Commands","icon":"terminal","pages":[{"title":"Commands","href":"/commands/overview"},{"title":"Streaming Command Output","href":"/commands/streaming"},{"title":"Run commands in background","href":"/commands/background"},{"title":"Processes","href":"/commands/processes"}]},{"group":"Filesystem","icon":"folder-open","pages":[{"title":"Filesystem","href":"/filesystem"},{"title":"Uploads","href":"/filesystem/uploads"},{"title":"Downloads","href":"/filesystem/downloads"},{"title":"Search, Replace, And Watch","href":"/filesystem/search-watch"}]},{"group":"Code Interpreter","icon":"square-terminal","pages":[{"title":"Code Interpreter","href":"/code-interpreter/overview"},{"title":"Overview","href":"/code-interpreter/analyze-data"},{"title":"Pre-installed libraries","href":"/code-interpreter/pre-installed-libraries"},{"group":"Charts and visualizations","pages":[{"title":"Overview","href":"/code-interpreter/charts-overview"},{"title":"Static charts","href":"/code-interpreter/static-charts"},{"title":"Interactive charts","href":"/code-interpreter/interactive-charts"}]},{"title":"Streaming Code Output","href":"/code-interpreter/streaming"},{"title":"Code Contexts","href":"/code-interpreter/contexts"},{"title":"Runs And Artifacts","href":"/code-interpreter/runs-artifacts"},{"group":"Supported languages","pages":[{"title":"Overview","href":"/code-interpreter/languages-overview"},{"title":"Python","href":"/code-interpreter/language-python"},{"title":"JavaScript And TypeScript","href":"/code-interpreter/language-javascript-typescript"},{"title":"R","href":"/code-interpreter/language-r"},{"title":"Java","href":"/code-interpreter/language-java"},{"title":"Bash","href":"/code-interpreter/language-bash"}]}]},{"group":"Desktop","icon":"monitor","pages":[{"title":"Desktop Environments","href":"/desktop/overview"},{"title":"Desktop Automation","href":"/desktop/automation"},{"title":"Managed Desktop Viewer","href":"/desktop/viewer"},{"title":"Desktop Recordings","href":"/desktop/recordings"}]},{"group":"Templates","icon":"layers","pages":[{"title":"Templates","href":"/templates/overview"},{"title":"Quickstart","href":"/templates/quickstart"},{"title":"How it works","href":"/templates/how-it-works"},{"group":"Author templates","pages":[{"title":"Defining template","href":"/templates/defining"},{"title":"Base image","href":"/templates/base-images"},{"title":"Private registries","href":"/templates/private-registries"},{"title":"User and workdir","href":"/templates/user-workdir"},{"title":"Start \u0026 ready commands","href":"/templates/start-ready"},{"title":"Choose A Per-Template Kernel","href":"/guides/template-kernel-selection"}]},{"group":"Build and operate","pages":[{"title":"Build","href":"/templates/build"},{"title":"Caching","href":"/templates/caching"},{"title":"Logging","href":"/templates/logging"},{"title":"Error handling","href":"/templates/errors"},{"title":"Names","href":"/templates/names"},{"title":"Tags \u0026 versioning","href":"/templates/tags-versioning"},{"title":"Template Warm Pools","href":"/templates/warm-pools"}]}]},{"group":"Volumes","icon":"hard-drive","pages":[{"title":"Volumes","href":"/volumes/overview"},{"title":"Managing volumes","href":"/volumes/managing-volumes"},{"title":"Mounting volumes","href":"/volumes/mounting-volumes"},{"title":"Read \u0026 write","href":"/volumes/read-write"},{"title":"Direct Volume Files","href":"/volumes/files"},{"title":"File \u0026 directory metadata","href":"/volumes/file-directory-metadata"},{"group":"Transfer data","pages":[{"title":"Upload data","href":"/volumes/upload-data"},{"title":"Download data","href":"/volumes/download-data"},{"title":"Volume Transfers","href":"/volumes/transfers"}]}]},{"group":"Networking","icon":"globe","pages":[{"title":"Networking And Security","href":"/networking/overview"},{"title":"API Keys","href":"/guides/api-keys"},{"title":"Preview URLs","href":"/networking/preview-urls"},{"title":"Custom Preview Proxy","href":"/networking/custom-preview-proxy"},{"title":"Token Model","href":"/networking/token-model"},{"title":"Access Control","href":"/networking/access-control"},{"title":"WebSockets","href":"/networking/websockets"},{"title":"Share A Preview URL","description":"Expose a machine port through a signed temporary preview URL.","href":"/guides/share-machine-url"},{"title":"Tunnel Egress Through Your Own Proxy","href":"/guides/proxy-tunneling"},{"title":"Mount An S3/GCS/R2 Bucket","description":"Mount cloud buckets inside machines with FUSE-based tools.","href":"/guides/mount-bucket"}]},{"group":"Interactive access","icon":"plug","pages":[{"title":"Access Overview","href":"/access/overview"},{"title":"PTY Sessions","href":"/access/pty"},{"title":"SSH Access","href":"/access/ssh"},{"title":"Debug Retained Machines","href":"/access/debug-retained-machines"},{"group":"CLI workflows","pages":[{"title":"Connect To Machine","href":"/cli/connect-to-machine"},{"title":"Create Machine","href":"/cli/create-machine"},{"title":"Execute Commands In Machine","href":"/cli/execute-commands"},{"title":"Manage Files","href":"/cli/manage-files"},{"title":"Shutdown Running Machines","href":"/cli/shutdown-running-machines"}]}]},{"group":"Observability","icon":"activity","pages":[{"title":"Observability","href":"/observability/overview"},{"title":"Lifecycle Events","href":"/observability/lifecycle-events"},{"title":"Lifecycle Webhooks","href":"/observability/webhooks"},{"title":"Monitor Stream","href":"/observability/monitor"}]}]},{"tab":"Examples","icon":"code","pages":[{"title":"Examples","href":"/examples"}]},{"tab":"Agents","icon":"bot","pages":[{"title":"Agents","href":"/agents/overview"}]},{"tab":"Reference","icon":"terminal","pages":[{"title":"Reference","href":"/sdk-reference"}]},{"tab":"API Reference","icon":"braces","pages":[{"title":"API Reference","href":"/api-reference"}]}]},"title":"Tunnel Egress Through Your Own Proxy - Nullspace","buildId":"dpl_2xiSHD9XEvLsPGPcfoMtkLTB3dy9","deploymentId":"dpl_2xiSHD9XEvLsPGPcfoMtkLTB3dy9","dynamics":[],"chunks":[]}