Ubuntu 18.04 netplan 静态路由

Ubuntu 18.04 netplan 静态路由

需要有关新 netplan 配置中的静态路由的帮助。有 2 个网络接口的 ubuntu server 18.04,以太网无线网络. 基本成功后配置/etc/netplan/50-cloud-init.yaml我有两个网络。但是enp3s0是内联网,wlp2s0是 wifi 路由器。我无法通过 wifi 上网。经过几天的配置/重新配置Yaml文件我无法让它工作。

仅删除默认网关/sbin/route del 默认网关 10.185.0.1可以工作,但是没有路由到内联网。路线-n列表

我不知道如何添加这些路线...

network:
  version: 2
  renderer: networkd
  ethernets:
        enp3s0:
            addresses: []
            dhcp4: true
            gateway4: 10.185.0.1
            nameservers:
              addresses: [10.185.x.x, y.y.y.y]
            routes:
            - to: 10.185.0.0/0
              via: 10.185.0.1
              metric: 100
              table: 101
            routing-policy:
              - from: 10.185.0.0/24
                table: 101

  wifis:
        wlp2s0:
            addresses: []
            dhcp4: true
            optional: true
            gateway4: 192.168.8.1
            access-points:
                 "Wifi":
                    password: "password"
            nameservers:
              addresses: [8.8.8.8,8.8.4.4]
            routes:
            - to: 0.0.0.0/0
              via: 192.168.8.1
              metric: 90
              table: 91
            routing-policy:
              - from: 192.168.8.0/24
                table: 91

UPD:覆盖配置/etc/systemd/network/。使用UseRoutes=false会导致启动时无限网络搜索,设置RouteMetric=700效果更好,启动后可以通过 wifi 上网!但添加新路由(例如:10.180.0.0/16通过 10.185.0.1)不起作用,不会出现在路由内核路由表中。
我仍然不明白为什么 tracerout 172.16.185.194 会经过 192.168.8.1。我读过有关 ip4 表的内容,但- to: 172.16.0.0/12还是/16不起作用。

答案1

一般来说,这里你想要的是:

  • 在连接互联网的接口上设置一个默认网关(使用gateway4)。如果您在两个接口上都设置了默认网关,那么一半的数据包将被路由到您的内部网,并且无法到达目的地。

  • 如果您的 Intranet 有多个子网,则需要静态路由才能通过连接到 Intranet 的接口到达这些子网。(一个例子可能是路由任何RFC1918子网到该接口,这可能是一个好主意。)

现在,在您的具体示例中,您没有完整描述您的 Intranet,但我们假设您的 Intranet 由 10.185.xy 网络组成,换句话说,10.185.0.0/16

我们还假设您访问内联网的 enp3s0 接口将接收 10.185.0.z 子网中的 IP,换句话说,10.185.0.0/24子网,该子网的网关是 10.185.0.1。

因此,您需要一条静态路由才能到达 10.185 的剩余部分。X.y 子网,其中 x 不为 0。

您可以使用如下配置进行设置:

network:
  version: 2
  renderer: networkd
  ethernets:
        enp3s0:
            addresses: []
            dhcp4: true
            nameservers:
              addresses: [10.185.x.x, y.y.y.y]
            routes:
            - to: 10.185.0.0/16
              via: 10.185.0.1
  wifis:
        wlp2s0:
            addresses: []
            dhcp4: true
            optional: true
            gateway4: 192.168.8.1
            access-points:
                 "Wifi":
                    password: "password"
            nameservers:
              addresses: [8.8.8.8,8.8.4.4]

在此编辑的配置中,请注意:

  • enp3s0 配置中没有gateway4,因为您不希望流量默认转到该接口,只有当流量发往您的 Intranet 时才转到该接口,该接口是通过静态路由设置的。

  • 相反,wlp2s0 不需要任何静态路由,因为它已经连接了一个默认网关,这就足够了。

  • 不需要路由表和路由策略,您需要做的就是设置一个静态路由(或几个静态路由)来覆盖您的 Intranet 中的内部地址,并通过该网络中网关的 IP 对其进行路由,该网关可以将您路由到您未直接连接的其他子网。

请注意,此设置实际上取决于内部网络中的 DHCP 服务器为您提供的一些配置,例如您的接口位于 10.185。0/24 网络,并且 10.185.0.1 是您可以在该接口中使用的网关...因此,更好的设置可能是让 Intranet 中的 DHCP 服务器推送静态路由(而不是在 netplan 中配置它们)。这样,如果重新配置了 Intranet,也许更改了网关的 IP,或者扩展为包括其他 RFC1819 私有范围,则只需要重新配置 DHCP 服务器,而不需要重新配置其他所有内容...

但是如果 DHCP 服务器不受您的控制,那么这种设置可能是可以接受的,前提是内部网络不会太频繁地重新配置,这样网关 IP 就不会改变。您可能需要考虑向所有 RFC1918 范围添加静态路由,因为这些路由在 Internet 中无效,因此它们可能仅在 Intranet 中有效:

routes:
- to: 10.0.0.0/8
  via: 10.185.0.1
- to: 172.16.0.0/12
  via: 10.185.0.1
- to: 192.168.0.0/16
  via: 10.185.0.1

我希望你觉得这有帮助!

答案2

解决方法,通过两个不同的接口获取互联网和内联网。

Intranet IP : 192.168.10.0/24 , interface enp0s8
Internet IP : 0.0.0.0/0 , interface enp0s3 
              Nat gateway : 10.0.2.2

rc.locala)在目录中创建一个文件/etc

将静态路由放入其中,如下所示。

#!/bin/sh -e

ip route del 0.0.0.0/0 via 192.168.10.1 dev enp0s8
ip route add 0.0.0.0/0 via 10.0.2.2 dev enp0s3
ip route add 192.168.10.0/24 via 192.168.10.1 dev enp0s8

exit 0

b) 使其可执行并重新启动虚拟机。

相关内容