No es correcto usar direcciones IP (ni IPv4, ni IPv6) en rangos. La forma correcta de agrupar un "rango" particular de direcciones IP es usar prefijos (notación CIDR) o máscaras (obsoletos, solo válidos para IPv4, y la locura se produce si intenta utilizar una máscara no contigua).
A veces verá a alguien (a veces incluso aplicaciones, enrutadores hogareños, etc.) utilizando rangos de IPv4, pero esa es la forma incorrecta de hacerlo.
Usando Classless Inter-Domain Routing (CIDR) tendrá una Dirección tupla <, Prefijo >, donde dirección es un entero sin signo de 128 bits y prefijo es una pequeña (0..128) entero sin signo. El prefijo indica cuántos bits más significativos de la dirección representan la dirección de red, dejando los otros bits menos significativos de 128 prefijos para representar un host particular en esa red.
Así, por ejemplo, un "rango" de IPv6 de 2620: 0: 860: 2 ::/64 (wikimedia.org) representa todos los hosts desde 2620: 0: 860: 2 :: hasta 2620: 0: 860: 2: FFFF: FFFF: FFFF: FFFF.
No debe usar dos "letras grandes" para almacenar dicho valor en una base de datos, pero use cualquier representación nativa en una sola columna, a menos que desee convertir su vida de desarrollador en una pesadilla. Si su DBMS no admite números enteros tan grandes, además de reemplazar su DBMS, sugiero usar una columna de datos binarios de tamaño fijo, de 16 bytes de longitud.
El siguiente hilo fue sugerido por [@vinS] (https://stackoverflow.com/users/977855/vins) como solución a su pregunta IPv6: https: //stackoverflow.com/questions/53497/regular-expression-that-matches-valid-ipv6-addresses – datv