为什么 ip route add 不起作用,但使用较少详细信息的 ip route add 然后 change 却可以起作用?

为什么 ip route add 不起作用,但使用较少详细信息的 ip route add 然后 change 却可以起作用?

我在使用 ip route add 时遇到了问题。令人惊讶的是,我可以添加路由然后更改它,但无法直接添加它:

# ip route add 192.168.0.0/16 via 192.168.255.254 src 192.168.1.101
RTNETLINK answers: No such process

但:

# ip route add 192.168.0.0/16 dev eth0
# ip route change 192.168.0.0/16 via 192.168.255.254 src 192.168.1.101

我的接口文件是:

iface lo inet loopback
auto eth0
iface eth0 inet static
    address 178.xxx.xxx.xxx
    netmask 255.255.255.192
    network 178.xxx.xxx.xxx
    broadcast 178.xxx.xxx.xxx
    gateway 178.xxx.xxx.xxx
auto eth0:1
iface eth0:1 inet static
    address 192.168.1.101
    netmask 255.255.0.0

我必须说我有点迷茫了。我可以接受添加然后更改,但不明白为什么它需要两步而不是直接执行,这让我很不满意。我读了很多手册页,却不明白。

在答案的帮助下进行了更新:

eth0我现在在和上有一个网关eth0:0,但因为我想将除 之外的所有流量标记192.168.0.0/16为来自我的178.xxx.xxx.xxx地址,所以我添加了一条路由规则。也许使用eth0ip192.168.1.101然后将178.xxx.xxx.xxxip 放在 上eth0:0可以在没有路由规则的情况下工作,但情况如下:

auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
    address 178.xxx.xxx.131
    netmask 255.255.255.192
    network 178.xxx.xxx.128
    broadcast 178.xxx.xxx.191
    gateway 178.xxx.xxx.190
    up /sbin/ip route add default via 178.xxx.xxx.190 dev eth0 table 125
    up /sbin/ip rule add from 178.xxx.xxx.128/26 table 125
    post-down /sbin/ip route del default via 178.xxx.xxx.190 dev eth0 table 125
    post-down /sbin/ip rule del from 178.xxx.xxx.128/26 table 125

auto eth0:0
iface eth0:0 inet static
    address 192.168.1.101
    netmask 255.255.0.0
    gateway 192.168.255.254

我还禁用了rp_filter

echo 0 > /proc/sys/net/ipv4/conf/eth0/rp_filter

感谢您的帮助!

答案1

根据您的接口文件,您已经在网络 192.168.0.0/16 中,因此您不需要该网络的网关。

答案2

如果我根据您的 IP 设置调整结果(我在 192.168.x.0/24 上):

$ sudo ip route 添加 192.168.0.0/16 通过 192.168.255.254 src 192.168.1.101

我明白了

RTNETLINK 回答:没有这样的过程

$ sudo ip route 添加 192.168.0.0/16 通过 192.168.1.254 src 192.168.1.101

有效。我怀疑这是因为 192.168.255.254 不在您的本地子网或已知路由中,因此您首先需要一条到它的路由。

答案3

正如其他人所说,eth0:1 上的 IP 为 192.168.1.101/16,这意味着您已经拥有该子网的静态路由。看来您需要为该接口添加一个指向 192.168.255.254 的网关。

答案4

我知道有点晚了,但我还想澄清一下“路线”的用途。你说:

我希望除 192.168.0.0/16 之外的所有流量都标记为来自我的 178.xxx.xxx.xxx 地址

route 命令允许您根据目的地而不是源来确定路由。您需要根据要使用的网关配置服务以使用 IP。正如 Mathias Weidner 所说,您不需要网关,因为您是直接连接的(同一子网 = 无路由)

相关内容