我正在使用 Debian 7.0。
我有一台连接了两个 NIC 的机器,我想为这台机器分配两个静态 IP 地址。
这是我的配置/etc/network/interfaces
:
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet dhcp
auto eth1
iface eth1 inet dhcp
结果如下/sbin/ifconfig
:
如您所见,两个网卡都收到了静态 IP 地址。
奇怪的问题是,您只能从 ping/访问 IP eth1
。因此,即使我有两个 NIC,我也只有一个 IP 用于该机器。
我的错误在哪里,为什么我无法从eth0
另一台机器到达/访问/ping 该 IP?
您也可以尝试 ping 然后您就会看到结果。
我希望你可以帮助我!
答案1
可能是因为具有两个 NIC 的系统正尝试从eth0
之外发送回复 ICMP ping 消息eth1
。
当您的系统将流量发送到网络时,它会查阅其本地转发信息库 (FIB) 或路由表。
路由表将包含子网和可到达该子网的接口列表。每个传出的数据包都会与此表中的每个条目进行比较,子网 CIDR 编号最高的数据包将“获胜”并用于发送流量。如果没有获胜者,则使用默认网关。
您有 2 个条目,它们具有相同的子网 CIDR,并且指向同一个子网。从本质上讲,就您的系统而言,它们指向同一个位置,因此使用哪个并不重要。您的网络堆栈将使用遇到的第一个条目,将流量发送出去,然后完成处理。IP 编号最小的 NIC 可能首先出现在您的路由表中。
您需要研究 Linux 的策略路由功能(谷歌“策略路由”,祝你好运,因为我自己正在研究它),或者iptables
如果您真的想这样做,研究重定向流量。
答案2
简单的方法
就您的知识水平而言,最好忽略第二个 NIC(即断开连接),并将 2 个 IP 地址绑定到第一个 NIC。缺点是缺乏冗余,并且速度只能达到 1 个 NIC。
为此(对于 eth0),请修改 /etc/network/interfaces 文件以读取:
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet static
address A.A.A.A
netmask 255.255.252.0
gateway X.X.X.X
auto eth0:1
iface eth0:1 inet static
address B.B.B.B
netmask 255.255.252.0
请注意,您需要输入 XXXX 的正确网关地址。您还需要确保 IP 地址(AAAA 和 BBBB)不在 DHCP 范围内。
艰难之路
这里的想法是让 2 个接口充当 1 个双速接口(如果拔掉一个接口,仍能够继续工作),然后调出与上面类似的 IP 地址。
要克服的第一个困难是确定使用哪种模式。这里没有一刀切的解决方案,关键是选择最适合您和您的硬件的解决方案。看看这里了解不同模式的描述。如果有疑问,请使用模式 0 - 这不需要花哨的硬件,但您只能获得出站流量的通道绑定的全部效果,但您仍然可以获得冗余。如果您在 LAN 上有许多不同地址的流量,模式 2 也是一个不错的选择。
您需要创建一个类似 /etc/modprobe.d/bonding.conf 的文件来告诉系统您想要如何进行绑定
alias bond0 bonding
options bond0 mode=0 miimon=100
(以上假设您使用模式 0)。
使此更改生效的最简单方法是重新启动计算机。
现在,您的系统上将有一个新的接口“bond0”。使用 /etc/networks/interfaces,您现在可以控制 2 个以太网接口,然后按照上述示例 1 启动虚拟接口。
因此文件看起来会像这样
# The loopback network interface
auto lo
iface lo inet loopback
# Enslave the ethernet drivers
auto eth0
iface eth0 inet manual
bond-master bond0
bond-primary eth0
auto eth1
iface eth1 inet manual
bond-master bond0
bond-primary eth1
# The primary network interface
auto bond0
iface bond0 inet static
address A.A.A.A
netmask 255.255.252.0
gateway X.X.X.X
auto bond0:1
iface bond0:1 inet static
address B.B.B.B
netmask 255.255.252.0