|
| 1 | +# ADR_0025: Separate Domain for RPC Nodes and Internal Services |
| 2 | + |
| 3 | +## Date |
| 4 | + |
| 5 | +Decision date: |
| 6 | +Last status update: 2025-10-29 |
| 7 | + |
| 8 | +## Status |
| 9 | + |
| 10 | +- [x] Proposed |
| 11 | +- [ ] Accepted |
| 12 | +- [ ] Deprecated |
| 13 | +- [ ] Superseded |
| 14 | + |
| 15 | +### Implementation Status |
| 16 | + |
| 17 | +- [x] Planned |
| 18 | +- [ ] In Development |
| 19 | +- [ ] Implemented |
| 20 | +- [ ] Verified |
| 21 | +- [ ] Discontinued |
| 22 | + |
| 23 | +## People |
| 24 | + |
| 25 | +### Author/Decision Owner (Single Point of Accountability) |
| 26 | +- Leonardo Malik |
| 27 | + |
| 28 | +### Consulted (Subject Matter Experts) |
| 29 | +- Alexei Karyagin |
| 30 | +- Denis Pisarev |
| 31 | + |
| 32 | +### Informed (Affected Parties) |
| 33 | +[People/teams affected by this decision who should be aware] |
| 34 | + |
| 35 | + - [ ] [Person 1] |
| 36 | + - [ ] [Person 2] |
| 37 | + - [ ] [Person 3] |
| 38 | + |
| 39 | +*Note: People listed in "Informed" should submit a PR to check their name after reading this ADR.* |
| 40 | + |
| 41 | +## Decision |
| 42 | + |
| 43 | +We will acquire and configure a separate domain (distinct from qfnetwork.xyz) dedicated exclusively to RPC nodes and internal services, while maintaining qfnetwork.xyz for public-facing production services (website, email). |
| 44 | + |
| 45 | +## Context |
| 46 | + |
| 47 | +Currently, QF Network uses a single domain (qfnetwork.xyz) for all infrastructure components including: |
| 48 | +- Public website |
| 49 | +- Email services |
| 50 | +- RPC nodes for blockchain access |
| 51 | +- Telemetry and monitoring infrastructure |
| 52 | + |
| 53 | +### Decision Criteria |
| 54 | + |
| 55 | +- Security isolation level required |
| 56 | +- Maximum acceptable cost |
| 57 | +- Implementation timeline constraints |
| 58 | +- Operational complexity tolerance |
| 59 | +- Access control granularity needed |
| 60 | + |
| 61 | +## Options |
| 62 | + |
| 63 | +1. **(SELECTED)** Separate dedicated domain for RPC and internal services |
| 64 | +2. Use subdomains under qfnetwork.xyz |
| 65 | +3. Maintain single-domain architecture |
| 66 | + |
| 67 | +## Consequences |
| 68 | + |
| 69 | +### Option 1: Separate Dedicated Domain (SELECTED) |
| 70 | + |
| 71 | +Create entirely new domain (e.g., qf-rpc.network, qf-infra.network, qfnode.network) for all infrastructure and RPC services. |
| 72 | + |
| 73 | +**Selected because:** |
| 74 | +- Complete separation between production brand and infrastructure services |
| 75 | +- Anyone with domain access knows it's infrastructure-only |
| 76 | +- Can grant full infrastructure domain access without production risk |
| 77 | +- Compromised infrastructure domain doesn't expose website, email, or brand |
| 78 | +- Full DNS automation freedom without production service impact |
| 79 | +- New team members start with infrastructure access only |
| 80 | +- Matches approach of major blockchain networks |
| 81 | + |
| 82 | +**Selected despite:** |
| 83 | +- Annual domain registration and renewal fees |
| 84 | +- Multiple separate DNS configurations to maintain |
| 85 | +- Moving existing RPC nodes and internal services to new domain |
| 86 | +- Need to announce and document new RPC endpoints |
| 87 | +- External services may need configuration changes |
| 88 | + |
| 89 | +**Risks and Mitigations:** |
| 90 | +- **Risk**: Confusion about which domain to use for different services |
| 91 | + - **Mitigation**: Clear documentation and naming conventions; internal service directory |
| 92 | +- **Risk**: Increased DNS management complexity |
| 93 | + - **Mitigation**: Standardize DNS tooling across both domains; use infrastructure-as-code |
| 94 | +- **Risk**: Domain expires or is not renewed |
| 95 | + - **Mitigation**: Multi-year registration; calendar reminders; ownership documentation |
| 96 | + |
| 97 | +**Failure Recovery:** |
| 98 | +If separate domain proves problematic: |
| 99 | +1. Maintain qfnetwork.xyz as fallback for all services |
| 100 | +2. Transition can be reversed by pointing new domain to same infrastructure |
| 101 | +3. DNS TTL settings allow rapid switchback if needed |
| 102 | +4. Parallel operation period provides safety buffer |
| 103 | + |
| 104 | +### Option 2: Subdomains Under qfnetwork.xyz |
| 105 | + |
| 106 | +Use structured subdomains under qfnetwork.xyz, either as: |
| 107 | +- Single consolidated subdomain: infra.qfnetwork.xyz or internal.qfnetwork.xyz |
| 108 | +- Multiple service-specific subdomains: rpc.qfnetwork.xyz, vpn.qfnetwork.xyz, dev.qfnetwork.xyz |
| 109 | + |
| 110 | +**Rejected because:** |
| 111 | +- DNS compromise affects entire qfnetwork.xyz domain tree regardless of subdomain structure |
| 112 | +- Subdomain permissions still require parent domain access |
| 113 | +- Automated DNS management still touches production domain |
| 114 | +- Attack on subdomain can escalate to parent domain |
| 115 | +- Cannot truly separate infrastructure from production access |
| 116 | +- Less obvious that subdomains are infrastructure-only |
| 117 | +- Multiple subdomains increase configuration complexity without addressing core security issues |
| 118 | + |
| 119 | +**Rejected despite:** |
| 120 | +- No additional domain registration fees |
| 121 | +- Single wildcard certificate covers all subdomains |
| 122 | +- Single DNS provider and configuration |
| 123 | +- Everything under qfnetwork.xyz umbrella |
| 124 | +- Service-specific subdomains provide clear naming |
| 125 | + |
| 126 | +### Option 3: Maintain Single-Domain Architecture |
| 127 | + |
| 128 | +Use qfnetwork.xyz for all services without separation. |
| 129 | + |
| 130 | +**Rejected because:** |
| 131 | +- All services share same attack surface |
| 132 | +- Infrastructure changes can impact critical production services |
| 133 | +- Cannot implement principle of least privilege |
| 134 | +- Automated DNS management requires production domain exposure |
| 135 | +- RPC scaling automation poses risk to website/email |
| 136 | +- Does not align with industry security practices |
| 137 | + |
| 138 | +**Rejected despite:** |
| 139 | +- Single domain management |
| 140 | +- No new domain fees |
| 141 | + |
| 142 | + |
| 143 | +## Advice |
| 144 | + |
| 145 | +- "we just have one domain that we use for everything. I would propose that we use a separate one for our VPN nodes and internal services that we run, rather than use the high-risk production qfnetwork.xyz for everything" (Leonardo Malik, 2025-10-22) |
| 146 | +- "having a separate domain for RPC nodes that we eventually would run in Kubernetes would also allow us to do DNS-based automated DNS management without exposing the whole website domain as well to the Kubernetes cluster" (Leonardo Malik, 2025-10-22) |
| 147 | +- "This is part of like a best practice for security approach as well like it's considered as part of like network segregation" (Leonardo Malik, 2025-10-22) |
| 148 | +- "would something like a subdomain be okay for this task, or why do you need completely separate domain?" (Alexei Karyagin, 2025-10-22) |
| 149 | +- "I think it's more useful to have a separate domain entirely, also for visibility purposes ... everything that's running on that domain ... are internal services and RPC nodes" (Leonardo Malik, 2025-10-22) |
| 150 | +- "if you would hire a new person and then we have a separate domain for just RPC nodes, we can just give access to that domain initially and then step by step give the principle of least privilege approach" (Leonardo Malik, 2025-10-22) |
| 151 | +- "core developing companies ... have their own name, and the network or some other products have a different name. So it dilutes the attack vector and attack surface" (Denis Pisarev, 2025-10-22) |
| 152 | +- "If... our Kubernetes cluster gets attacked...the RPC node URLs changing is not a big deal, but it is a big deal if it's the main domain and things like our email server, our website URL, etc., can be changed" (Leonardo Malik, 2025-10-22) |
| 153 | +- "the secondary domain, we could advertise on the website and then or via the portal" (Leonardo Malik, 2025-10-22) |
| 154 | + |
| 155 | +## Glossary |
| 156 | + |
| 157 | +- **RPC (Remote Procedure Call)**: Interface through which external applications interact with blockchain nodes |
| 158 | +- **Network Segregation**: Security practice of separating different types of services into isolated network segments |
| 159 | +- **Principle of Least Privilege**: Security principle where users/services receive minimum access needed for their role |
| 160 | +- **DNS (Domain Name System)**: System translating human-readable domain names to IP addresses |
| 161 | +- **Attack Surface**: Total number of points where unauthorized user could attempt to access system |
| 162 | + |
| 163 | +## References |
| 164 | + |
| 165 | +- Industry Example: Parity Technologies (parity.io vs polkadot.network / polkadot.com) |
| 166 | + |
| 167 | +## ADR Relationships |
| 168 | + |
| 169 | +[Fill in the section if applicable or leave blank for further filling.] |
| 170 | + |
| 171 | +### Supersedes |
| 172 | +- ADR #[X]: [Brief description of superseded decision] |
| 173 | + |
| 174 | +### Superseded By |
| 175 | +- ADR #[X]: [Brief description of superseding decision] |
| 176 | + |
| 177 | +### Related ADRs |
| 178 | +- ADR #[X]: [Brief description of relationship] |
0 commit comments