ฉันจะทำให้อีเทอร์เน็ตมีความสำคัญมากกว่า wifi บน Ubuntu 18.04 ได้อย่างไร


13

เป้าหมาย

ให้อีเธอร์เน็ตมีความสำคัญเหนือกว่าแบบไร้สายเมื่อเสียบสายอีเธอร์เน็ต

วิธี

หลังจากทำ Googling ในปริมาณที่เหมาะสมแล้วการอ่านฉันมาถึงจุดที่ฉันเชื่อว่าสิ่งที่ฉันควรจะทำคือบางสิ่งตามแนวของ

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

บรรทัดแรกมี 20 คำนำหน้าก่อนค่า 200 ที่ฉันตั้งไว้ สิ่งนี้ยังคงถูกนำไปใช้อย่างต่อเนื่องตามสิ่งที่ฉันเรียกใช้ หากฉันเปลี่ยนค่าสำหรับตัวชี้วัดผ่านnmcliเป็น 500 route -nจะรายงาน 20500 เหตุใดจึงเป็นเช่นนี้ มันไม่ถูกต้องเพราะฉันบอกว่าฉันต้องการทั้ง 200 หรือ 500 ไม่ใช่ 20200 และ 20500

บรรทัดที่สองมีค่าการวัดที่ฉันไม่รู้ว่ามาจากไหนและฉันไม่สามารถส่งผลกระทบได้เลย หากใครสามารถทำให้กระจ่างเกี่ยวกับเรื่องนี้ฉันรู้สึกขอบคุณ

ดูเหมือนว่าคำสั่งเหล่านี้จะสิ้นสุดลงในสิ่งที่จับต้องได้ไม่ได้มีผลกระทบต่อตัวชี้วัด ฉันไม่สามารถบอกได้ว่าอีเธอร์เน็ตกำลังมาก่อนดังนั้นฉันคิดว่ามันไม่ใช่

ผลการวิจัยอื่น ๆ

สิ่งที่ฉันได้พบอยากรู้อยากเห็นและดูเหมือนจะทำงานเพื่อบาง$ sudo ifmetric enp0s31f6 200ขอบเขตคือการใช้ สองถึงสามสิ่งนี้;

  • มันมีผลต่อเมตริกของอินเทอร์เฟซ ( route -nรายงานทุกบรรทัดกับ Iface enp0s31f6เพื่อให้มีค่า 200)
  • มันมีผลต่อ UI ใน Ubuntu (ที่มุมขวาบนฉันจะเห็นสวิตช์สลับภาพระหว่างอีเธอร์เน็ตและไอคอนไร้สายสลับขึ้นอยู่กับค่าตัวชี้วัดที่ฉันให้ไว้ในifmetricคำสั่ง)
  • บางครั้งมันก็เกิดNETLINK: Error: File existsข้อผิดพลาดกับฉัน การประหารชีวิตที่ตามมาของคำสั่งเดียวกันอาจหรืออาจไม่ได้ส่งผลให้เกิดข้อผิดพลาดนี้

ข้อมูลระบบบางอย่าง

  • EliteBook 850 G5
  • Ubuntu 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

อีเทอร์เน็ตควรเป็นที่ต้องการโดยค่าเริ่มต้น แปลก. เอาท์พุทnmcli c showเป็นเช่นเดียวกับการroute -nส่งออกของ?
Tommiie

ดูคำถามที่อัปเดตของฉัน

โปรดอัปเดตคำถามของคุณด้วยผลลัพธ์เหล่านั้นแทนที่จะทิ้งไว้ในความคิดเห็น
Tommiie

ใช่ฉันรู้ได้ค่อนข้างเร็วการทิ้งในความคิดเห็นไม่ได้ผล ฉันกำลังแก้ไขการแก้ไข ให้เวลาฉันอีก 1 นาทีและคุณจะได้ผลลัพธ์ที่สมบูรณ์ มันจบแล้ว.

สำหรับกรณีเฉพาะที่อีเธอร์เน็ตและหุ้น LAN เดียวกันโดยใช้อุปกรณ์พันธะในโหมดการใช้งานสำรองข้อมูลควรลดความซับซ้อนของสิ่ง WiFi: ล้มเหลวอย่างราบรื่นและมีเพียงหนึ่งเส้นทาง: พันธะ - เดวิกิพีเดีย (config เพียงแค่จะต้องมีการแปลเป็นผู้จัดการเครือข่าย)
AB

คำตอบ:


2

คุณมีปัญหาการซ้อนที่นี่:

  • สายเคเบิล LAN และ LAN ไร้สายของคุณเป็นสะพานเชื่อมต่อไปยังซับเน็ตเดียวกัน 123.456.89.0/24
  • คุณจะมีเกตเวย์เริ่มต้นสองแห่งหากคุณเชื่อมต่อในเวลาเดียวกันในเครือข่ายเหล่านั้น (สามารถแก้ไขได้ด้วยการกำหนดเส้นทางขั้นสูงบางอย่างและip rules)
  • เกตเวย์เหล่านั้นมีที่อยู่เดียวกันเนื่องจากคุณมีสะพานเชื่อมระหว่างการเชื่อมต่อ wifi และ cabled

บางทีคุณควรพึ่งพาสคริปต์ภายนอกเพื่อปิดใช้งาน 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

ฉันเชื่อว่านี่เป็น NetworkManager ที่ลงโทษการเชื่อมต่อที่คิดว่าไม่สามารถเข้าถึงได้โดยเพิ่ม 20,000 ให้กับค่าตัวชี้วัด จากคู่มือ NetworkManager.conf :

เส้นทางเริ่มต้นของอุปกรณ์ที่ไม่มีการเชื่อมต่อทั่วโลกจะได้รับค่าปรับ +00,000 ไปยังตัวชี้วัดเส้นทาง

โซลูชันที่ 1

คุณสามารถลองปิดการใช้งานการตรวจสอบการเชื่อมต่อโดยการแสดงความคิดเห็นออกตัวเลือกหรือปล่อยให้มันว่างเปล่าในuri=NetworkManager.conf

โซลูชันที่ 2

ตั้งอยู่net.ipv4.conf.all.rp_filter = 2ใน/etc/sysctl.confหรือที่ใช้ใน distro ของคุณ ระวังไปได้ช่องโหว่ข้อมูลรั่วไหล

พื้นหลัง

คู่มือ NetworkManager.confมีคำอธิบายเล็ก ๆ เกี่ยวกับสาเหตุที่การตรวจสอบการเชื่อมต่ออาจจะชำรุด:

โปรดทราบว่าการกระจายของคุณอาจตั้ง proc / sys / / net / ipv4 / conf / * / rp_filter การกรองที่เข้มงวด ซึ่งทำงานได้ไม่ดีกับการตรวจสอบการเชื่อมต่อต่ออุปกรณ์ซึ่งใช้ SO_BINDDEVICE เพื่อส่งคำขอบนอุปกรณ์ทั้งหมด การตั้งค่า rp_filter ที่เข้มงวดจะปฏิเสธการตอบสนองใด ๆ และการตรวจสอบการเชื่อมต่อทั้งหมด แต่เส้นทางที่ดีที่สุดจะล้มเหลว

ในตัวกรอง distro เข้มงวดของฉันเปิดใช้งาน:

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

ค่า1หมายถึงการกรองอย่างเข้มงวดและนี่เป็นสาเหตุของการตรวจสอบการเชื่อมต่อที่ล้มเหลว คน systemd เปลี่ยนสิ่งนี้เป็น2(การกรองแบบหลวม) โดยมีข้อโต้แย้งแย้งว่ามีช่องโหว่เกิดขึ้นจึงถูกเปลี่ยนกลับโดย distros

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.