IPv4 è ancora un investimento nel 2026? Rendimento netto
In breve (verificato il 2026-11-06): sì, come attività a reddito, non come scommessa sul prezzo. Un /24 comprato alla mediana a 90 giorni di ip4.market, $25.25 per IP (indice aggiornato il 2026-11-02), costa circa $6,464. Affittato alla media di IPv4Center, $0.53 per IP al mese, rende circa $1,628 l'anno: 25.2% lordo. Il resto lo decide il registro. In un LIR che già paghi, questo è anche il rendimento netto; con ARIN resta il 20.7% dopo la tariffa 2027; in un nuovo LIR RIPE aperto solo per questo blocco, la quota di EUR 1,894 lo trasforma in una perdita del 7.7% l'anno. Un /22 rende abbastanza da reggere un LIR proprio. Tutte le cifre sono osservazioni datate; per un preventivo vedi prezzi IPv4.
Cosa è cambiato dal crollo del 2025
Il premio speculativo è sparito. Le nostre note di mercato di luglio 2026 davano un /24 a circa $30 per IP e l'affitto vicino a $0.40 al mese: 16% lordo. Fino a novembre 2026 il prezzo d'acquisto è sceso più dell'affitto, quindi lo stesso calcolo dà 25.2%. I blocchi grandi restano i più economici per indirizzo: l'indice di ip4.market mostra mediane a 90 giorni di $19.00 per un /22, $15.97 per un /20 e $12.62 per un /16 (solo due vendite). Chi compra nel 2026 paga un reddito, non un prezzo che sale e basta.
I costi fissi si sono mossi al contrario. Dal 2027 il RIPE NCC applica EUR 1,894 per account LIR secondo RIPE-867, senza costi per IP né per trasferimento, con EUR 1,000 di iscrizione (vedi cosa cambia nello schema delle quote 2027). Dal 29 settembre 2026 il RIPE NCC impedisce anche, temporaneamente, ai membri esistenti di aprire altri account LIR (pagina dei pagamenti RIPE, letta il 2026-11-06), quindi un membro non può comunque parcheggiare un blocco in un LIR nuovo. Le tariffe ARIN 2027, adottate il 19 aprile 2026, prevedono $288.75 l'anno per un /24 (3X-Small) e $577.50 fino a un /22 (2X-Small), più una tassa una tantum di $187.50 a carico del ricevente per il trasferimento di un /24.
Misuralo da solo: ipv4_asset.js
Lo script legge il registro pubblico dei trasferimenti IPv4 del RIPE NCC per vedere la liquidità di ogni dimensione di blocco e per quanto tempo i blocchi restano allo stesso titolare. Poi calcola il rendimento netto annuo di un /24 e di un /22 in base al registro, con il cambio euro della BCE. I prezzi sono costanti datate in cima: cambiale quando hai un preventivo. Salvalo come ipv4_asset.js:
// ipv4_asset.js - is an IPv4 block still an investment? Liquidity from RIPE's own transfer log,
// then net lease yield after registry fees for a /24 and a /22.
// usage: bun ipv4_asset.js [transfers.json] (downloads RIPE's log when no file is given)
const LOG = 'https://www-static.ripe.net/dynamic/table-of-transfers/ipv4/transfers-allocations.json'
const BUY = { 24: 25.25, 22: 19.00 } // ip4.market price index, 90-day median $/IP, updated 2026-11-02
const LEASE = { 24: 0.53, 22: 0.58 } // IPv4Center lease page, avg $/IP/month, read 2026-11-06
const RIPE_LIR_EUR = 1894 // RIPE-867: annual fee per LIR account from 2027
const ARIN_RSP = { 24: 288.75, 22: 577.50 } // ARIN 2027 fee schedule, 3X-Small / 2X-Small
const file = process.argv[2]
const log = file ? await Bun.file(file).json() : await (await fetch(LOG)).json()
const ecb = await (await fetch('https://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml')).text()
const usdPerEur = +ecb.match(/currency='USD' rate='([\d.]+)'/)[1]
const ecbDate = ecb.match(/time='([\d-]+)'/)[1]
const ip = s => s.split('.').reduce((a, o) => a * 256 + +o, 0)
const size = b => b.includes('/') ? 2 ** (32 - +b.split('/')[1]) : ip(b.split('-')[1].trim()) - ip(b.split('-')[0].trim()) + 1
const day = d => { const [dd, mm, yy] = d.split('/'); return Date.UTC(+yy, mm - 1, +dd) }
const bucket = n => n <= 256 ? '/24' : n <= 1024 ? '/23-/22' : n <= 4096 ? '/21-/20' : n <= 32768 ? '/19-/17' : '/16+'
const rows = log.transfers.map(t => ({ ...t, ts: day(t.date), blocks: t.transferred_blocks.split(',').map(s => s.trim()) }))
const last = new Date(Math.max(...rows.map(r => r.ts))).toISOString().slice(0, 10)
console.log(`RIPE NCC IPv4 transfer log: ${rows.length} entries, newest ${last}`)
// 1. Liquidity: market (POLICY) transfers by block size, 2025 vs 2026 to date
const year = (r, y) => new Date(r.ts).getUTCFullYear() === y
const stats = y => {
const s = {}
for (const r of rows.filter(r => r.transferType === 'POLICY' && year(r, y)))
for (const b of r.blocks) {
const k = bucket(size(b)), o = (s[k] ??= { n: 0, ips: 0, temp: 0 })
o.n++; o.ips += size(b); if (r.transferStatus === 'TEMPORARY') o.temp++
}
return s
}
const s25 = stats(2025), s26 = stats(2026)
console.log('\nblock size | 2025 blocks | 2026 blocks (to ' + last + ') | 2026 addresses | temporary')
for (const k of ['/24', '/23-/22', '/21-/20', '/19-/17', '/16+'])
console.log(`${k.padEnd(10)} | ${String(s25[k]?.n ?? 0).padStart(11)} | ${String(s26[k]?.n ?? 0).padStart(24)} | ${
(s26[k]?.ips ?? 0).toLocaleString('en-US').padStart(14)} | ${String(s26[k]?.temp ?? 0).padStart(9)}`)
// 2. Holding period: the same block sold on again as a whole (permanent market transfers)
const seen = new Map(), holds = []
for (const r of rows.filter(r => r.transferType === 'POLICY' && r.transferStatus === 'PERMANENT').sort((a, b) => a.ts - b.ts))
for (const b of r.blocks) {
if (seen.has(b)) holds.push((r.ts - seen.get(b)) / 864e5)
seen.set(b, r.ts)
}
holds.sort((a, b) => a - b)
const med = holds[Math.floor(holds.length / 2)]
console.log(`\nblocks sold on again whole: ${holds.length} of ${seen.size} (${(100 * holds.length / seen.size).toFixed(1)}%)`)
console.log(`median time between the two sales: ${(med / 365.25).toFixed(1)} years; within 24 months: ${holds.filter(d => d < 730).length}`)
// 3. Net lease yield per year on the purchase price, by registry and occupancy
const usd = v => (v < 0 ? '-$' : '$') + Math.abs(Math.round(v)).toLocaleString('en-US')
console.log(`\nEUR 1 = $${usdPerEur} (ECB, ${ecbDate}); RIPE LIR fee EUR ${RIPE_LIR_EUR} = ${usd(RIPE_LIR_EUR * usdPerEur)}`)
console.log('block | price | lease/yr | held in | fee/yr | net yield 100% | 70% let')
for (const p of [24, 22]) {
const n = 2 ** (32 - p), cost = n * BUY[p], gross = n * LEASE[p] * 12
const fees = { 'a new RIPE LIR': RIPE_LIR_EUR * usdPerEur, 'ARIN (3X/2X-Small)': ARIN_RSP[p], 'an existing LIR': 0 }
const y = (f, occ) => ((100 * (gross * occ - f) / cost).toFixed(1) + '%').padStart(occ === 1 ? 14 : 7)
for (const [k, f] of Object.entries(fees))
console.log(`/${p} | ${usd(cost).padStart(7)} | ${usd(gross).padStart(8)} | ${k.padEnd(20)} | ${usd(f).padStart(6)} | ${y(f, 1)} | ${y(f, 0.7)}`)
}
console.log('fees per year; lease = list average, before the lessor\'s abuse handling and any broker or platform cut')
bun ipv4_asset.js
Output, eseguito su un server cloud DCXV con Bun 1.4.4 il 2026-11-06 (registro RIPE fino al 2026-11-05):
RIPE NCC IPv4 transfer log: 43896 entries, newest 2026-11-05
block size | 2025 blocks | 2026 blocks (to 2026-11-05) | 2026 addresses | temporary
/24 | 1419 | 1010 | 258,560 | 43
/23-/22 | 1622 | 997 | 850,944 | 21
/21-/20 | 453 | 334 | 935,936 | 5
/19-/17 | 214 | 216 | 2,981,888 | 10
/16+ | 53 | 48 | 6,291,456 | 2
blocks sold on again whole: 5041 of 32361 (15.6%)
median time between the two sales: 3.6 years; within 24 months: 0
EUR 1 = $1.1224 (ECB, 2026-11-05); RIPE LIR fee EUR 1894 = $2,126
block | price | lease/yr | held in | fee/yr | net yield 100% | 70% let
/24 | $6,464 | $1,628 | a new RIPE LIR | $2,126 | -7.7% | -15.3%
/24 | $6,464 | $1,628 | ARIN (3X/2X-Small) | $289 | 20.7% | 13.2%
/24 | $6,464 | $1,628 | an existing LIR | $0 | 25.2% | 17.6%
/22 | $19,456 | $7,127 | a new RIPE LIR | $2,126 | 25.7% | 14.7%
/22 | $19,456 | $7,127 | ARIN (3X/2X-Small) | $578 | 33.7% | 22.7%
/22 | $19,456 | $7,127 | an existing LIR | $0 | 36.6% | 25.6%
fees per year; lease = list average, before the lessor's abuse handling and any broker or platform cut
Cosa dicono i numeri
- La quota del registro decide per i blocchi piccoli. Un /24 rende $1,628 l'anno ai prezzi di listino. Un nuovo LIR RIPE costa $2,126, quindi il blocco perde soldi anche affittato per intero. Lo stesso /24 con ARIN conserva il 20.7%, e in un LIR che hai già, l'intero 25.2%. Un /22 regge da solo un LIR RIPE: 25.7% netto affittato per intero.
- L'occupazione è il vero rischio. Al 70% affittato, il /24 in un LIR esistente scende dal 25.2% al 17.6%, e il /22 in un LIR nuovo dal 25.7% al 14.7%. Un mese tra due inquilini è un mese di costi senza affitto.
- I blocchi piccoli sono quelli liquidi. Dal 1 gennaio al 5 novembre 2026 il registro RIPE mostra 1,010 blocchi /24 e 997 blocchi /23 o /22 passati di mano, contro 48 blocchi da /16 in su. Sono passati meno /24 che in tutto il 2025 (1,419), mentre i blocchi da /19 a /17 hanno già superato il dato del 2025 (216 contro 214). Un trasferimento può includere più blocchi; lo script li conta uno per uno.
- I titolari tengono i blocchi per anni. Su 32,361 blocchi venduti interi sul mercato RIPE, 5,041 (15.6%) sono stati poi rivenduti come lo stesso blocco, in mediana 3.6 anni dopo la prima vendita, e nessuno entro 24 mesi: il vincolo RIPE dopo un trasferimento si vede nei dati. Pianifica l'uscita almeno due anni prima.
- Il registro non mostra la maggior parte degli affitti. Solo 81 dei 2,605 blocchi trasferiti nel 2026 erano trasferimenti temporanei RIPE. Nella maggior parte degli affitti il locatore resta il titolare registrato, quindi dal registro non si può contare quanti blocchi sono affittati.
I rischi che il rendimento non mostra
| Rischio | Cosa fa all'attività | Cosa controllare |
|---|---|---|
| Prezzo | La correzione del 2025 ha colpito soprattutto i blocchi grandi | Comprare a una mediana datata, non a prezzo di listino |
| IPv6 | Riduce lentamente la domanda di affitto; il dual stack tiene IPv4 | Chi sono i tuoi inquilini e perché servono loro IPv4 |
| Quote del registro | Una quota RIPE per LIR, qualunque cosa contenga | La tua quota per blocco dal 2027 |
| Reputazione | Un cattivo inquilino può far finire il blocco in blacklist | Storico prima dell'acquisto, clausole abuse nel contratto |
| Uscita | 24 mesi di vincolo in RIPE, commissione di broker sulla vendita | Dimensione di uscita e data da cui puoi vendere |
Prima di comprare, esegui i controlli della nostra guida alle blacklist IPv4: un blocco in lista dal primo giorno non rende nulla finché non è pulito. Se preferisci usare gli indirizzi tu stesso, affitto o acquisto di IPv4 fa lo stesso calcolo dal lato dell'inquilino.
Entrare e uscire con DCXV
Un'attività vale quanto la sua uscita. La commissione di broker di DCXV la paga chi vende: EUR 2.00 per IP per un /24 o /23, EUR 1.00 da /22 a /19 e EUR 0.50 da /18 a /14; chi compra paga l'escrow. Per il /24 sopra sono EUR 512, circa $575 o l'8.9% del suo prezzo di novembre 2026 (cambio BCE del 2026-11-05); per il /22, EUR 1,024, circa il 5.9%. Intermediamo acquisti, affitti e vendite nelle regioni RIPE, ARIN e APNIC e possiamo affittare un tuo blocco a clienti hosting e cloud. Invia dimensione del blocco e registro al desk IPv4 o a ipv4@dcxv.com.
