我知道ip工具可让您将多个地址绑定到一个接口(例如,http : //www.linuxplanet.com/linuxplanet/tutorials/6553/1/)。不过,现在,我正在尝试在IPv6之上构建一些东西,并且拥有整个可用地址块(例如/ 64)将非常有用,以便程序可以从范围和地址中选择任何地址。绑定到那个。不用说,将这个范围内的每个IP附加到接口上都需要一段时间。
Linux是否支持将整个地址块绑定到接口?
我知道ip工具可让您将多个地址绑定到一个接口(例如,http : //www.linuxplanet.com/linuxplanet/tutorials/6553/1/)。不过,现在,我正在尝试在IPv6之上构建一些东西,并且拥有整个可用地址块(例如/ 64)将非常有用,以便程序可以从范围和地址中选择任何地址。绑定到那个。不用说,将这个范围内的每个IP附加到接口上都需要一段时间。
Linux是否支持将整个地址块绑定到接口?
Answers:
Linux 2.6.37及更高版本通过称为AnyIP的功能支持此功能。例如,如果我跑步
ip route add local 2001:db8::/32 dev lo
在Ubuntu 11.04机器上,它将接受2001:db8 :: / 32网络中任何地址上的连接。
ip route list
或ip -6 route list
添加的路由不可见时。您将如何枚举AnyIP地址块?
是的,Linux支持将一部分网络地址绑定到网络接口……但仅在回送接口上。因此,您可以执行以下操作:
ip addr add 192.168.5.0/24 dev lo
然后执行以下操作:
$ 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
有了适当的路由,这将为IPv4地址做您想要的...。您已经问过有关IPv6的问题,而我对IPv6没有任何经验,但是很有可能它将以相同的方式工作。
我最初是在这里读到的(在本文的底部)。请注意,本文还讨论了如何使用我以前不知道的CentOS / Red Hat功能将多个地址显式分配给接口。
ip -6 route add local <ip> dev lo
。
所以我在这里看到一些选择:
使用脚本将所有地址分别绑定到接口
将所需的块路由到计算机的单个地址,然后让该计算机使用pcap接口拦截该块的所有流量(就好像它是路由器一样)并进行处理。
您可以轻松地使用NAT规则来欺骗,然后将路由到一台计算机的Ips块重写为该计算机上的单个内部IP ...但是您最终仍将获得每个IP真正要支付的内部IP注意,这将使您回到解决方案1。
如果您是我,我只会在选项1中编写小脚本。或者使用此处的脚本:
#!/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
正如其他人所说,您可以使用AnyIP机制将到达整个子网的数据包路由到localhost接口,但是请记住,您还需要使上游路由器将所有所需的数据包路由到该计算机中。第一名。这可以简单地通过路由器上的路由表条目或通过BGP完成。鉴于您的计算机必须为每个IP分别使用ARP,因此ARP并不是很合适。
上面描述的“ Anyip”在centos 7上对我不起作用。我必须创建一个脚本来在启动时手动创建ipv6地址。为此,我在/ etc / crontab中添加了以下内容:
@reboot root /path/to/bashscript
这是创建约3000个ipv6地址的bash脚本:
#!/bin/bash
INETP="2a00:xxxx:xxxx:xxxx::"
PRE="64"
INTE="eth0"
IP1=/sbin/ip
echo -n "Adding IPv6 addresses..."
for i in {3..3000}
do
$IP1 -6 addr add ${INETP}$(printf '%x\n' $i)/${PRE} dev ${INTE}
done
echo "Done!"