我目前有一个工作站,在不同的网络上设置了两个网卡。
我当前的设置是这样的:
eth0:LAN
eth1:外部互联网
我在 eth1 上设置了一个默认网关来访问外部互联网。我还有一个路由来设置 eth0 上 LAN 的默认网关。我可以毫无问题地浏览互联网并访问本地局域网。我遇到的问题是,当我尝试从 LAN 上的另一台计算机访问 Ubuntu 计算机时,数据包在 eth0 上传入,但在 eth1 上离开。如何设置规则来确保 LAN 子网的所有流量都忽略 eth1?
答案1
通过设置第二个默认上的网关eth0
,您实际上是在声称您可以通过 访问整个互联网eth0
。由于这实际上并非如此,因此这种虚假声明会给您带来问题。
显然,您的默认网关路由 oneth0
位于eth1
路由表中的默认网关路由 on 之后。路由表条目主要按特殊性(即通过递减的网络掩码长度)排序,其次按度量值排序。根据定义,默认网关路由的网络掩码长度为/0
,因此只有度量值可能会影响其排序顺序。
每当您有多个网络接口时,您的路由表配置应反映网络的实际拓扑。如果无法通过您的界面访问所有互联网eth0
,则为其设置默认网关条目是错误的做法。系统应该自动建立一个路由条目,覆盖每个网络接口可直接访问的系统,因此,如果您的局域网不包含多个网段,您可能不需要执行任何操作。
您应该只为实际可以访问互联网的接口设置默认网关条目;对于仅连接到您自己的 LAN 的接口,保留其默认网关条目是完全合法的未设置。
如果您的 LAN 包含多个网段,那么您可能需要为它们添加更多特定路由。例如:如果eth0
连接到网段192.168.1.0/24
,并且该网段之外还有另一个192.168.2.0/24
可以通过 router 到达的LAN 网段192.168.1.1
,那么您需要配置如下路由:
ip route add 192.168.2.0/24 via 192.168.1.1 dev eth0
或者像这样使用现已废弃的route
命令:
route add -net 192.168.2.0 netmask 255.255.255.0 gw 192.168.1.1
基本上,您可以使用特定的路由器/网关系统来识别可到达的网段(或网段组合)。网关系统本身必须是可直接访问的;通常,您不能指定更高阶的路由(“转到该路由器,然后从那里到另一个路由器...”),因为一旦您将数据包发送到一个路由器,它将决定(使用其自己的路由表)应该发生什么到下一个数据包。
如果您的 LAN 由许多网段组成(可能通过不同的路由器/网关可达),您可能必须编写多个路由条目来指定如何到达它的所有部分。从根本上来说,这就是路由表的真正用途;仅具有一个 NIC 的系统只是简化的退化情况。
答案2
如果您的 LAN 端没有网络路由,请使用以下命令创建一个:
/sbin/route add -net 192.168.1.0/24 192.168.1.1 dev eth0
假设您的局域网地址在 192.168.1.1 和 192.168.1.255 之间,并且 192.168.1.1 是您路由器的 IP 地址。您的网络掩码是 255.255.255.0。如果这些地址有任何不同,您将需要修改这些地址。