Ubuntu 18.04에서 Wi-Fi보다 이더넷의 우선 순위를 지정하는 방법은 무엇입니까?

Ubuntu 18.04에서 Wi-Fi보다 이더넷의 우선 순위를 지정하는 방법은 무엇입니까?

표적

이더넷 케이블을 연결할 때 무선보다 이더넷에 우선순위를 부여하세요.

방법

많은 인터넷 검색과 독서 끝에 다음과 같은 지점에 도달했습니다.믿다내가해야 할 일은 다음과 같습니다

nmcli connection modify [id-of-ethernet-interface] ipv4.route-metric 200
nmcli connection modify [id-of-ethernet-interface] ipv6.route-metric 200

여기서 200은 무선보다 이더넷에 우선순위를 부여하기 위한 무선 메트릭보다 낮은 값입니다.

결과

나를 혼란스럽게 하는 것은 위의 명령을 실행하고 재부팅한 후(좋은 측정을 위해) 얻은 보고서 route -n와 이것이 내 목표를 달성하지 못하는 것 같다는 사실입니다.

$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         123.456.89.1    0.0.0.0         UG    600    0        0 wlp1s0
0.0.0.0         123.456.89.1    0.0.0.0         UG    20200  0        0 enp0s31f6
123.456.89.0    0.0.0.0         255.255.255.192 U     200    0        0 enp0s31f6
123.456.89.0    0.0.0.0         255.255.255.192 U     600    0        0 wlp1s0
654.321.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 enp0s31f6

이 숫자는 내 명령 실행과 관련이 있지만

0.0.0.0         123.456.89.1    0.0.0.0         UG    20200  0        0 enp0s31f6
654.321.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 enp0s31f6

첫 번째 줄에는 내가 설정한 200 값 앞에 20 접두사가 있습니다. 실행 중인 항목을 기준으로 측정항목 값을 nmcli500 으로 변경하면 route -n20500이 보고됩니다. 왜 이런 일이 발생합니까? 20200이나 20500이 아니라 200이나 500을 원한다고 말했기 때문에 틀린 것 같습니다.

두 번째 줄에는 측정값이 있는데, 그 값이 어디에서 왔는지 전혀 알 수 없으며 전혀 영향을 미칠 수 없는 것 같습니다. 누구든지 이것에 대해 밝힐 수 있다면 감사하겠습니다.

이러한 명령은 영향 지표 외에는 어떤 실질적인 결과도 생성하지 않는 것 같습니다. 이더넷이 우선순위인지 알 수 없으므로 그렇지 않다고 가정합니다.

기타 결과

궁금해서 작업하고 있는 것 같아요일부정도는 용도입니다 $ sudo ifmetric enp0s31f6 200. 이것은 두세 가지 일을 합니다.

  • 인터페이스의 메트릭에 영향을 미칩니다( route -nIface가 있는 모든 라인에 대해 200 값을 보고함 enp0s31f6).
  • 이는 Ubuntu의 UI에 영향을 미칩니다(오른쪽 상단에는 명령에 제공한 측정항목 값에 따라 이더넷과 무선 아이콘 간의 시각적 전환이 표시됩니다 ifmetric).
  • 그것때때로NETLINK: Error: File exists나에게 오류가 발생합니다. 동일한 명령의 후속 실행가능한또는가능한이 오류가 발생하지 않습니다

일부 시스템 정보

  • 엘리트 노트북 850 G5
  • 우분투18.04
  • Ubuntu 설치는 설치 프로그램이 전체 디스크를 사용하고, 암호화를 활성화하고, 타사 드라이버 다운로드를 활성화하는 등의 방식으로 수행됩니다.

업데이트 #1

$ nmcli c show
NAME                UUID  TYPE      DEVICE    
Wired connection 2  [n/a] ethernet  enp0s31f6 
WiFi1               [n/a] wifi      wlp1s0

$ route -n
Destination     Gateway  Genmask         Flags Metric Ref    Use Iface
0.0.0.0         [n/a]    0.0.0.0         UG    600    0        0 wlp1s0
0.0.0.0         [n/a]    0.0.0.0         UG    20200  0        0 enp0s31f6
[n/a]           0.0.0.0  255.255.255.192 U     200    0        0 enp0s31f6
[n/a]           0.0.0.0  255.255.255.192 U     600    0        0 wlp1s0
[n/a]           0.0.0.0  255.255.0.0     U     1000   0        0 enp0s31f6

답변1

여기에 많은 질문이 있습니다.

  • 유선 LAN과 무선 LAN은 동일한 서브넷에 대한 브리지입니다.123.456.89.0/24
  • 이러한 네트워크에 동시에 연결하면 두 개의 기본 게이트웨이가 생깁니다(이는 일부 고급 라우팅으로 해결 가능 ip rules)
  • Wi-Fi와 유선 연결 사이에 브리지가 있기 때문에 이러한 게이트웨이의 주소는 동일합니다.

이더넷에 연결될 때 Wi-Fi를 자동으로 비활성화하려면 다음과 같이 외부 스크립트를 사용해야 할 수도 있습니다.

스크립트를 만듭니다 /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

답변2

나는 이것이 메트릭에 20000을 추가하여 액세스할 수 없다고 간주하는 연결에 페널티를 주는 NetworkManager라고 생각합니다. ~에서NetworkManager.conf 매뉴얼:

전역 연결이 없는 장치의 기본 경로는 경로 측정항목 +20000으로 페널티를 받습니다.

솔루션 1

옵션에 주석을 달거나 uri=공백으로 남겨서 연결 확인을 비활성화할 수 있습니다 NetworkManager.conf.

솔루션 2

net.ipv4.conf.all.rp_filter = 2에 설정합니다 /etc/sysctl.conf. 조심하다정보유출 취약점이 있을 수 있음.

배경

이것NetworkManager.conf 매뉴얼연결 확인이 실패할 수 있는 이유에 대한 간단한 설명이 있습니다.

배포판에 /proc/sys/net/ipv4/conf/*/rp_filter가 다음으로 설정되어 있을 수 있습니다.엄격한 필터링. SO_BINDDEVICE를 사용하여 모든 장치에 요청을 보내는 장치별 연결 확인에는 제대로 작동하지 않습니다. 엄격한 rp_filter 설정은 모든 응답을 거부하고 최상의 경로를 제외한 모든 연결 확인에 실패합니다.

내 배포판에는 엄격한 필터링이 활성화되어 있습니다.

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

가치는 1의미한다엄격한 필터링이것이 연결 확인에 실패하는 이유입니다. 시스템 사람들은 그것을 2(느슨한 필터링) 로 변경했습니다.논란의 여지가 있는 제출소개한허점, 따라서 배포판에 의해 복원됩니다.

관련 정보