Làm cách nào để ethernet được ưu tiên hơn wifi trên Ubuntu 18.04?


13

Mục tiêu

Để ethernet được ưu tiên hơn không dây khi cắm cáp ethernet

phương pháp

Sau khi thực hiện một số lượng khá lớn về Google và đọc Tôi đã đến một điểm mà tôi tin rằng những gì tôi nên làm là một cái gì đó dọc theo dòng

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

trong đó 200 là giá trị thấp hơn số liệu không dây, để ethernet được ưu tiên hơn mạng không dây.

Các kết quả

Điều khiến tôi bối rối là các báo cáo tôi nhận được route -nsau khi tôi đã thực hiện các lệnh trên và khởi động lại (vì biện pháp tốt) và thực tế là điều này dường như không đạt được mục tiêu của tôi

$ 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

Các số cộng với liên quan đến thực thi lệnh của tôi, nhưng đối với các dòng có nội dung

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

Dòng đầu tiên có 20 tiền tố trước giá trị 200 tôi đặt. Điều này tiếp tục được áp dụng nhất quán dựa trên những gì tôi chạy; Nếu tôi thay đổi giá trị cho số liệu thông qua nmcli500, route -nsẽ báo cáo 20500. Tại sao điều này xảy ra? Nó chắc chắn không đúng, vì tôi đã nói rằng tôi muốn 200 hoặc 500, không phải 20200 và 20500.

Dòng thứ hai có một giá trị số liệu mà tôi không biết nó đến từ đâu và dường như tôi không thể ảnh hưởng đến nó. Nếu ai đó có thể làm sáng tỏ điều này, tôi rất biết ơn.

Không có vẻ như các lệnh này kết thúc trong bất kỳ điều gì hữu hình, ngoài việc ảnh hưởng đến các số liệu; Tôi không thể nói rằng ethernet đang được ưu tiên, vì vậy tôi cho rằng nó không phải.

Những phát hiện khác

Những gì tôi đã tìm thấy tò mò, và dường như đang làm việc ở một mức độ nào đó, là việc sử dụng $ sudo ifmetric enp0s31f6 200. Điều này không có hai đến ba điều;

  • Nó ảnh hưởng đến số liệu của giao diện ( route -nbáo cáo tất cả các dòng với Iface enp0s31f6để có giá trị 200)
  • Nó ảnh hưởng đến giao diện người dùng trong Ubuntu (Ở góc trên bên phải tôi sẽ thấy một chuyển đổi trực quan giữa ethernet và các biểu tượng không dây chuyển đổi, tùy thuộc vào các giá trị số liệu tôi cung cấp trong ifmetriclệnh)
  • đôi khi ném một NETLINK: Error: File existslỗi vào tôi. Hành tiếp theo của cùng một lệnh có thể hoặc có thể không gây ra lỗi này

Một số thông tin hệ thống

  • EliteBook 850 G5
  • Ubuntu 18.04
  • Cài đặt Ubuntu được thực hiện thông qua việc cho phép trình cài đặt sử dụng toàn bộ đĩa, kích hoạt mã hóa, kích hoạt tải xuống của bên thứ 3 cho trình điều khiển, v.v.

Cập nhật số 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

Ethernet nên được ưu tiên theo mặc định. Lạ thật. Là đầu ra của nmcli c showgiống như route -nđầu ra của?
Tommiie

Xem câu hỏi cập nhật của tôi.

Vui lòng cập nhật câu hỏi của bạn với những kết quả đó thay vì bỏ chúng trong một bình luận.
Tommiie

Vâng, tôi nhận ra khá nhanh, việc bỏ vào các bình luận sẽ không thành công. Tôi đang sửa đổi để chỉnh sửa. Hãy cho tôi thêm 1 phút nữa và bạn sẽ có đầu ra hoàn chỉnh. Xong rôi.

đối với trường hợp cụ thể khi ethernet và wifi chia sẻ cùng một mạng LAN, sử dụng thiết bị liên kết ở chế độ sao lưu dự phòng sẽ đơn giản hóa mọi thứ: chuyển đổi dự phòng liền mạch và chỉ có một tuyến: Liên kết - Debian Wiki (cấu hình chỉ cần được dịch sang trình quản lý mạng)
AB

Câu trả lời:


2

Bạn đã xếp chồng các vấn đề ở đây:

  • Mạng LAN cáp và mạng LAN không dây của bạn là cầu nối đến cùng một mạng con 123.456.89.0/24
  • Bạn sẽ có hai cổng mặc định nếu bạn kết nối cùng một lúc tại các mạng đó (điều này có thể được giải quyết bằng một số định tuyến nâng cao ip rules)
  • Những cổng đó có ĐỊA CHỈ CÙNG, vì bạn có một cầu nối giữa wifi và kết nối có dây.

Có lẽ bạn nên dựa vào các tập lệnh bên ngoài để tự động tắt wifi khi ethernet được cắm như thế này:

Tạo kịch bản /etc/NetworkManager/dispatcher.d/70-wifi-wired-exclusive.sh. Nội dung:

#!/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

Để vô hiệu hóa tập lệnh, chỉ cần thực thi touch /etc/NetworkManager/.wifi-wired-exclusive


0

Tôi tin rằng đây là NetworkManager xử phạt các kết nối mà nó cho là không thể truy cập được, bằng cách thêm 20000 vào giá trị số liệu. Từ hướng dẫn sử dụng NetworkManager.conf :

tuyến đường mặc định của thiết bị không có kết nối toàn cầu sẽ bị phạt +20000 đối với hệ số tuyến

Giải pháp 1

Bạn có thể thử vô hiệu hóa kiểm tra kết nối bằng cách nhận xét tùy chọn uri=hoặc để trống, trong NetworkManager.conf.

Giải pháp 2

Đặt net.ipv4.conf.all.rp_filter = 2trong /etc/sysctl.confhoặc nơi áp dụng trong bản phân phối của bạn. Cảnh giác với các lỗ hổng thông tin có thể bị rò rỉ .

Lý lịch

Các nhãn hiệu NetworkManager.conf có một lời giải thích nhỏ về việc tại sao kiểm tra kết nối có thể là trục trặc:

Lưu ý rằng bản phân phối của bạn có thể đặt / Proc / sys / net / ipv4 / conf / * / rp_filter thành bộ lọc nghiêm ngặt . Điều đó hoạt động kém với kiểm tra kết nối trên mỗi thiết bị, sử dụng SO_BINDDEVICE để gửi yêu cầu trên tất cả các thiết bị. Cài đặt rp_filter nghiêm ngặt sẽ từ chối mọi phản hồi và kiểm tra kết nối trên tất cả nhưng tuyến tốt nhất sẽ thất bại.

Trong bản phân phối nghiêm ngặt của tôi được bật:

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

Giá trị 1có nghĩa là lọc nghiêm ngặt và điều này chịu trách nhiệm cho việc kiểm tra kết nối không thành công. Những người hệ thống đã thay đổi điều này thành 2(lọc lỏng) với một cam kết gây tranh cãi giới thiệu các lỗ hổng , do đó được hoàn nguyên bởi các bản phát hành.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.