NetworkManager 共享连接默认路由错误

NetworkManager 共享连接默认路由错误

我的 RPi 通过 4G USB 适配器连接互联网,调制解调器连接由 NetworkManager (Raspbian/debian 10) 使用 /dev/ttyUSB0 管理。我还激活了 OpenVPN 隧道。现在我想通过以太网 eth0 共享此互联网连接(通过电缆连接 Wifi AP)。所以我添加了新的 NetworkManager 连接nmcli connection add type ethernet ifname eth0 ipv4.method shared con-name ethShared。然而,当我将任何东西连接到 eth0 时,RPi 会失去互联网访问权限,因为 NetworkManager 由于某种原因通过 eth0 添加默认网关。

root@rpi3meteo:~# ip route
default dev eth0 scope link src 169.254.15.88 metric 202
default via 100.94.218.129 dev wwan0 proto static metric 700
10.5.6.0/24 via 10.5.6.5 dev tun0
10.5.6.5 dev tun0 proto kernel scope link src 10.5.6.6
10.42.0.0/24 dev eth0 proto kernel scope link src 10.42.0.1 metric 100
100.94.218.128/25 dev wwan0 proto kernel scope link src 100.94.218.191 metric 700
169.254.0.0/16 dev eth0 scope link src 169.254.15.88 metric 202

另外,由于某种原因,eth0 获得了 2 个 IP 地址 - 10.42.0.1(也由内部 DHCP 服务器使用)和 169.254.15.88(在虚假路由表条目中使用)。我知道 169.254.0.0/16 是本地链路并且可以在没有 DHCP 服务器的情况下使用,但不知道为什么 NetworkManager 将其配置为“共享”类型的连接,该连接确实具有由 NetworkManager 自动提供的 DHCP。

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether b8:27:eb:20:80:80 brd ff:ff:ff:ff:ff:ff
    inet 10.42.0.1/24 brd 10.42.0.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet 169.254.15.88/16 brd 169.254.255.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
3: wwan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000
    link/ether 00:1e:10:1f:00:00 brd ff:ff:ff:ff:ff:ff
    inet 100.94.218.191/25 brd 100.94.218.255 scope global noprefixroute wwan0
       valid_lft forever preferred_lft forever
4: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
    link/none
    inet 10.5.6.6 peer 10.5.6.5/32 scope global tun0
       valid_lft forever preferred_lft forever

当我通过手动删除虚假路由时,RPi 和 Wifi 客户端的互联网访问开始工作route del default dev eth0。然而,由于树莓派位于远程位置,即使在重新启动后也需要在没有手动干预的情况下工作。

我已经尝试设置ipv4.never-default参数,但没有帮助。也已经尝试通过 手动设置 IP 地址范围ipv4.addresses。我还找到了一种解决方法,可以更改默认路由 ( ipv4.route-metric) 和 dns ( ipv4.dns-priority) 的优先级,但还没有时间测试它,但是我更感兴趣的是首先防止这种情况发生,或者让 NetworkManager 删除路由每次激活连接时都会自动进行。

connection.id:                          ethShared
connection.stable-id:                   --
connection.type:                        802-3-ethernet
connection.interface-name:              eth0
connection.autoconnect:                 yes
connection.autoconnect-priority:        0
connection.autoconnect-retries:         -1 (default)
connection.multi-connect:               0 (default)
connection.auth-retries:                -1
connection.master:                      --
connection.slave-type:                  --
connection.autoconnect-slaves:          -1 (default)
connection.secondaries:                 --
connection.gateway-ping-timeout:        0
connection.metered:                     unknown
connection.lldp:                        default
connection.mdns:                        -1 (default)
connection.llmnr:                       -1 (default)
802-3-ethernet.port:                    --
802-3-ethernet.speed:                   0
802-3-ethernet.duplex:                  --
802-3-ethernet.auto-negotiate:          no
802-3-ethernet.mac-address:             --
802-3-ethernet.cloned-mac-address:      --
802-3-ethernet.generate-mac-address-mask:--
802-3-ethernet.mac-address-blacklist:   --
802-3-ethernet.mtu:                     auto
802-3-ethernet.s390-subchannels:        --
802-3-ethernet.s390-nettype:            --
802-3-ethernet.s390-options:            --
802-3-ethernet.wake-on-lan:             default
802-3-ethernet.wake-on-lan-password:    --
ipv4.method:                            shared
ipv4.dns:                               --
ipv4.dns-search:                        --
ipv4.dns-options:                       ""
ipv4.dns-priority:                      0
ipv4.addresses:                         --
ipv4.gateway:                           --
ipv4.routes:                            --
ipv4.route-metric:                      -1
ipv4.route-table:                       0 (unspec)
ipv4.ignore-auto-routes:                no
ipv4.ignore-auto-dns:                   no
ipv4.dhcp-client-id:                    --
ipv4.dhcp-timeout:                      0 (default)
ipv4.dhcp-send-hostname:                yes
ipv4.dhcp-hostname:                     --
ipv4.dhcp-fqdn:                         --
ipv4.never-default:                     no
ipv4.may-fail:                          yes
ipv4.dad-timeout:                       -1 (default)
GENERAL.NAME:                           ethShared
GENERAL.DEVICES:                        eth0
GENERAL.STATE:                          activated
GENERAL.DEFAULT:                        yes
GENERAL.DEFAULT6:                       no
GENERAL.SPEC-OBJECT:                    --
GENERAL.VPN:                            no
GENERAL.ZONE:                           --
GENERAL.MASTER-PATH:                    --
IP4.ADDRESS[1]:                         10.42.0.1/24
IP4.ADDRESS[2]:                         169.254.15.88/16
IP4.GATEWAY:                            0.0.0.0
IP4.ROUTE[1]:                           dst = 10.42.0.0/24, nh = 0.0.0.0, mt = 100
IP4.ROUTE[2]:                           dst = 169.254.0.0/16, nh = 0.0.0.0, mt = 202
IP4.ROUTE[3]:                           dst = 0.0.0.0/0, nh = 0.0.0.0, mt = 202

答案1

我没有找到解决方案,但至少找到了一个解决方法来让它工作。我尝试按照此建议更改路线指标回答

ipv4.route-metric将连接设置ethShared为更高的值(更低的优先级)不起作用,因为它根本不影响通过 169.254.15.88 的虚假路由。

因此,我最终将ipv4.route-metric4G 调制解调器连接从默认的 700 设置为 99(因此它现在的优先级高于以太网的 202 优先级)。

相关内容