考虑到当前IPv4地址的耗尽,我想尝试使用by /29前缀的网络和广播地址。
这个是可能的吗?
我从赫茨纳租了一个/29,并将各个IP分配给运行在专用服务器上的虚拟机。
服务器本身有来自不同子网的另一个IPv4地址。
发布于 2020-05-15 00:37:38
这是一个只有Linux的答案(但至少第二种方法不是非常特定于Linux,所以可能可以与其他OSes一起使用)。
以下是用于Linux服务器(这里充当路由器)和使用VM也运行Linux的三种方法。第一种方法就是为了帮助介绍第三种方法。应该使用第二种或第三种方法,而不是第一种。这三种方法都可以一起使用(例如:一些VM使用一种方法,其他方法使用另一种方法,Linux服务器充当路由器时使用相同的方法)。
在下面的示例中,我假设IP地址块是192.0.2.0/29,服务器在这个块中的IP是192.0.2.1/29,直接设置在名为bridge0的桥接接口上(通常是通过虚拟化软件实现的)。VMs将有一个eth0接口。
的特殊广播角色。
一旦添加了地址并启动了接口,本地路由表将接收两个广播地址:第一个和最后一个网络块:
# ip address add 192.0.2.2/29 dev eth0
# ip link set dev eth0 up
# ip route show table local dev eth0
broadcast 192.0.2.0 proto kernel scope link src 192.0.2.2
local 192.0.2.2 proto kernel scope host src 192.0.2.2
broadcast 192.0.2.7 proto kernel scope link src 192.0.2.2 只要删除这两个额外的广播条目,就可以删除网络和广播地址的特殊角色,将它们转换为通信中的普通单播IP地址:
# ip route flush table local dev eth0 type broadcast
# ip route show table local dev eth0
local 192.0.2.2 proto kernel scope host src 192.0.2.2 在完成之前,这个系统可能无法与192.0.2.0和192.0.2.7进行适当的通信。系统必须有自定义的配置设置,才能在启动时或在打开接口时(例如,某些类似Debian的系统在/etc/network/interface中使用C11命令)。
和往常一样,将默认路由添加到服务器:
# ip route add default via 192.0.2.1对于使用192.0.2.0和192.0.2.7的系统也是如此。在取消广播线路之前,这些系统可能与任何其他系统有通信问题。
就这样。但是,如果接口被关闭/向上或其IP地址被更改,则必须再次执行,因为每次发生这种情况时,内核都会自动重新添加本地表中的广播路由。
如果有些VM不能接受这个设置(例如:不要运行Linux)或下面的选择,那么可能应该对它们和那些使用192.0.2.0和192.0.2.7 (至少涉及3个VM)的VM进行隔离(请参见是否可以在Linux桥上启用端口隔离?)。
中的任何IP地址使用/32地址和/32路由
虽然接口在第二层仍然是(虚拟的)以太网接口,并且仍将像往常一样使用ARP来解析遮罩下的IPv4地址,但是所有的路由都将被添加,就像第三层点对点路由一样。
例如,在使用192.0.2.0 IP地址的系统上,地址将添加如下:
# ip address add 192.0.2.0/32 dev eth0它不会在主路由表中添加任何路由,而只在本地表中添加范围主机路由。现在必须手动添加主路由表中的路由:
# ip route add 192.0.2.1/32 dev eth0前两个命令( /32地址+一个/32路由,可能是到路由器)可以在下面的单个命令中进行缩写:
# ip address add 192.0.2.0 peer 192.0.2.1/32 dev eth0额外的好处是,当接口关闭/向上时,内核会自动添加路由。
仍然必须像往常一样添加默认路由:
# ip route add default via 192.0.2.1如果此VM必须与其他VM通信,只需根据需要添加其特定的/32路由:
# ip route add 192.0.2.2/32 dev eth0
# ip route add 192.0.2.3/32 dev eth0
# ip route add 192.0.2.4/32 dev eth0
# ip route add 192.0.2.5/32 dev eth0
# ip route add 192.0.2.6/32 dev eth0
# ip route add 192.0.2.7/32 dev eth0添加一个/32地址(因此,内核不会自动将任何特殊广播路由添加到本地路由表中),并手动完成通常的/29路由,内核不会自动在主路由表中添加该路由:
# ip address add 192.0.2.3/32 dev eth0
# ip route add 192.0.2.0/29 dev eth0
# ip route add default via 192.0.2.1
# ip route show table local dev eth0
local 192.0.2.3 proto kernel scope host src 192.0.2.3 结果与第一种情况相同,但Linux内核并没有自动在本地路由表中添加可能会破坏的广播地址,因此在进行像down/up这样的更改时,不必删除这些地址。必须手动添加LAN路由,然后再手动添加。
https://serverfault.com/questions/995753
复制相似问题