IPv4 reste-t-il un investissement en 2026 ? Rendement net
En bref (vérifié le 2026-11-06) : oui, comme actif de rendement, pas comme pari sur le prix. Un /24 acheté à la médiane sur 90 jours d'ip4.market, $25.25 par IP (indice mis à jour le 2026-11-02), coûte environ $6,464. Loué à la moyenne d'IPv4Center, $0.53 par IP et par mois, il rapporte environ $1,628 par an : 25.2% brut. Le registre décide du reste. Dans un LIR que vous payez déjà, c'est aussi le rendement net ; chez ARIN il reste 20.7% après le tarif 2027 ; dans un nouveau LIR RIPE ouvert pour ce seul bloc, la cotisation de EUR 1,894 en fait une perte de 7.7% par an. Un /22 rapporte assez pour porter son propre LIR. Tous les chiffres sont des observations datées ; pour un devis, voir prix IPv4.
Ce qui a changé depuis la chute de 2025
La prime spéculative a disparu. Nos notes de marché de juillet 2026 plaçaient un /24 vers $30 par IP et la location près de $0.40 par mois : 16% brut. En novembre 2026 le prix d'achat a baissé plus que le loyer, et le même calcul donne 25.2%. Les grands blocs restent les moins chers par adresse : l'indice ip4.market affiche des médianes sur 90 jours de $19.00 pour un /22, $15.97 pour un /20 et $12.62 pour un /16 (deux ventes seulement). En 2026, l'acheteur paie un revenu, pas un prix qui ne ferait que monter.
Les coûts fixes ont évolué dans l'autre sens. À partir de 2027, le RIPE NCC facture EUR 1,894 par compte LIR selon RIPE-867, sans frais par IP ni par transfert, avec EUR 1,000 d'adhésion (voir ce qui change dans le barème 2027). Depuis le 29 septembre 2026, le RIPE NCC empêche aussi temporairement les membres existants d'ouvrir des comptes LIR supplémentaires (page de paiement RIPE, lue le 2026-11-06) : un membre ne peut donc pas garer un bloc dans un nouveau LIR. Le barème ARIN 2027, adopté le 19 avril 2026, demande $288.75 par an pour un /24 (3X-Small) et $577.50 jusqu'à un /22 (2X-Small), plus des frais uniques de $187.50 au destinataire pour le transfert d'un /24.
Mesurez vous-même : ipv4_asset.js
Le script lit le journal public des transferts IPv4 du RIPE NCC pour voir la liquidité de chaque taille de bloc et combien de temps les blocs restent chez un même titulaire. Il calcule ensuite le rendement net annuel d'un /24 et d'un /22 selon le registre, avec le taux de change de la BCE. Les prix sont des constantes datées en tête du fichier : changez-les quand vous avez un devis. Enregistrez-le sous 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
Sortie, exécuté sur un serveur cloud DCXV avec Bun 1.4.4 le 2026-11-06 (journal RIPE jusqu'au 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
Ce que disent les chiffres
- La cotisation du registre tranche pour les petits blocs. Un /24 rapporte $1,628 par an aux tarifs affichés. Un nouveau LIR RIPE coûte $2,126 : le bloc perd de l'argent même loué en entier. Le même /24 chez ARIN garde 20.7%, et dans un LIR que vous avez déjà, les 25.2% entiers. Un /22 porte seul un LIR RIPE : 25.7% net loué en entier.
- Le taux d'occupation est le vrai risque. À 70% loué, le /24 dans un LIR existant passe de 25.2% à 17.6%, et le /22 dans un nouveau LIR de 25.7% à 14.7%. Un mois entre deux locataires, c'est un mois de frais sans loyer.
- Les petits blocs sont les plus liquides. Du 1er janvier au 5 novembre 2026, le journal RIPE montre 1,010 blocs /24 et 997 blocs /23 ou /22 ayant changé de main, contre 48 blocs de /16 ou plus. Moins de /24 ont circulé que sur toute l'année 2025 (1,419), alors que les blocs de /19 à /17 dépassent déjà leur total de 2025 (216 contre 214). Un transfert peut porter plusieurs blocs ; le script compte chacun.
- Les titulaires gardent leurs blocs des années. Sur 32,361 blocs vendus entiers sur le marché RIPE, 5,041 (15.6%) ont ensuite été revendus tels quels, en médiane 3.6 ans après la première vente, et aucun avant 24 mois : le délai de blocage RIPE après un transfert se voit dans les données. Prévoyez la sortie au moins deux ans à l'avance.
- Le registre ne montre pas la plupart des locations. Seuls 81 des 2,605 blocs transférés en 2026 étaient des transferts temporaires RIPE. Dans la plupart des locations, le bailleur reste titulaire enregistré : le registre ne permet pas de compter les blocs loués.
Les risques que le rendement ne montre pas
| Risque | Effet sur l'actif | À vérifier |
|---|---|---|
| Prix | La correction de 2025 a frappé surtout les grands blocs | Acheter à une médiane datée, pas à un prix affiché |
| IPv6 | Réduit lentement la demande de location ; le dual stack garde IPv4 | Qui sont vos locataires et pourquoi ils ont besoin d'IPv4 |
| Frais du registre | Une cotisation RIPE par LIR, quel que soit son contenu | Votre coût par bloc à partir de 2027 |
| Réputation | Un mauvais locataire peut faire blacklister le bloc | L'historique avant achat, les clauses abuse du bail |
| Sortie | 24 mois de blocage chez RIPE, commission de courtage à la vente | Votre taille de sortie et la date où vous pouvez vendre |
Avant d'acheter, faites les vérifications de notre guide des listes noires IPv4 : un bloc listé dès le premier jour ne rapporte rien tant qu'il n'est pas propre. Si vous préférez utiliser les adresses vous-même, location ou achat d'IPv4 fait le même calcul côté locataire.
Entrer et sortir avec DCXV
Un actif ne vaut que par sa sortie. La commission de courtage de DCXV est payée par le vendeur : EUR 2.00 par IP pour un /24 ou /23, EUR 1.00 de /22 à /19 et EUR 0.50 de /18 à /14 ; l'acheteur paie le séquestre. Pour le /24 ci-dessus, cela fait EUR 512, environ $575 ou 8.9% de son prix de novembre 2026 (taux BCE du 2026-11-05) ; pour le /22, EUR 1,024, environ 5.9%. Nous accompagnons achats, locations et ventes dans les régions RIPE, ARIN et APNIC et pouvons louer un bloc que vous détenez à des clients d'hébergement et de cloud. Envoyez la taille du bloc et le registre au desk IPv4 ou à ipv4@dcxv.com.
