我目前正在尝试配置一个路由器,使用以太网电缆通过接口连接到该eth0
路由器(其网络接口)。该路由器无法访问互联网。
现在,我可以访问另一个网络(不同的 IP 范围等),该网络确实可以通过我的无线接口访问互联网wlan0
。
我想eth0
仅用于连接到我尝试配置的路由器以及wlan0
其余连接。这样,我可以在尝试配置路由器时做一些研究。
我确信它是可行的,通过某种路由,但我还没有找到任何可行的东西。问题是,当我插入以太网电缆时,系统开始使用该eth
连接进行所有操作。
总结一下:
假设路由器的地址是 10.0.0.1,我可以做一些事情来通过该eth0
接口路由到 10.0.0.1 的流量,并通过其他任何东西路由流量wlan0
吗?
我正在使用 Debian Squeeze。
答案1
最简单的方法是这样的:
- 禁用 eth0 上的 DHCP,或关闭接口(在网络管理器中断开连接,或使用
ifdown eth0
等) ip -4 addr add 10.0.0.2/30 dev eth0
ip link set eth0 up
或者,如果您更喜欢旧的ifconfig
,我相信那就是ifconfig eth0 10.0.0.2 netmask 255.255.255.252 up
最后的替代方案是,如果您使用网络管理器(使用 GUI 配置网络时可能会出现这种情况),请为 eth0 设置一个配置文件,其静态 IP 地址为 10.0.0.2,网络掩码为 255.255.255.252。将默认路由和 DNS 服务器留空。
完成上述任何操作后,您应该能够 ping 通 10.0.0.1,并且仍然可以访问互联网的其余部分。
为什么这有效?
(这是一个简化,Linux上的路由实际上有一个很多具有可选的复杂性。)当内核想要发送 IP 数据包时,它会查询路由表以确定将数据包发送到哪个接口。
路由表通常包含每个接口上本地子网的路由。上面的命令都把子网10.0.0.0/30放在eth0上。 A /30 是 4 个 IP 地址:本例中为 10.0.0.0–10.0.0.3。这很方便地包括您的路由器 (.1) 和您的盒子 (.2)。大多数子网中的第一个(.0 =“网络”)和最后一个(.3 =“广播”)地址都有特殊的保留含义,因此我们不能使用它们。
除了本地子网的路由之外,还会有您配置的任何静态路由,以及来自路由协议的任何路由(这不适用于您或 99% 的人)。
最后,将有一个“默认”路由,它说明将其余流量发送到哪里。该路由实际上并不特殊,它是一条针对 0.0.0.0/0(即整个 IPv4 地址空间)的路由。由于路由查找的工作方式,它是默认的......
默认情况下,它按以下顺序检查:
- 是本地IP地址(即本机的IP地址)吗?如果是这样,请将其路由给我自己。
- 接下来,将所有路由从最具体(IP 地址最少的子网)到最不具体(IP 地址最多的子网)排序。
- 从顶部开始,沿着排序列表向下查找,直到有匹配的内容。
- 如果没有匹配的内容,则放弃并生成无法访问的错误。
所以你的 0.0.0.0/0 路由是默认的,因为它被排序到列表的底部。您的 10.0.0.0/30 路由即使不是最靠前的,也会在列表中占据相当高的位置。基本上它的功能是一个例外——“将流量发送到互联网,除非适用于 10.0.0.0/30"
这些奇怪的/30 东西是什么?
/X,有时称为“CIDR 表示法”,是指定网络掩码的快速方法。它计算metmask 中设置的位数。因此,网络掩码 255.255.255.255(单个 IP)为 /32,因为所有位均已设置。 …254(两个IP)是/31,…252是/30,一直到0.0.0.0(所有IPv4地址)是/0。常见的255.255.255.0是/24。
答案2
这里有一些可能的选择。
1
不要使用 DHCP 来配置 eth0。请改用静态配置,并且不要设置网关。 DHCP 正在设置路由器的默认网关,以便您的计算机将其用于所有流量。如果没有设置网关,它将仅使用该接口与该网络上的主机进行通信
2
告诉路由器不要将自己通告为网关。这在大多数路由器上是不可能的,因此这可能根本不是一个选项。
3
debian 可能会忽略路由器通过 DHCP 通告的网关设置,但我不使用 debian,所以我不确定。这取决于 debian 使用什么来配置网络设备。
4
同样针对 debian,您可以在启动接口后运行脚本并让它删除由 DHCP 添加的网关路由。