Ubuntu 18.04'te ethernet'in wifi üzerinden nasıl öncelik kazanmasını sağlayabilirim?


13

Hedef

Ethernet kablosu takıldığında ethernet'in kablosuz bağlantıdan öncelikli olmasına izin verin

Yöntem

Yeterli miktarda Googling ve okuma yaptıktan sonra ne yapmam gerektiğine inandığım bir noktaya geldim .

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

burada 200'ün kablosuz metriğe göre daha düşük bir değer olması, ethernet'in kablosuzdan öncelikli olmasını sağlamaktır.

Sonuçlar

Beni şaşırtan şey, route -nyukarıdaki komutları yerine getirip (iyi bir ölçü için) yeniden başlattıktan sonra aldığım raporlar ve bunun hedefime ulaşmaya değecek gibi görünmemesi

$ 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

Sayılar komut yürütmemle ilgili olarak toplanıyor, ancak

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

İlk satır, belirlediğim 200 değerinden 20 ön ekine sahip. Bu, koştuğum şeye göre sürekli olarak uygulanmaya devam ediyor; Metriğin değerini nmcli500 olarak değiştirirsem, route -n20500 rapor eder. Bu neden olur? Doğru görünmüyor, çünkü 20200 ve 20500 değil 200 veya 500 istedim.

İkinci satırın nereden geldiğini bilmediğim bir metrik değeri var ve bunu hiç etkilemiyorum. Eğer birisi buna ışık tutabilirse minnettarım.

Bu komutların, metrikleri etkilemekten başka somut bir şeye benzemediği görülüyor; Ethernet'in önceliğe sahip olduğunu söyleyemem, bu yüzden olmadığını varsayıyorum.

Diğer bulgular

Ben merak bulundu ve çalışıyor gibi görünüyor ne bir ölçüde, kullanılmasıdır $ sudo ifmetric enp0s31f6 200. Bu iki ila üç şey yapar;

  • Arayüzün metriğini etkiler ( route -nIface ile tüm satırları enp0s31f6200 değerine sahip olacak şekilde raporlar )
  • Ubuntu'daki kullanıcı arayüzünü etkiler (Sağ üst köşede, ifmetrickomutta verdiğim metrik değerlere bağlı olarak, ethernet ve kablosuz simgeler arasında görsel bir geçiş göreceğim )
  • Bu bazen bir atar NETLINK: Error: File existsbana hatayı. Aynı komutun daha sonraki yürütülmesi bu hataya neden olabilir veya olmayabilir

Bazı sistem bilgileri

  • EliteBook 850 G5
  • Ubuntu 18.04
  • Yükleyicinin tüm diski, etkin şifrelemeyi, sürücüler için etkin 3. taraf indirmelerini vb. Kullanmasına izin vererek yapılan Ubuntu yüklemesi.

Güncelleme # 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 varsayılan olarak tercih edilmelidir. Garip. Çıktısı çıktı ile nmcli c showaynı route -nmı?
Tommiie

Güncellenmiş soruma bakın.

Lütfen sorunuzu yorumda atmak yerine bu sonuçla güncelleyin.
Tommiie

Evet, oldukça hızlı bir şekilde fark ettim, yorumlara yapılan döküntü işe yaramayacaktı. Düzenlemede değişiklikler yapıyorum. Bana 1 dakika daha ver, ve tam çıkışa sahip olursun. Bitti.

ethernet ve wifi'nin aynı LAN'ı paylaştığı özel durum için, aktif yedekleme modunda bir bağlama cihazı kullanmak işleri basitleştirmelidir: kesintisiz yük devretme ve sadece bir yol: Bağlama - Debian Wiki (yapılandırma sadece ağ yöneticisine çevrilmelidir)
AB

Yanıtlar:


2

Burada yığılmış problemleriniz var:

  • Kablo LAN'ınız ve kablosuz LAN'ınız aynı alt ağa bir köprüdür 123.456.89.0/24
  • Söz konusu ağlarla aynı zaman (bu bazı gelişmiş bir yönlendirme ile çözülebilir bağlantı varsa iki varsayılan ağ geçitleri olacak ip rules)
  • Wifi ve kablolu bağlantı arasında bir köprü olduğundan, bu ağ geçitleri AYNI ADRES vardır.

Ethernet böyle bir şekilde bağlandığında wifi'yi otomatik olarak devre dışı bırakmak için belki de harici komut dosyalarına güvenmelisiniz:

Komut dosyasını oluşturun /etc/NetworkManager/dispatcher.d/70-wifi-wired-exclusive.sh. İçindekiler:

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

Komut dosyasını devre dışı bırakmak için, touch /etc/NetworkManager/.wifi-wired-exclusive


0

Bunun NetworkManager'ın metrik değerine 20000 ekleyerek erişilemez olduğunu düşündüğü bağlantıları cezalandırdığına inanıyorum. Gönderen NetworkManager.conf kılavuzda :

global bağlantısı olmayan cihazların varsayılan rotası rota metriğine +20000 ceza alır

Çözüm 1

Seçeneği yorumlayarak uri=veya boş bırakarak bağlantı kontrolünü devre dışı bırakmayı deneyebilirsiniz NetworkManager.conf.

Çözüm 2

Set net.ipv4.conf.all.rp_filter = 2içinde /etc/sysctl.confveya dağıtıma içinde uygulanabildiği yerde. Bilgi sızıntısı olabilecek güvenlik açıklarına dikkat edin .

Arka fon

NetworkManager.conf manuel bağlantı denetimi arızalı olabilir neden küçük bir açıklaması vardır:

Dağıtımınızın / proc / sys / net / ipv4 / conf / * / rp_filter ayarını katı filtrelemeye ayarlayabileceğini unutmayın . Bu, tüm cihazlarda istek göndermek için SO_BINDDEVICE kullanan cihaz başına bağlantı denetimi ile kötü çalışır. Katı bir rp_filter ayarı herhangi bir yanıtı reddeder ve en iyi yol dışındaki tüm bağlantı kontrolü başarısız olur.

Benim dağıtımımda sıkı filtreleme etkinleştirildi:

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

Değer katı filtreleme1 anlamına gelir ve bu bağlantı kontrolünün başarısız olmasından sorumludur. Systemd millet bu değişiklik ile (gevşek filtreleme) işlemek tartışmalı olduğu ortaya güvenlik böylece dağıtımlar ile geri alındı.2

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.