Solution 1 :
Linux 2.6.37 et supérieur le prend en charge via une fonctionnalité appelée AnyIP. Par exemple si je cours
ip route add local 2001:db8::/32 dev lo
sur une machine Ubuntu 11.04, il acceptera les connexions sur n'importe quelle adresse du réseau 2001:db8::/32.
Solution 2 :
Oui, Linux prend en charge la liaison d'un bloc d'adresses réseau à une interface réseau... mais uniquement sur l'interface de bouclage. Vous pouvez donc faire ceci :
ip addr add 192.168.5.0/24 dev lo
Et puis faites ceci :
$ 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
Avec les routes appropriées en place, cela fera ce que vous voulez... pour les adresses IPv4. Vous avez posé des questions sur IPv6, et je n'ai aucune expérience avec IPv6, mais il y a de fortes chances que cela fonctionne de la même manière.
J'ai d'abord lu à ce sujet ici (vers le bas de l'article). Notez que cet article explique également comment attribuer explicitement plusieurs adresses à une interface à l'aide de fonctionnalités CentOS/Red Hat que je ne connaissais pas auparavant.
Solution 3 :
Je vois donc quelques options ici :
-
utiliser un script pour lier toutes les adresses à l'interface individuellement
-
acheminez le bloc que vous voulez vers l'adresse unique de votre machine, puis demandez à cette machine d'utiliser l'interface pcap pour intercepter tout le trafic pour ledit bloc (comme s'il s'agissait d'un routeur) et le gérer.
-
Vous pourriez éventuellement jouer des tours avec les règles NAT pour ensuite réécrire un bloc d'Ips qui ont été acheminés vers une machine en une seule IP interne sur cette machine... mais vous vous retrouverez toujours avec une IP interne par IP que vous voulez vraiment payer attention, ce qui vous ramène à la solution 1.
Si j'étais vous, j'écrirais simplement le petit script de l'option 1. Ou utilisez celui d'ici :
#!/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
Solution 4 :
Comme d'autres l'ont dit, vous pouvez utiliser le mécanisme AnyIP pour acheminer les paquets entrants d'un sous-réseau entier vers l'interface localhost, mais gardez à l'esprit que vous devrez également faire en sorte que votre routeur en amont route tous les paquets souhaités vers cette machine. la première place. Cela peut être fait simplement avec des entrées de table de routage sur le routeur ou via BGP. ARP n'est pas vraiment approprié étant donné que votre machine devrait ARP pour chaque IP individuellement.