在这种情况下,路由命令的顺序为什么很重要?

在这种情况下,路由命令的顺序为什么很重要?

为什么结果不同

ip tuntap add dev tun1 mode tun
ip link set up tun1
ip route add 1.2.3.4 via 192.168.0.1 dev eth0
ip addr add 10.0.0.1 peer 1.2.3.4 dev tun1

还有这个(最后两个命令交换了位置)

ip tuntap add dev tun1 mode tun
ip link set up tun1
ip addr add 10.0.0.1 peer 1.2.3.4 dev tun1
ip route add 1.2.3.4 via 192.168.0.1 dev eth0

前一个块给出了如下所示的路由表

1.2.3.4 via 192.168.0.1 dev eth0
1.2.3.4 dev tun1  proto kernel  scope link  src 10.0.0.1

后者给出了这个(并失败并显示“RTNETLINK 答案:文件存在”)

1.2.3.4 dev tun1  proto kernel  scope link  src 10.0.0.1

在这两种情况下我都有一个默认路线default via 192.168.0.1 dev eth0

(该问题与我的 VPN 设置有些相关。我使用 ISP 提供的 VPN 服务。VPN 服务器的配置使得 VPN 服务器的公共 IP 与 VPN 隧道的服务器端的 IP 相同。)

答案1

我的猜测是,运行ip addr将自动创建一个默认网关,而运行该ip route命令时此默认网关会发生冲突。交换命令的顺序应该会先添加路由,然后该ip addr命令将看到该网络的现有网关,而不必费心配置网关。

您可以通过运行后比较路由表来测试这一点仅有的ip addr命令。如果此命令向路由表添加了两行,那么这就是错误的根源。

答案2

当您在命令中指定了对等地址时,通过接口到该对等地址的路由将被添加到主路由表中。因此,手动添加到具有相同度量的相同目的地的路由将失败。

当您启动 VPN 时,您应该有到 VPN 服务器的特定路由,否则如果默认路由更改为通过 VPN 进行路由,您的 VPN 将会中断。

相关内容