Skip to content

Commit 62e5b1f

Browse files
docs(readme): convert README.adoc -> Markdown README.md (#62)
README must be real Markdown to render in GitHub community-health, the GitHub profile, and external MCP directories (Glama) — AsciiDoc shows as raw markup there. pandoc asciidoc->GFM, badges fixed to clickable, SPDX header kept as an HTML comment, duplicate README.adoc removed. Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
1 parent 6b4f6b7 commit 62e5b1f

2 files changed

Lines changed: 156 additions & 181 deletions

File tree

README.adoc

Lines changed: 0 additions & 181 deletions
This file was deleted.

README.md

Lines changed: 156 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,156 @@
1+
<!--
2+
SPDX-License-Identifier: CC-BY-SA-4.0
3+
SPDX-FileCopyrightText: 2025-2026 Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
4+
-->
5+
6+
[![OpenSSF Best Practices](https://img.shields.io/badge/OpenSSF-Best_Practices-green?logo=opensourcesecurity)](https://www.bestpractices.dev/en/projects/new?repo_url=https://github.com/hyperpolymath/ipv6-site-enforcer)
7+
[![License: PMPL-1.0](https://img.shields.io/badge/License-MPL--2.0-blue.svg)](https://github.com/hyperpolymath/palimpsest-license) <embed
8+
src="https://api.thegreenwebfoundation.org/greencheckimage/github.com"
9+
data-link="https://www.thegreenwebfoundation.org/green-web-check/?url=github.com" />
10+
11+
# Purpose
12+
13+
Tools and configurations to enforce IPv6-only ingress and service
14+
routing across the FlatRacoon Network Stack.
15+
16+
Part of the [FlatRacoon Network
17+
Stack](https://github.com/hyperpolymath/flatracoon-netstack).
18+
19+
# Architecture
20+
21+
Internet (Dual-Stack)
22+
23+
┌──────────▼──────────┐
24+
│ IPv6 Ingress │
25+
│ (This Module) │
26+
│ ──────────────── │
27+
│ • NAT64/DNS64 │
28+
│ • IPv4 rejection │
29+
│ • Happy Eyeballs │
30+
└──────────┬──────────┘
31+
│ IPv6 only
32+
┌─────────────────┼─────────────────┐
33+
│ │ │
34+
┌──────▼──────┐ ┌──────▼──────┐ ┌──────▼──────┐
35+
│ Services │ │ ZeroTier │ │ IPFS │
36+
│ (K8s) │ │ Overlay │ │ Nodes │
37+
└─────────────┘ └─────────────┘ └─────────────┘
38+
39+
# Components
40+
41+
- **NAT64/DNS64 gateway** - Jool-based translation for legacy clients
42+
43+
- **IPv6 ingress controller** - Nginx/Envoy configured for v6-only
44+
45+
- **Policy enforcement** - NetworkPolicy manifests rejecting IPv4
46+
47+
- **Monitoring hooks** - Prometheus metrics for v4 rejection counts
48+
49+
- **Happy Eyeballs support** - RFC 8305 compliant client handling
50+
51+
# Directory Structure
52+
53+
ipv6-site-enforcer/
54+
├── manifests/
55+
│ ├── nat64-deployment.yaml
56+
│ ├── dns64-configmap.yaml
57+
│ ├── ingress-controller.yaml
58+
│ └── networkpolicy-v6only.yaml
59+
├── configs/
60+
│ ├── jool.ncl # NAT64 configuration
61+
│ ├── dns64.ncl # DNS64 resolver config
62+
│ ├── ingress.ncl # Ingress controller settings
63+
│ └── policy.ncl # Network policy rules
64+
├── scripts/
65+
│ ├── enforce-v6.sh # Runtime enforcement
66+
│ ├── audit-v4.sh # Detect IPv4 leakage
67+
│ └── metrics.sh # Collect rejection metrics
68+
├── Justfile
69+
├── README.adoc
70+
├── STATE.scm
71+
├── META.scm
72+
└── ECOSYSTEM.scm
73+
74+
# Inputs
75+
76+
| Input | Description | Source |
77+
|----------------|-----------------------------------|-----------------------|
78+
| IPv6 prefix | Allocated /48 or /64 for services | Network administrator |
79+
| NAT64 prefix | 64:ff9b::/96 or custom | Configuration |
80+
| DNS64 upstream | Resolver for synthesis | Network configuration |
81+
| Ingress rules | Service exposure policies | configs/ingress.ncl |
82+
83+
# Outputs
84+
85+
| Output | Description |
86+
|-------------------|------------------------------------|
87+
| IPv6-only ingress | All inbound traffic forced to IPv6 |
88+
| NAT64 gateway | Legacy IPv4 client compatibility |
89+
| Rejection metrics | IPv4 attempt counts and sources |
90+
| Audit logs | Compliance reporting |
91+
92+
# Integration Points
93+
94+
## With FlatRacoon Stack
95+
96+
- **zerotier-k8s-link** - Overlay uses IPv6 addressing
97+
98+
- **ipfs-overlay** - IPFS nodes bind to IPv6 only
99+
100+
- **network-dashboard** - v4 rejection metrics displayed
101+
102+
- **bgp-backbone-lab** - IPv6 route announcements
103+
104+
## Machine-Readable Manifest
105+
106+
```json
107+
{
108+
"module": "ipv6-site-enforcer",
109+
"version": "0.1.0",
110+
"layer": "network",
111+
"requires": ["kubernetes", "jool", "dns64"],
112+
"provides": ["ipv6-only-ingress", "nat64", "dns64"],
113+
"config_schema": "configs/schema.ncl",
114+
"health_endpoint": "/ipv6/health",
115+
"metrics_endpoint": "/ipv6/metrics"
116+
}
117+
```
118+
119+
# Quick Start
120+
121+
```bash
122+
# 1. Deploy NAT64/DNS64 gateway
123+
just deploy-gateway
124+
125+
# 2. Configure ingress controller
126+
just configure-ingress
127+
128+
# 3. Apply network policies
129+
just enforce-policies
130+
131+
# 4. Verify enforcement
132+
just audit
133+
```
134+
135+
# IPv6 Addressing Scheme
136+
137+
2001:db8:face::/48 # Example allocation
138+
├── 2001:db8:face:0::/64 # Kubernetes services
139+
├── 2001:db8:face:1::/64 # ZeroTier overlay
140+
├── 2001:db8:face:2::/64 # IPFS cluster
141+
└── 2001:db8:face:ff::/64 # NAT64 pool
142+
143+
# Status
144+
145+
Phase
146+
Scaffolding
147+
148+
Completion
149+
5%
150+
151+
Next
152+
NAT64/DNS64 deployment manifests
153+
154+
# License
155+
156+
MPL-2.0

0 commit comments

Comments
 (0)