AWS BYOIP en 2026: $43.80 por IPv4 frente a tu propio /24
Respuesta corta (comprobado el 2026-11-04): AWS cobra $0.005 por hora por cada dirección IPv4 pública que proporciona, esté en uso o inactiva: $3.65 al mes, $43.80 al año por dirección. Las direcciones que traes tú (BYOIP) no tienen ese cargo. Con la mediana de mercado de octubre de 2026 (unos $6,500 por un /24), un /24 comprado se amortiza en unos 7 meses si usas las 256 direcciones, y en unos 36 meses con 50. Un /24 alquilado al promedio de octubre de 2026 ($0.49 por IP, unos $125 al mes) sale más barato que las direcciones de AWS a partir de unas 35 IP públicas. Por debajo, sigue pagando a AWS. Los precios de mercado son observaciones fechadas; para una cotización consulta precios IPv4.
Qué cobra AWS y qué elimina BYOIP
Desde febrero de 2024 AWS factura cada dirección IPv4 pública. La página de precios de Amazon VPC (comprobada el 2026-11-04) indica $0.005 por hora para una dirección en uso y los mismos $0.005 para una inactiva, y dice de las direcciones BYOIP: "These public IPv4 addresses are not charged." La página no muestra capa gratuita para IPv4 pública; la capa gratuita que describe es la de Amazon VPC IP Address Manager (IPAM).
Un mes son 730 horas en la facturación de AWS, así que:
- 1 dirección: $3.65 al mes, $43.80 al año;
- 50 direcciones: $182.50 al mes, $2,190 al año;
- 256 direcciones: $934.40 al mes, $11,212.80 al año.
La última línea importa más de lo que parece: tras BYOIP, AWS te deja usar todas las direcciones de un /24, incluidas la de red y la de broadcast (requisitos de EC2 BYOIP). IPAM es gratis para BYOIP en una región y una cuenta; el Advanced Tier, necesario a partir de dos regiones o cuentas, cuesta $0.00027 por IP activa y hora, unos $0.20 al mes por dirección.
Las reglas de AWS para un rango propio
De la documentación de EC2 BYOIP, comprobada el 2026-11-04:
- Registro. El rango debe estar registrado en ARIN, RIPE NCC o APNIC, a nombre de una empresa o institución, no de una persona. LACNIC y AFRINIC no están en la lista.
- Tamaño. El rango IPv4 más específico es un /24. No puedes traer un /25.
- ROA. Una Route Origin Authorization para los ASN de Amazon 16509 y 14618, con longitud máxima igual al rango que traes (IPAM exige /24). Crea antes una ROA para tu ASN de origen actual o tus rutas existentes pueden romperse. La European Sovereign Cloud usa en su lugar los ASN 16509 y 214101.
- Prueba de control. Un certificado X.509 autofirmado en el registro (en RIPE: una nueva línea
descren elinetnum, noremarks), o el método DNS TXT de IPAM. - Reputación. AWS "might investigate the reputation" y puede rechazar un rango con mal historial. Revisa el bloque antes de comprarlo: mira nuestra comprobación de listas negras IPv4.
- Límites. Cinco rangos BYOIP por región y cuenta (más bajo petición), cada rango en una sola región a la vez. La mayoría del aprovisionamiento termina en dos horas; AWS se reserva hasta una semana.
Revisa un rango antes de empezar: byoip_check.js
El script solo lee datos públicos (RIPEstat y RDAP, sin cuenta de AWS) y responde dos preguntas: si el prefijo está listo para aprovisionar y a partir de cuántas IP públicas un /24 bate el precio de AWS. Pásale prefijos o un ASN. Guárdalo como byoip_check.js:
// byoip_check.js - is a prefix ready for AWS BYOIP, and when does a /24 beat AWS public IPv4?
// usage: bun byoip_check.js <prefix | ASN> [prefix ...] e.g. bun byoip_check.js AS204057
// Public data only (RIPEstat, RDAP), no AWS account needed.
const AWS_IP_HOUR = 0.005 // aws.amazon.com/vpc/pricing/, in-use or idle, checked 2026-11-04
const BUY_IP = 25.40 // ip4.market /24 90-day median per IP, 80 sales to 2026-10-26
const LEASE_IP_MONTH = 0.49 // IPv4Center all-region /24 lease average, page updated 2026-10-28
const AMAZON = [16509, 14618] // ASNs the ROA must authorize (EC2 BYOIP prerequisites)
const stat = async (call, q) =>
(await (await fetch(`https://stat.ripe.net/data/${call}/data.json?${q}`)).json()).data
let prefixes = process.argv.slice(2)
if (prefixes.length === 1 && /^as\d+$/i.test(prefixes[0])) {
const d = await stat('announced-prefixes', `resource=${prefixes[0]}`)
prefixes = d.prefixes.map(p => p.prefix).filter(p => p.includes('.')).sort().slice(0, 5)
}
for (const pfx of prefixes) {
const len = +pfx.split('/')[1]
const rdap = await (await fetch(`https://rdap.org/ip/${pfx}`)).json().catch(() => ({}))
const raw = JSON.stringify(rdap)
const origins = (await stat('prefix-overview', `resource=${pfx}`)).asns.map(a => a.asn)
const rpki = {}
for (const asn of [...origins, ...AMAZON])
rpki[asn] = (await stat('rpki-validation', `resource=AS${asn}&prefix=${pfx}`)).status
const ok = len <= 24 && AMAZON.every(a => rpki[a] === 'valid') && raw.includes('BEGIN CERTIFICATE')
console.log(`\n${pfx} ${rdap.handle ?? '?'} ${rdap.type ?? '?'} ${rdap.country ?? ''}`)
console.log(` size /${len} (AWS takes /24 or larger): ${len <= 24 ? 'ok' : 'too small'}`)
for (const [asn, s] of Object.entries(rpki))
console.log(` ROA AS${asn}${AMAZON.includes(+asn) ? ' (Amazon)' : ' (origin today)'}: ${s}`)
console.log(` X.509 certificate in the registry record: ${raw.includes('BEGIN CERTIFICATE') ? 'yes' : 'no'}`)
console.log(` ready to provision: ${ok ? 'yes' : 'no'}`)
}
// Cost: AWS-provided public IPv4 vs a /24 brought in (BYOIP addresses carry no AWS IPv4 charge)
const awsMonth = n => n * AWS_IP_HOUR * 730
const buy = 256 * BUY_IP, lease = 256 * LEASE_IP_MONTH
const usd = v => '$' + Math.round(v).toLocaleString('en-US')
console.log(`\npublic IPs | AWS per month | AWS per year | lease /24 per month | buy /24 pays back in`)
for (const n of [10, 35, 50, 100, 256])
console.log(`${String(n).padStart(10)} | ${usd(awsMonth(n)).padStart(13)} | ${usd(awsMonth(n) * 12).padStart(12)} | ${
(usd(lease) + (awsMonth(n) > lease ? ' (cheaper)' : ' (dearer)')).padStart(19)} | ${
(buy / awsMonth(n)).toFixed(1).padStart(6)} months`)
console.log(`/24 to buy: ${usd(buy)} once (+ broker fee, LIR or sponsoring LIR); lease: ${usd(lease)} a month`)
bun byoip_check.js AS204057
Salida, ejecutado en un servidor cloud de DCXV con Bun 1.4.4 el 2026-11-04 (nuestro propio AS204057; los otros cuatro prefijos dieron el mismo resultado que el primero):
116.204.153.0/24 116.204.153.0 - 116.204.153.255 ALLOCATED PA CZ
size /24 (AWS takes /24 or larger): ok
ROA AS14618 (Amazon): invalid_asn
ROA AS16509 (Amazon): invalid_asn
ROA AS204057 (origin today): valid
X.509 certificate in the registry record: no
ready to provision: no
public IPs | AWS per month | AWS per year | lease /24 per month | buy /24 pays back in
10 | $37 | $438 | $125 (dearer) | 178.1 months
35 | $128 | $1,533 | $125 (cheaper) | 50.9 months
50 | $183 | $2,190 | $125 (cheaper) | 35.6 months
100 | $365 | $4,380 | $125 (cheaper) | 17.8 months
256 | $934 | $11,213 | $125 (cheaper) | 7.0 months
/24 to buy: $6,502 once (+ broker fee, LIR or sponsoring LIR); lease: $125 a month
Nuestros prefijos, como es lógico, no están listos: solo los anuncia AS204057 y no tienen ROA de Amazon ni certificado. invalid_asn para 16509 y 14618 es justo lo que verás antes del paso 3, y valid es lo que necesitas después. Las constantes de precio están fechadas al principio del script: cámbialas cuando tengas una cotización.
Comprar, alquilar o seguir pagando a AWS
| IPv4 públicas en AWS | Ruta más barata (precios de octubre de 2026) | Ojo con |
|---|---|---|
| Menos de unas 35 | Mantener las direcciones de AWS | Una Elastic IP inactiva cuesta los mismos $0.005 por hora |
| Unas 35 a 100 | Alquilar un /24 y traerlo | El arrendador debe crear la ROA de Amazon y el certificado |
| Unas 100 a 256 | Comprar un /24 | Se amortiza en 7 a 18 meses; el bloque sigue siendo un activo |
| Varias regiones | Comprar un /22 o mayor y dividirlo en /24 | Una ROA y un registro cubren todos |
| Salir de AWS más adelante | Comprar | El bloque se va contigo; las direcciones de AWS no |
La tabla usa las cifras de octubre de 2026 del script: la mediana de 90 días de ip4.market de $25.40 por IP sobre 80 ventas de /24 hasta el 2026-10-26, y el promedio de alquiler de /24 de IPv4Center para todas las regiones de $0.49 por IP al mes (página actualizada el 2026-10-28). Una compra también necesita un LIR o un LIR patrocinador y una comisión de bróker; la comisión publicada de DCXV para una operación de /24 es EUR 2.00 por IP. Tras una transferencia en RIPE el bloque no puede transferirse de nuevo durante 24 meses, lo que no impide usarlo en AWS. Compara las dos vías en alquilar o comprar IPv4.
Dos puntos prácticos. Con un alquiler, BYOIP solo funciona si el arrendador acepta añadir los ASN de Amazon a la ROA y tu certificado al registro: pregúntalo antes de firmar. Y si además pagas soporte de AWS, recuerda que es un porcentaje de toda la factura, cargos de IPv4 incluidos, como muestra nuestra guía de soporte y facturación de AWS.
Dónde encaja DCXV
DCXV hace de bróker IPv4 en las regiones de RIPE, ARIN y APNIC: encontramos un /24 limpio en venta o alquiler, revisamos su historial y gestionamos la transferencia, para que los pasos de ROA y certificado empiecen en cuanto el bloque esté a tu nombre. Cuéntanos cuántas direcciones usas en AWS y en qué regiones en el área IPv4 de DCXV o en ipv4@dcxv.com.
