Skip to content

Commit dd68246

Browse files
author
docs-bot
committed
docs: update from source@2da0d77
1 parent f001ee8 commit dd68246

10 files changed

Lines changed: 135 additions & 31 deletions

‎docs/cool-things-you-can-do.html‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
<link rel="apple-touch-icon" href="/favicon.ico">
2424
<link rel="stylesheet" href="/assets/css/site.css?v=b310d7c992">
2525
<link rel="stylesheet" href="/assets/css/main.css?v=ccd72260b9">
26-
<script type="application/ld+json">[{"@context": "https://schema.org", "@type": "TechArticle", "headline": "Cool things you can do", "description": "Two recipes: a mobile server behind Tailscale, UFW and Fail2Ban, and Docker running nested inside a Droidspaces container.", "url": "https://www.droidspaces.org/docs/cool-things-you-can-do.html", "inLanguage": "en", "dateModified": "2026-09-28", "author": {"@type": "Organization", "name": "Droidspaces", "url": "https://www.droidspaces.org/", "sameAs": ["https://github.com/ravindu644/Droidspaces-OSS", "https://t.me/Droidspaces"]}, "publisher": {"@type": "Organization", "name": "Droidspaces", "url": "https://www.droidspaces.org/", "sameAs": ["https://github.com/ravindu644/Droidspaces-OSS", "https://t.me/Droidspaces"]}, "isPartOf": {"@type": "WebSite", "name": "Droidspaces", "url": "https://www.droidspaces.org/"}}, {"@context": "https://schema.org", "@type": "BreadcrumbList", "itemListElement": [{"@type": "ListItem", "position": 1, "name": "Home", "item": "https://www.droidspaces.org/"}, {"@type": "ListItem", "position": 2, "name": "Documentation", "item": "https://www.droidspaces.org/docs/"}, {"@type": "ListItem", "position": 3, "name": "Cool things you can do", "item": "https://www.droidspaces.org/docs/cool-things-you-can-do.html"}]}]</script>
26+
<script type="application/ld+json">[{"@context": "https://schema.org", "@type": "TechArticle", "headline": "Cool things you can do", "description": "Two recipes: a mobile server behind Tailscale, UFW and Fail2Ban, and Docker running nested inside a Droidspaces container.", "url": "https://www.droidspaces.org/docs/cool-things-you-can-do.html", "inLanguage": "en", "dateModified": "2026-10-03", "author": {"@type": "Organization", "name": "Droidspaces", "url": "https://www.droidspaces.org/", "sameAs": ["https://github.com/ravindu644/Droidspaces-OSS", "https://t.me/Droidspaces"]}, "publisher": {"@type": "Organization", "name": "Droidspaces", "url": "https://www.droidspaces.org/", "sameAs": ["https://github.com/ravindu644/Droidspaces-OSS", "https://t.me/Droidspaces"]}, "isPartOf": {"@type": "WebSite", "name": "Droidspaces", "url": "https://www.droidspaces.org/"}}, {"@context": "https://schema.org", "@type": "BreadcrumbList", "itemListElement": [{"@type": "ListItem", "position": 1, "name": "Home", "item": "https://www.droidspaces.org/"}, {"@type": "ListItem", "position": 2, "name": "Documentation", "item": "https://www.droidspaces.org/docs/"}, {"@type": "ListItem", "position": 3, "name": "Cool things you can do", "item": "https://www.droidspaces.org/docs/cool-things-you-can-do.html"}]}]</script>
2727
<script>(function(){const t=localStorage.getItem('theme');if(t)document.documentElement.setAttribute('data-theme',t);})();</script>
2828
</head>
2929
<body>
@@ -179,10 +179,10 @@ <h3 id="step-3-set-up-tailscale">Step 3: Set up Tailscale <a class="header-ancho
179179
</ol>
180180
<hr />
181181
<h3 id="step-4-secure-the-container-with-ufw-firewall">Step 4: Secure the container with UFW (firewall) <a class="header-anchor" href="#step-4-secure-the-container-with-ufw-firewall">#</a></h3>
182-
<p>Droidspaces NAT mode currently supports IPv4 only, so disable IPv6 in UFW to avoid initialization errors.</p>
182+
<p>NAT mode is dual-stack, so UFW can manage IPv6 as well. Skip the first step unless the container runs with <code>--disable-ipv6</code>, in which case UFW fails to initialise its IPv6 rules.</p>
183183
<ol>
184184
<li>
185-
<p><strong>Disable IPv6 in UFW</strong>:</p>
185+
<p><strong>Disable IPv6 in UFW</strong> (only with <code>--disable-ipv6</code>):</p>
186186
<div class="code-block"><span class="code-lang">bash</span><button class="icon-button copy-btn" onclick="copyCode(this)" aria-label="Copy"><span class="icon" aria-hidden="true">content_copy</span></button><pre><code>sed<span class="w"> </span>-i<span class="w"> </span><span class="s1">&#39;s/IPV6=yes/IPV6=no/&#39;</span><span class="w"> </span>/etc/default/ufw
187187
</code></pre></div>
188188
</li>

‎docs/features.html‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
<link rel="apple-touch-icon" href="/favicon.ico">
2424
<link rel="stylesheet" href="/assets/css/site.css?v=b310d7c992">
2525
<link rel="stylesheet" href="/assets/css/main.css?v=ccd72260b9">
26-
<script type="application/ld+json">[{"@context": "https://schema.org", "@type": "TechArticle", "headline": "Feature deep dives", "description": "How each Droidspaces feature works: namespace isolation, init system support, OverlayFS volatile mode, GPU acceleration, cgroup isolation, seccomp shields, and Android-specific tuning.", "url": "https://www.droidspaces.org/docs/features.html", "inLanguage": "en", "dateModified": "2026-10-01", "author": {"@type": "Organization", "name": "Droidspaces", "url": "https://www.droidspaces.org/", "sameAs": ["https://github.com/ravindu644/Droidspaces-OSS", "https://t.me/Droidspaces"]}, "publisher": {"@type": "Organization", "name": "Droidspaces", "url": "https://www.droidspaces.org/", "sameAs": ["https://github.com/ravindu644/Droidspaces-OSS", "https://t.me/Droidspaces"]}, "isPartOf": {"@type": "WebSite", "name": "Droidspaces", "url": "https://www.droidspaces.org/"}}, {"@context": "https://schema.org", "@type": "BreadcrumbList", "itemListElement": [{"@type": "ListItem", "position": 1, "name": "Home", "item": "https://www.droidspaces.org/"}, {"@type": "ListItem", "position": 2, "name": "Documentation", "item": "https://www.droidspaces.org/docs/"}, {"@type": "ListItem", "position": 3, "name": "Feature deep dives", "item": "https://www.droidspaces.org/docs/features.html"}]}]</script>
26+
<script type="application/ld+json">[{"@context": "https://schema.org", "@type": "TechArticle", "headline": "Feature deep dives", "description": "How each Droidspaces feature works: namespace isolation, init system support, OverlayFS volatile mode, GPU acceleration, cgroup isolation, seccomp shields, and Android-specific tuning.", "url": "https://www.droidspaces.org/docs/features.html", "inLanguage": "en", "dateModified": "2026-10-03", "author": {"@type": "Organization", "name": "Droidspaces", "url": "https://www.droidspaces.org/", "sameAs": ["https://github.com/ravindu644/Droidspaces-OSS", "https://t.me/Droidspaces"]}, "publisher": {"@type": "Organization", "name": "Droidspaces", "url": "https://www.droidspaces.org/", "sameAs": ["https://github.com/ravindu644/Droidspaces-OSS", "https://t.me/Droidspaces"]}, "isPartOf": {"@type": "WebSite", "name": "Droidspaces", "url": "https://www.droidspaces.org/"}}, {"@context": "https://schema.org", "@type": "BreadcrumbList", "itemListElement": [{"@type": "ListItem", "position": 1, "name": "Home", "item": "https://www.droidspaces.org/"}, {"@type": "ListItem", "position": 2, "name": "Documentation", "item": "https://www.droidspaces.org/docs/"}, {"@type": "ListItem", "position": 3, "name": "Feature deep dives", "item": "https://www.droidspaces.org/docs/features.html"}]}]</script>
2727
<script>(function(){const t=localStorage.getItem('theme');if(t)document.documentElement.setAttribute('data-theme',t);})();</script>
2828
</head>
2929
<body>
@@ -348,7 +348,8 @@ <h3 id="2-nat-mode---netnat">2. NAT mode (<code>--net=nat</code>) <a class="head
348348
<li><strong>Full isolation</strong>: The container cannot see or interact with the host's network interfaces directly.</li>
349349
<li><strong>Automatic uplink detection</strong>: No configuration needed. Droidspaces asks the kernel which interface provides internet access: on Android, the policy-routing rule netd installs for the active default network; on standard Linux, the main routing table's default route. CLAT (464xlat) interfaces on IPv6-only mobile networks are handled automatically.</li>
350350
</ul>
351-
<div class="callout callout-important"><strong class="callout-title">Important</strong><p>NAT mode is <strong>IPv4 only</strong>. If the host's uplink has no IPv4 address (IPv6-only network), internet access will not work.</p></div>
351+
<div class="callout callout-important"><strong class="callout-title">Important</strong><p>NAT mode is <strong>dual-stack</strong>. Containers get an IPv4 address over DHCP and an IPv6 address over router advertisements, and IPv6 leaves through NAT66 the same way IPv4 leaves through NAT. Gateway mode inherits this, because the gateway container's WAN is a NAT interface.</p>
352+
<p>IPv6 needs <code>CONFIG_IP6_NF_NAT</code> and <code>CONFIG_IP6_NF_TARGET_MASQUERADE</code> in the kernel. Without them the container stays IPv4 only, and <code>droidspaces check</code> shows IPv6 NAT support as missing. Port forwarding (<code>--port</code>) is IPv4 only. Pass <code>--disable-ipv6</code> to turn IPv6 off for a container.</p></div>
352353
<h3 id="3-none-mode---netnone">3. None mode (<code>--net=none</code>) <a class="header-anchor" href="#3-none-mode---netnone">#</a></h3>
353354
<p>The container gets a private network namespace with only the loopback (<code>lo</code>) interface up.</p>
354355
<ul>

‎docs/index.html‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
<link rel="apple-touch-icon" href="/favicon.ico">
2424
<link rel="stylesheet" href="/assets/css/site.css?v=b310d7c992">
2525
<link rel="stylesheet" href="/assets/css/main.css?v=ccd72260b9">
26-
<script type="application/ld+json">[{"@context": "https://schema.org", "@type": "CollectionPage", "headline": "Documentation", "description": "Every Droidspaces guide: install on Android or Linux, build the kernel, use the app and the CLI, networking, graphics and audio, recipes, troubleshooting and supported devices.", "url": "https://www.droidspaces.org/docs/", "inLanguage": "en", "dateModified": "2026-10-01", "author": {"@type": "Organization", "name": "Droidspaces", "url": "https://www.droidspaces.org/", "sameAs": ["https://github.com/ravindu644/Droidspaces-OSS", "https://t.me/Droidspaces"]}, "publisher": {"@type": "Organization", "name": "Droidspaces", "url": "https://www.droidspaces.org/", "sameAs": ["https://github.com/ravindu644/Droidspaces-OSS", "https://t.me/Droidspaces"]}, "isPartOf": {"@type": "WebSite", "name": "Droidspaces", "url": "https://www.droidspaces.org/"}}, {"@context": "https://schema.org", "@type": "BreadcrumbList", "itemListElement": [{"@type": "ListItem", "position": 1, "name": "Home", "item": "https://www.droidspaces.org/"}, {"@type": "ListItem", "position": 2, "name": "Documentation", "item": "https://www.droidspaces.org/docs/"}]}]</script>
26+
<script type="application/ld+json">[{"@context": "https://schema.org", "@type": "CollectionPage", "headline": "Documentation", "description": "Every Droidspaces guide: install on Android or Linux, build the kernel, use the app and the CLI, networking, graphics and audio, recipes, troubleshooting and supported devices.", "url": "https://www.droidspaces.org/docs/", "inLanguage": "en", "dateModified": "2026-10-03", "author": {"@type": "Organization", "name": "Droidspaces", "url": "https://www.droidspaces.org/", "sameAs": ["https://github.com/ravindu644/Droidspaces-OSS", "https://t.me/Droidspaces"]}, "publisher": {"@type": "Organization", "name": "Droidspaces", "url": "https://www.droidspaces.org/", "sameAs": ["https://github.com/ravindu644/Droidspaces-OSS", "https://t.me/Droidspaces"]}, "isPartOf": {"@type": "WebSite", "name": "Droidspaces", "url": "https://www.droidspaces.org/"}}, {"@context": "https://schema.org", "@type": "BreadcrumbList", "itemListElement": [{"@type": "ListItem", "position": 1, "name": "Home", "item": "https://www.droidspaces.org/"}, {"@type": "ListItem", "position": 2, "name": "Documentation", "item": "https://www.droidspaces.org/docs/"}]}]</script>
2727
<script>(function(){const t=localStorage.getItem('theme');if(t)document.documentElement.setAttribute('data-theme',t);})();</script>
2828
</head>
2929
<body>

‎docs/kernel-configuration.html‎

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
<link rel="apple-touch-icon" href="/favicon.ico">
2424
<link rel="stylesheet" href="/assets/css/site.css?v=b310d7c992">
2525
<link rel="stylesheet" href="/assets/css/main.css?v=ccd72260b9">
26-
<script type="application/ld+json">[{"@context": "https://schema.org", "@type": "TechArticle", "headline": "Kernel configuration", "description": "How to compile an Android kernel with Droidspaces support: the config options and patches for non-GKI and GKI kernels.", "url": "https://www.droidspaces.org/docs/kernel-configuration.html", "inLanguage": "en", "dateModified": "2026-09-28", "author": {"@type": "Organization", "name": "Droidspaces", "url": "https://www.droidspaces.org/", "sameAs": ["https://github.com/ravindu644/Droidspaces-OSS", "https://t.me/Droidspaces"]}, "publisher": {"@type": "Organization", "name": "Droidspaces", "url": "https://www.droidspaces.org/", "sameAs": ["https://github.com/ravindu644/Droidspaces-OSS", "https://t.me/Droidspaces"]}, "isPartOf": {"@type": "WebSite", "name": "Droidspaces", "url": "https://www.droidspaces.org/"}}, {"@context": "https://schema.org", "@type": "BreadcrumbList", "itemListElement": [{"@type": "ListItem", "position": 1, "name": "Home", "item": "https://www.droidspaces.org/"}, {"@type": "ListItem", "position": 2, "name": "Documentation", "item": "https://www.droidspaces.org/docs/"}, {"@type": "ListItem", "position": 3, "name": "Kernel configuration", "item": "https://www.droidspaces.org/docs/kernel-configuration.html"}]}]</script>
26+
<script type="application/ld+json">[{"@context": "https://schema.org", "@type": "TechArticle", "headline": "Kernel configuration", "description": "How to compile an Android kernel with Droidspaces support: the config options and patches for non-GKI and GKI kernels.", "url": "https://www.droidspaces.org/docs/kernel-configuration.html", "inLanguage": "en", "dateModified": "2026-10-03", "author": {"@type": "Organization", "name": "Droidspaces", "url": "https://www.droidspaces.org/", "sameAs": ["https://github.com/ravindu644/Droidspaces-OSS", "https://t.me/Droidspaces"]}, "publisher": {"@type": "Organization", "name": "Droidspaces", "url": "https://www.droidspaces.org/", "sameAs": ["https://github.com/ravindu644/Droidspaces-OSS", "https://t.me/Droidspaces"]}, "isPartOf": {"@type": "WebSite", "name": "Droidspaces", "url": "https://www.droidspaces.org/"}}, {"@context": "https://schema.org", "@type": "BreadcrumbList", "itemListElement": [{"@type": "ListItem", "position": 1, "name": "Home", "item": "https://www.droidspaces.org/"}, {"@type": "ListItem", "position": 2, "name": "Documentation", "item": "https://www.droidspaces.org/docs/"}, {"@type": "ListItem", "position": 3, "name": "Kernel configuration", "item": "https://www.droidspaces.org/docs/kernel-configuration.html"}]}]</script>
2727
<script>(function(){const t=localStorage.getItem('theme');if(t)document.documentElement.setAttribute('data-theme',t);})();</script>
2828
</head>
2929
<body>
@@ -171,6 +171,19 @@ <h3 id="step-1-mandatory-configuration">Step 1: Mandatory configuration <a class
171171
<span class="nv">CONFIG_NF_NAT_IPV4</span><span class="o">=</span>y
172172
<span class="nv">CONFIG_IP_NF_NAT</span><span class="o">=</span>y
173173

174+
<span class="c"># IPv6 in NAT mode (NAT66). Optional: without these, NAT containers are IPv4 only</span>
175+
<span class="nv">CONFIG_IPV6</span><span class="o">=</span>y
176+
<span class="nv">CONFIG_IPV6_MULTIPLE_TABLES</span><span class="o">=</span>y
177+
<span class="nv">CONFIG_IP6_NF_IPTABLES</span><span class="o">=</span>y
178+
<span class="nv">CONFIG_IP6_NF_FILTER</span><span class="o">=</span>y
179+
<span class="nv">CONFIG_IP6_NF_MANGLE</span><span class="o">=</span>y
180+
<span class="nv">CONFIG_IP6_NF_NAT</span><span class="o">=</span>y
181+
<span class="nv">CONFIG_IP6_NF_TARGET_MASQUERADE</span><span class="o">=</span>y
182+
183+
<span class="c"># legacy compat</span>
184+
<span class="nv">CONFIG_NF_CONNTRACK_IPV6</span><span class="o">=</span>y
185+
<span class="nv">CONFIG_NF_NAT_IPV6</span><span class="o">=</span>y
186+
174187
<span class="c"># Disable this on older kernels to make internet work</span>
175188
<span class="nv">CONFIG_ANDROID_PARANOID_NETWORK</span><span class="o">=</span>n
176189

@@ -268,6 +281,10 @@ <h3 id="step-2-edit-gki_defconfig">Step 2: Edit <code>gki_defconfig</code> <a cl
268281
<span class="c"># Fix for docker unsafe procfs error</span>
269282
<span class="nv">CONFIG_USER_NS</span><span class="o">=</span>y
270283

284+
<span class="c"># IPv6 in NAT mode (NAT66)</span>
285+
<span class="nv">CONFIG_IP6_NF_NAT</span><span class="o">=</span>y
286+
<span class="nv">CONFIG_IP6_NF_TARGET_MASQUERADE</span><span class="o">=</span>y
287+
271288
<span class="c"># UFW support</span>
272289
<span class="nv">CONFIG_NETFILTER_XT_TARGET_REJECT</span><span class="o">=</span>y
273290
<span class="nv">CONFIG_NETFILTER_XT_TARGET_LOG</span><span class="o">=</span>y
@@ -317,6 +334,7 @@ <h3 id="1-run-the-requirements-check">1. Run the requirements check <a class="he
317334
<li>devtmpfs support</li>
318335
<li>OverlayFS support (optional, for volatile mode)</li>
319336
<li>VETH and Bridge support (optional, for NAT mode)</li>
337+
<li>IPv6 NAT support (optional, for IPv6 in NAT mode)</li>
320338
<li>PTY/devpts support</li>
321339
<li>Loop device support</li>
322340
<li>ext4 support</li>
@@ -400,6 +418,11 @@ <h3 id="3-what-to-do-if-something-is-missing">3. What to do if something is miss
400418
<td>NAT mode unavailable.</td>
401419
</tr>
402420
<tr>
421+
<td>IPv6 NAT</td>
422+
<td><code>CONFIG_IP6_NF_NAT</code> / <code>CONFIG_IP6_NF_TARGET_MASQUERADE</code></td>
423+
<td>NAT containers are IPv4 only.</td>
424+
</tr>
425+
<tr>
403426
<td>Seccomp</td>
404427
<td><code>CONFIG_SECCOMP=y</code></td>
405428
<td>Seccomp shield disabled. Security risk.</td>

0 commit comments

Comments
 (0)