我有三台服务器,目前 IP 分别为 192.168.1.1、192.168.1.2 和 192.168.1.3。它们可以互相看到并互相通信。我想在 192.168.1.x 之上创建第二个子网,即 10.170.xx
我可以使用 为三台服务器(10.170.0.1、10.170.0.2 和 10.170.0.3)分别分配 IP ip addr add 10.170.0.1 dev eth0
。我遇到的问题是如何进行路由。我无法通过 10.170.xx 网络 ping 任何服务器。我认为我需要创建一些对等桥接器,但我不知道如何开始。有什么想法吗?
答案1
正如其他人所指出的,当您使用ip address add
但不提供网络掩码或 CIDR 范围时,/32
则会假定没有为子网创建路由。
为了解决该问题,您还可以添加 CIDR 范围:
ip addr add 10.170.0.1/16 dev eth0
做出改变执着的你将其添加到/etc/network/interfaces
。这可以通过命令以便宜而肮脏的方式完成post-up
,但正确的方法是添加仅包含该地址的第二个节:
auto eth0
iface eth0 inet static
address 192.168.1.1
netmask 255.255.255.0
gateway 192.168.1.250
iface eth0 inet static
address 10.170.0.1
netmask 255.255.0.0
特别要注意的是,尽管你会在过时的互联网指南中看到什么,但你应该不是用于eth0:0
第二个 IP 地址。此格式已被弃用,并且已经弃用多年(这意味着它随时可能从 Linux 中删除)。
答案2
尝试ip addr add 10.170.0.1/16 dev eth0
这样做,这样您就可以指定网络掩码。我敢打赌,否则他们会添加 /32 IP 空间(尽管我还没有证实这一点)。
答案3
这是一个有趣的挑战,有许多解决方案。你的问题的措辞确实留下了一些疑问,但我认为从上下文来看,我知道你想做什么。
我假设这些主机都在同一个物理网段上 - 例如连接到集线器或交换机,并且可以在 192.168.1.x 网络上互相 ping 而不通过路由器。在这种情况下,你确实需要第二个网络平行线与原文相比——有点挑剔,但我认为,这和理解正在发生的事情有关。
我确实认为 Eric Renouf 的上述回答很可能是正确的 - 默认情况下,iproute2 可能会添加一个 32 位网络掩码 - 255.255.255.255 - 这在许多涉及/需要路由的情况下是正确的,例如在大型托管提供商中,一些机器有多个 IP 地址,随着时间的推移而分发。如果您确实打算使用整个 10.170.xx 空间,您可能需要一个 24 位网络掩码 - 255.255.255.0 - 甚至 16 位。
另外,地址的“.xx”位在这里确实是一个重要的细节,通常我们会使用网络的“网络地址”来描述网络,即特定子网范围内的底部地址。在这种情况下,您的网络地址是 192.168.1.0/24 和 10.170.0.0/16。可以有小于 C 类大小/24 位的子网,其中网络地址不为零。我不会讲得太详细,但强烈建议花一些时间阅读有关子网划分的资料。
现在我们知道要避免使用默认网络掩码以及原因,请考虑:
ip addr del 10.170.0.1 dev eth0
ip addr add 10.170.0.1/16 dev eth0
在每台机器上重复此操作。如果您希望在启动时配置这些,还可以考虑在 /etc/network/interfaces 中添加此行作为启动命令。
希望这可以帮助!
答案4
服务器是虚拟机吗?如果是,您可以考虑添加补充接口。
但是,正如其他人提到的,只需添加具有适当网络掩码的 IP,那么两个主机就可以通信。
ctxadm@ctx-router1:~$ sudo ip addr add 10.75.0.5/24 dev eth1
来自在 vmware 上运行的 2 个 debian 的证明:
ctxadm@ctx-router1:~$ sudo ip addr list eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:a4:1f:e6 brd ff:ff:ff:ff:ff:ff
inet 10.92.0.254/24 brd 10.92.0.255 scope global eth1
inet 10.75.0.5/24 scope global eth1
ctxadm@web1:~$ sudo ip addr list eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:22:1a:8a brd ff:ff:ff:ff:ff:ff
inet 10.92.0.20/24 brd 10.92.0.255 scope global eth0
inet 10.75.0.6/24 scope global eth0
ctxadm@ctx-router1:~$ ping 10.75.0.6
PING 10.75.0.6 (10.75.0.6) 56(84) bytes of data.
64 bytes from 10.75.0.6: icmp_req=1 ttl=64 time=0.157 ms
64 bytes from 10.75.0.6: icmp_req=2 ttl=64 time=0.185 ms
ctxadm@ctx-router1:~$ sudo arp -a
? (192.168.0.20) at 20:cf:30:7f:6c:3e [ether] on eth0
? (10.75.0.6) at 00:0c:29:22:1a:8a [ether] on eth1
? (192.168.0.1) at 00:10:18:de:ad:05 [ether] on eth0
就是这样 !
要调试使用 tcpdump,请检查 arp 条目..