首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正常单播通信使用网络和广播IPv4地址

正常单播通信使用网络和广播IPv4地址
EN

Server Fault用户
提问于 2019-12-16 15:48:28
回答 1查看 148关注 0票数 2

考虑到当前IPv4地址的耗尽,我想尝试使用by /29前缀的网络和广播地址。

这个是可能的吗?

我从赫茨纳租了一个/29,并将各个IP分配给运行在专用服务器上的虚拟机。

服务器本身有来自不同子网的另一个IPv4地址。

EN

回答 1

Server Fault用户

发布于 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接口。

一如既往地在Linux上配置标准的/29局域网,但删除第一个和最后一个IP地址

的特殊广播角色。

  • 专业:..。帮助介绍第三种方法。
  • con:使用一个技巧,这必须在每次网络接口被行政地关闭之后再执行,或者进行IP地址更改。它必须在接口打开后应用,可能会有一个轻微的流量中断窗口。

一旦添加了地址并启动了接口,本地路由表将接收两个广播地址:第一个和最后一个网络块:

代码语言:javascript
复制
# 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地址:

代码语言:javascript
复制
# 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命令)。

和往常一样,将默认路由添加到服务器:

代码语言:javascript
复制
# 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桥上启用端口隔离?)。

对/32局域网

中的任何IP地址使用/32地址和/32路由

  • 支持:非常类似于某些主机提供商(这里不是很清楚的例子)描述的故障转移-IP设置,因此可能已经有各种OSes的文档可用。
  • con:要求为每个对等点设置一条路由。

虽然接口在第二层仍然是(虚拟的)以太网接口,并且仍将像往常一样使用ARP来解析遮罩下的IPv4地址,但是所有的路由都将被添加,就像第三层点对点路由一样。

例如,在使用192.0.2.0 IP地址的系统上,地址将添加如下:

代码语言:javascript
复制
# ip address add 192.0.2.0/32 dev eth0

它不会在主路由表中添加任何路由,而只在本地表中添加范围主机路由。现在必须手动添加主路由表中的路由:

代码语言:javascript
复制
# ip route add 192.0.2.1/32 dev eth0

前两个命令( /32地址+一个/32路由,可能是到路由器)可以在下面的单个命令中进行缩写:

代码语言:javascript
复制
# ip address add 192.0.2.0 peer 192.0.2.1/32 dev eth0

额外的好处是,当接口关闭/向上时,内核会自动添加路由。

仍然必须像往常一样添加默认路由:

代码语言:javascript
复制
# ip route add default via 192.0.2.1

如果此VM必须与其他VM通信,只需根据需要添加其特定的/32路由:

代码语言:javascript
复制
# 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路由

  • 赞成:简单
  • con:我看不见,除了我也不知道非Linux的等价物。

添加一个/32地址(因此,内核不会自动将任何特殊广播路由添加到本地路由表中),并手动完成通常的/29路由,内核不会自动在主路由表中添加该路由:

代码语言:javascript
复制
# 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路由,然后再手动添加。

票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/995753

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档