Ubuntu 18.04에서 이더넷보다 Wi-Fi보다 우선 순위가 높은 이더넷을 만들려면 어떻게해야합니까?


13

이더넷 케이블이 연결되어있을 때 이더넷이 무선보다 우선합니다

방법

인터넷 검색의 공정한 금액을 수행하는 데 나는이 점에 왔어요 읽고 나면 어디서 믿고 내가 무슨 일을해야하는 것은의 라인을 따라 뭔가

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. 이것은 2-3 가지 일을합니다.

  • 인터페이스의 메트릭에 영향을 미칩니다 ( route -nIface의 모든 행 enp0s31f6에 값 200이 있음을보고)
  • 우분투의 UI에 영향을 미칩니다 (오른쪽 상단에서 ifmetric명령에 제공하는 메트릭 값에 따라 이더넷 아이콘과 무선 아이콘이 시각적으로 전환되는 것을 볼 수 있습니다 )
  • 그것은 때때로 발생 NETLINK: Error: File exists나 오류가 발생했습니다. 동일한 명령의 후속 실행 할 수 있습니다 또는 이 오류가 발생하지

일부 시스템 정보

  • 엘리트 북 850 G5
  • 우분투 18.04
  • 설치 프로그램이 전체 디스크를 사용하고, 암호화를 활성화하고, 드라이버를 위해 타사 다운로드를 활성화하는 등의 작업을 통해 우분투 설치

업데이트 # 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

이더넷이 기본적으로 선호되어야합니다. 이상한. 출력이의 출력과 nmcli c show동일 route -n합니까?
Tommiie

내 업데이트 된 질문을 참조하십시오.

의견에 질문을 버리지 말고 그 결과로 질문을 업데이트하십시오.
Tommiie

그래, 나는 매우 빨리 깨달았다. 편집 내용을 수정하고 있습니다. 1 분만 더 주면 완전한 결과를 얻을 수 있습니다. 끝났다.

이더넷과 Wi-Fi가 동일한 LAN을 공유하는 특정 사례의 경우 활성 백업 모드에서 본딩 장치를 사용하면 원활한 페일 오버와 단 하나의 경로 만 단순화해야합니다. 본딩-데비안 위키 (구성은 네트워크 관리자로 변환되어야 함)
AB

답변:


2

여기에 문제가 있습니다.

  • 케이블 LAN과 무선 LAN은 동일한 서브넷에 대한 브리지입니다 123.456.89.0/24
  • 해당 네트워크에서 동시에 연결하면 두 개의 기본 게이트웨이가 있습니다 (일부 고급 라우팅을 통해 해결할 수 있음 ip rules)
  • Wi-Fi와 케이블 연결 사이에 다리가 있기 때문에 해당 게이트웨이에는 같은 주소가 있습니다.

이더넷이 다음과 같이 연결될 때 WiFi를 자동으로 비활성화하려면 외부 스크립트를 사용해야합니다.

스크립트를 작성하십시오 /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


0

메트릭 값에 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(느슨한 필터링)으로 변경 했으므로 배포자에 의해 되돌려졌습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.