Lösung 1:
Linux 2.6.37 und höher unterstützt dies über eine Funktion namens AnyIP. Zum Beispiel wenn ich renne
ip route add local 2001:db8::/32 dev lo
Auf einem Ubuntu 11.04-Rechner akzeptiert es Verbindungen an jeder Adresse im 2001:db8::/32-Netzwerk.
Lösung 2:
Ja, Linux unterstützt das Binden eines Blocks von Netzwerkadressen an eine Netzwerkschnittstelle ... aber nur auf der Loopback-Schnittstelle. So können Sie Folgendes tun:
ip addr add 192.168.5.0/24 dev lo
Und dann tun Sie dies:
$ 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
Mit den entsprechenden Routen wird dies das tun, was Sie wollen ... für IPv4-Adressen. Sie haben nach IPv6 gefragt, und ich habe keine Erfahrung mit IPv6, aber es besteht eine gute Chance, dass es genauso funktioniert.
Ich habe ursprünglich hier darüber gelesen (am Ende des Artikels). Beachten Sie, dass dieser Artikel auch beschreibt, wie man einer Schnittstelle explizit mehrere Adressen zuweist, indem CentOS/Red Hat-Funktionen verwendet werden, von denen ich vorher nichts wusste.
Lösung 3:
Also sehe ich hier ein paar Optionen:
-
Verwenden Sie ein Skript, um die Adressen einzeln an die Schnittstelle zu binden
-
Leiten Sie den gewünschten Block an die einzelne Adresse Ihrer Maschine und lassen Sie diese Maschine dann die pcap-Schnittstelle verwenden, um den gesamten Datenverkehr für diesen Block abzufangen (als ob es ein Router wäre) und ihn zu verarbeiten.
-
Sie könnten möglicherweise Tricks mit NAT-Regeln spielen, um dann einen Block von IPs, die zu einer Maschine geroutet wurden, in eine einzige interne IP auf dieser Maschine umzuschreiben ... aber Sie werden immer noch eine interne IP pro IP haben, die Sie wirklich bezahlen möchten beachten, was Sie zu Lösung 1 zurückbringt.
Wenn ich Sie wäre, würde ich einfach das kleine Skript in Option 1 schreiben. Oder verwenden Sie das von hier:
#!/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
Lösung 4:
Wie andere gesagt haben, können Sie den AnyIP-Mechanismus verwenden, um ankommende Pakete für ein ganzes Subnetz an die localhost-Schnittstelle weiterzuleiten, aber denken Sie daran, dass Sie auch Ihren Upstream-Router dazu bringen müssen, alle gewünschten Pakete an diese Maschine weiterzuleiten den ersten Platz. Dies kann einfach mit Routing-Tabelleneinträgen auf dem Router oder über BGP erfolgen. ARP ist nicht wirklich geeignet, da Ihr Rechner für jede IP einzeln ARP durchführen müsste.