Как я могу заставить ethernet иметь приоритет над Wi-Fi на Ubuntu 18.04?

Согласно документу HP (см. Перемещение жестких дисков и массивов) на SmartArray это кажется возможным в зависимости от контроллера RAID.

12
29.11.2018, 11:38
2 ответа

Здесь собраны задачи:

  • Ваша кабельная локальная сеть и беспроводная локальная сеть являются мостом к одной и той же подсети123.456.89.0/24
  • У вас будет два шлюза по умолчанию, если вы подключаетесь к этим сетям в одно и то же время (это можно решить с помощью расширенной маршрутизации иip rules)
  • Эти шлюзы имеют ОДИНАКОВЫЙ АДРЕС, так как у вас есть мост между Wi-Fi и кабельным соединением.

Возможно, вам следует полагаться на внешние сценарии для автоматической деактивации Wi-Fi, когда Ethernet подключен, как этот:

Создайте скрипт /etc/NetworkManager/dispatcher.d/70-wifi-wired-exclusive.sh. Содержание:

#!/usr/bin/env bash

name_tag="wifi-wired-exclusive"
syslog_tag="$name_tag"
skip_filename="/etc/NetworkManager/.$name_tag"

if [ -f "$skip_filename" ]; then
  exit 0
fi

interface="$1"
iface_mode="$2"
iface_type=$(nmcli dev | grep "$interface" | tr -s ' ' | cut -d' ' -f2)
iface_state=$(nmcli dev | grep "$interface" | tr -s ' ' | cut -d' ' -f3)

logger -i -t "$syslog_tag" "Interface: $interface = $iface_state ($iface_type) is $iface_mode"

enable_wifi() {
   logger -i -t "$syslog_tag" "Interface $interface ($iface_type) is down, enabling wifi..."
   nmcli radio wifi on
}

disable_wifi() {
   logger -i -t "$syslog_tag" "Disabling wifi, ethernet connection detected."
   nmcli radio wifi off
}

if [ "$iface_type" = "ethernet" ] && [ "$iface_mode" = "down" ]; then
  enable_wifi
elif [ "$iface_type" = "ethernet" ] && [ "$iface_mode" = "up"  ] && [ "$iface_state" = "connected" ]; then
  disable_wifi
fi

Чтобы отключить скрипт, просто выполнитеtouch /etc/NetworkManager/.wifi-wired-exclusive

3
27.01.2020, 19:56

Я полагаю, что NetworkManager наказывает соединения, которые считает недоступными, добавляя 20000 к значению метрики. Из руководства NetworkManager.conf:

default-route of devices without global connectivity get a penalty of +20000 to the route-metric

Решение 1

Вы можете попробовать отключить проверку подключения, закомментировав параметр uri=или оставив его пустым в NetworkManager.conf.

Решение 2

Установите net.ipv4.conf.all.rp_filter = 2в /etc/sysctl.confили, если применимо, в вашем дистрибутиве. Остерегайтесь возможных уязвимостей утечки информации .

Фон

В руководстве NetworkManager.conf есть небольшое объяснение того, почему проверка подключения может работать со сбоями:

Note that your distribution might set /proc/sys/net/ipv4/conf/*/rp_filter to strict filtering. That works badly with per-device connectivity checking, which uses SO_BINDDEVICE to send requests on all devices. A strict rp_filter setting will reject any response and the connectivity check on all but the best route will fail.

В моем дистрибутиве включена строгая фильтрация:

$ /usr/sbin/sysctl net.ipv4.conf.all.rp_filter
net.ipv4.conf.all.rp_filter = 1

Значение 1означает строгую фильтрацию и является причиной сбоя проверки подключения. Разработчики systemd изменили это на2(свободную фильтрацию )с противоречивой фиксацией , которая внесла уязвимости , поэтому дистрибутивы отменили ее.

0
28.01.2020, 19:18

Теги

Похожие вопросы