这是我的问题的删节版本:为什么gateway
在我的网络接口文件中设置参数对我的网络接口没有影响?
或者,为什么post-up
命令在失败的地方起作用gateway
以及设置gateway
参数到底应该做什么?
这是我的问题的详细描述。
/etc/network/interfaces
考虑运行 Debian 的 VirtualBox VM 上的以下网络接口配置文件 ( ):
# /etc/network/interfaces
# Original file
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface (NAT)
auto eth0
allow-hotplug eth0
iface eth0 inet dhcp
# Host-only interface (vboxnet0)
auto eth1
allow-hotplug eth1
iface eth1 inet static
address 192.168.56.2
netmask 255.255.255.0
network 192.168.56.0
broadcast 192.168.56.255
gateway 192.168.56.1
当我启动机器并运行时,route -n
我得到以下输出:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.0.2.2 0.0.0.0 UG 0 0 0 eth0
10.0.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
192.168.56.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
令我惊讶的是,该接口上没有为192.168.56.0/24网络设置网关eth1
。
现在考虑以下替代配置文件:
# /etc/network/interfaces
# Modified file
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface (NAT)
auto eth0
allow-hotplug eth0
iface eth0 inet dhcp
# Host-only interface (vboxnet0)
auto eth1
allow-hotplug eth1
iface eth1 inet static
address 192.168.56.2
netmask 255.255.255.0
network 192.168.56.0
broadcast 192.168.56.255
# gateway 192.168.56.1
post-up route add default gw 192.168.56.1
pre-down route del default gw 192.168.56.1
当我使用此配置重新启动计算机并运行时,route -n
我得到以下输出:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.56.1 0.0.0.0 UG 0 0 0 eth1
0.0.0.0 10.0.2.2 0.0.0.0 UG 0 0 0 eth0
10.0.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
192.168.56.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
因此,结果是设置默认网关的post-up
/方法有效,但使用参数本身则无效。我在这里缺少什么?pre-down
gateway
答案1
从手册(man interfaces
):
gateway address
Default gateway (dotted quad)
所以,gateway
用于指定一个默认路由,而不是静态路由。静态路由用于未设计为使用默认网关的网络流量。默认网关用于所有非发往本地网络且路由表中未指定首选路由的流量。您的 DHCP 接口eth0
获取默认网关。之后,您可以使用 指定静态eth1
路由post-up route add default gw
。
进一步阅读:
尝试如下。
echo '200 hostonly' >> /etc/iproute2/rt_tables
编辑/etc/network/interfaces
。
# The loopback network interface
auto lo
iface lo inet loopback
# The VirtualBox NAT interface.
auto eth0
allow-hotplug eth0
iface eth0 inet dhcp
# The VirtualBox host-only interface.
auto eth1
allow-hotplug eth1
iface eth1 inet static
address 192.168.56.2
netmask 255.255.255.0
post-up ip route add 192.168.56.0/24 dev eth1 src 192.168.56.1 table hostonly
post-up ip route add default via 192.168.56.1 dev eth1 table hostonly
post-up ip rule add from 192.168.56.2/32 table hostonly
post-up ip rule add to 192.168.56.2/32 table hostonly
重新启动并查看它的外观。
答案2
从网络角度来看,您将网络网关作为下一跃点,而不是默认网关(也称为最后手段的网关)。从您的第一个route -n 命令(无后置)中,您将看到 10.0.2.2 作为最后的网关。当您的计算机请求不在其路由表中的网络时,它会将未知的网络流量转发到该地址。接口设置的网关设置是该网络上流量的下一跃点。但是,由于您的接口直接连接到该网络,因此不需要网关来转发流量。网络将始终是已知的,并且发往该网络上的设备的流量将直接转发到该设备。您的 post-up 命令正在创建两个最后手段的网关(这是不可取的)。如果您希望 192.168.56.1 成为您实际的最后手段,您需要替换默认路由而不是添加。
答案3
这给了一些煽动
您的路由表提供有关如何在所有接口之间路由连接的信息。
接口的默认路由将用于其他目的,并且仅适用于该接口,而不适用于整个系统。
如果您只有一个网络接口,系统会自动将其设置为默认路由,因为它是唯一的默认网关。
请记住,路由表是自下而上工作的,因此顶部的默认网关将是用于尝试连接的最后一个路由。