为什么 ip route add 不起作用,但 ip route add 的细节较少,然后更改有效?

Loï*_*hes 7 ip route linux-networking

我有 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
Run Code Online (Sandbox Code Playgroud)

但:

# 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
Run Code Online (Sandbox Code Playgroud)

我的接口文件是:

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
Run Code Online (Sandbox Code Playgroud)

我有点失落,我必须说。我可以添加然后更改,但不明白为什么它分两步工作而不是直接工作并不令人满意。我一直在阅读手册页而不理解。

在答案的帮助下更新:

我现在在eth0和上有一个网关eth0:0,但是由于我希望除 之外的所有流量都192.168.0.0/16标记为来自我的178.xxx.xxx.xxx地址,因此我添加了一个路由规则。也许eth0使用192.168.1.101ip 然后使用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
Run Code Online (Sandbox Code Playgroud)

我也禁用了rp_filter

echo 0 > /proc/sys/net/ipv4/conf/eth0/rp_filter
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助!

小智 2

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