Solución 1:
Linux 2.6.37 y superior admite esto a través de una característica llamada AnyIP. Por ejemplo, si corro
ip route add local 2001:db8::/32 dev lo
en una máquina Ubuntu 11.04 aceptará conexiones en cualquier dirección en la red 2001:db8::/32.
Solución 2:
Sí, Linux admite vincular un bloque de direcciones de red a una interfaz de red... pero solo en la interfaz de bucle invertido. Así que puedes hacer esto:
ip addr add 192.168.5.0/24 dev lo
Y luego haz esto:
$ nmap -sP -oG - 192.168.5.0/24
# Nmap 5.21 scan initiated Tue Dec 7 11:38:28 2010 as: nmap -sP -oG - 192.168.5.0/24
Host: 192.168.5.0 () Status: Up
Host: 192.168.5.1 () Status: Up
Host: 192.168.5.2 () Status: Up
[...]
Host: 192.168.5.254 () Status: Up
Host: 192.168.5.255 () Status: Up
# Nmap done at Tue Dec 7 11:38:46 2010 -- 256 IP addresses (256 hosts up) scanned in 0.11 seconds
Con las rutas apropiadas en su lugar, esto hará lo que quiera... para las direcciones IPv4. Ha preguntado acerca de IPv6 y no tengo ninguna experiencia con IPv6, pero es muy probable que funcione de la misma manera.
Originalmente leí sobre esto aquí (al final del artículo). Tenga en cuenta que este artículo también analiza cómo asignar explícitamente varias direcciones a una interfaz utilizando funciones de CentOS/Red Hat que no conocía anteriormente.
Solución 3:
Así que veo algunas opciones aquí:
-
use un script para vincular todas las direcciones a la interfaz individualmente
-
enrute el bloque que desea a la dirección única de su máquina y luego haga que esa máquina use la interfaz pcap para interceptar todo el tráfico de dicho bloque (como si fuera un enrutador) y manejarlo.
-
Posiblemente podría jugar trucos con las reglas de NAT para luego reescribir un bloque de IP que se enrutaron a una máquina en una sola IP interna en esa máquina... pero aún así terminará con una IP interna por IP que realmente desea pagar. atención a, lo que lo lleva de regreso a la solución 1.
Si yo fuera tú, simplemente escribiría el pequeño guión en la opción 1. O usaría el de aquí:
#!/bin/sh
if [ "$#" -ne "4" ]; then
echo Usage:
echo " $0 interface ip range netmask"
echo " examples:"
echo " 1) Assuming you want to bind the IP range 192.168.0.1..192.168.0.254 to eth0 with netmask 255.255.255.0:"
echo " $0 eth0 192.168.0. 1..254 255.255.255.0"
echo " 2) Assuming you want to bind the IPv6 range 2001:41d0:1:5000::1-2001:41d0:1:5000::254 to eth0 with netmask /56"
echo " $0 eth0 2001:41d0:1:5000:: 1..254 56"
else
echo "Attempting to assign the IP range $2($3) to interface $1 with netmask $4"
for ip in $(eval echo "{$3}"); do ifconfig -v $1 add $2$ip netmask $4; done
fi
Solución 4:
Como han dicho otros, puede usar el mecanismo AnyIP para enrutar los paquetes que llegan para una subred completa a la interfaz localhost, pero tenga en cuenta que también necesitará que su enrutador ascendente enrute todos los paquetes deseados a esta máquina en El primer lugar. Esto se puede hacer simplemente con las entradas de la tabla de enrutamiento en el enrutador o mediante BGP. ARP no es realmente apropiado dado que su máquina tendría que ARP para cada IP individualmente.