据我所知,基本网络配置进入/etc/network/interfaces
,系统根据这些信息生成路由表。我还被告知,通常/etc/network/interfaces
是永久添加自定义命令来操作路由表的地方(有时也建议是/etc/rc.local
或 中的自定义脚本/etc/network/if-up.d/
)。此外,还可以在 中指定自定义路由表/etc/iproute2/rt_tables
。
- 还有其他地方会影响(主)路由表吗?
- 具体来说,除了
/etc/network/interfaces
使手动添加/删除的路线永久保留之外,还有其他可能性吗?
- 具体来说,除了
- 具有多个 NIC 的系统是否有以下概念:基本的和辅助网络接口或者这些只是用来帮助用户的措辞?(在设置过程中,必须选择主要的 if 并且
/etc/network/interfaces
将包含适当的注释。)如果存在这样的概念,那么可以在哪里配置它? - Debian Squeeze 和 Debian Jessie 的路由表概念有何不同?
我的问题的背景是,我有一个旧的 Debian Squeeze 系统和一个新的 Debian Jessie 系统,它们启动时使用不同的路由表,但(据我所知)配置相同。我可以手动操作路由表以满足我的需求,并使更改永久生效,/etc/network/interfaces
但我想了解发生了什么。
编辑
这是两台机器的配置文件。出于隐私原因,我更改了每个 IP 地址的前部分。但是,子网和相应网络的地址部分没有更改。Jessie/etc/network/interfaces.d/
机器上的目录是空的。
/etc/iproute2/rt_tables
关于杰西
#
# reserved values
#
255 local
254 main
253 default
0 unspec
#
# local
#
#1 inr.ruhep
/etc/iproute2/rt_tables
挤压
#
# reserved values
#
255 local
254 main
253 default
0 unspec
#
# local
#
#1 inr.ruhep
/etc/rc.local
关于杰西
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
exit 0
/etc/rc.local
挤压
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
exit 0
/etc/network/interfaces
关于杰西
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
source /etc/network/interfaces.d/*
# The loopback network interface
auto lo
iface lo inet loopback
auto eth1
iface eth1 inet static
address 143.103.155.254
netmask 255.255.255.0
network 143.103.155.0
gateway 143.103.155.254
# The primary network interface
auto eth2
iface eth2 inet static
address 27.126.19.194
netmask 255.255.255.248
network 27.126.19.192
broadcast 27.126.19.199
gateway 27.126.19.193
# dns-* options are implemented by the resolvconf package, if installed
dns-nameservers 143.103.5.1
dns-search subdomain.domain.de
/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 static
address 143.103.155.254
netmask 255.255.255.0
network 143.103.155.0
gateway 143.103.155.254
auto eth2
iface eth2 inet static
address 27.126.19.194
netmask 255.255.255.248
network 27.126.19.192
broadcast 27.126.19.199
gateway 27.126.19.193
ip route show table main
Jessie的输出
default via 143.103.155.254 dev eth1
143.103.155.0/24 dev eth1 proto kernel scope link src 143.103.155.254
27.126.19.192/29 dev eth2 proto kernel scope link src 27.126.19.194
ip route show table main
Squeeze的输出
27.126.19.192/29 dev eth2 proto kernel scope link src 27.126.19.194
143.103.155.0/24 dev eth0 proto kernel scope link src 143.103.155.254
default via 27.126.19.193 dev eth2
default via 143.103.155.254 dev eth0 scope link
route -n
Jessie的输出
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 143.103.155.254 0.0.0.0 UG 0 0 0 eth1
143.103.155.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
27.126.19.192 0.0.0.0 255.255.255.248 U 0 0 0 eth2
route -n
Squeeze的输出
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
27.126.19.192 0.0.0.0 255.255.255.248 U 0 0 0 eth2
143.103.155.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
0.0.0.0 27.126.19.193 0.0.0.0 UG 0 0 0 eth2
0.0.0.0 143.103.155.254 0.0.0.0 UG 0 0 0 eth0
答案1
你们两个/etc/网络/接口文件包含同一个错误:默认网关被指定了两次。
只有在非常特殊的情况下(忽略指标),您才可以拥有多个默认网关:您有多个路由表,每个路由表都在文件中指定/etc/iproute2/rt_tables,但每个路由表应有一个单身的默认网关。
相反,您可以为每个接口指定一个同一张桌子 主要的。因此,我们在这里看到的是iproute2包,以及它如何响应错误。
如果是杰西,它将第一个提到的网关 143.103.155.254 确立为唯一网关,仅仅是因为它是第一个被提及的。当声明第二个网关 27.126.19.193 时,什么也不会发生,因为它是不是之前
ip route del default
相反,Squeeze 以不同的方式处理错误:它限制范围第二个网关本地链接. 欲了解更多信息范围, 看iproute2 手册,其中指出:
范围链接 --- 该地址是链接本地,仅在此设备上有效。
维基百科指出:
在计算机网络中,链路本地地址是仅对主机所连接的网段(链路)或广播域内的通信有效的网络地址。
因此,范围(不精确的同义词范围)的第二个网关已经非常限制在其网络段(IE,其广播域为 143.103.155.0/24)。因此,Jessie 也以不同的方式应对了您在同一个路由表中错误声明多个网关的情况。
当然,没有预期行为了解包如何处理错误。正确的方法是设置/etc/网络/接口文件是省略语句
gateway 143.103.155.254
(这也很奇怪,因为它说你自己电脑的网关是……它自己!)。要查看对此的详细解释,请阅读初始解决方案段落在此处;稍后还解释了如何添加多个网关,以及多个路由表。
如果如你所说,
我可以再试一次来验证,但我很确定我已经尝试过了,但仍然无法访问任何外部 IP。
这很可能是因为您不允许 IPv4 从一个接口转发到另一个接口(如 sudo:
echo 1 > /proc/sys/net/ipv4/ip_forward
处理该问题),或者因为你的 iptables 规则阻止了转发。
答案2
Squeeze 和 Jessie 之间的主要区别在于ip
命令要求ifconfig
第一个和iproute2
最后一个。
ifconfig 不知道多个网关配置,至少没有指标。这就是为什么您会看到两个ip route
命令之间的差异(或route -n
(已弃用))
iproute2 可以跟踪多个路由表
ip route show all
主网络接口和次网络接口的概念只是一种区分它们的方式,通常称为 eth0(第一个)和 eth1(第二个),但顺序可能会有所不同!
是的,您可以通过以下方式设置永久/etc/network/interfaces
路线up
:
up ip route add 1.2.3.4/24 via 1.2.3.1