मैं १ ?.०४ पर वाईफाई पर पूर्वगामी कैसे बना सकता हूं?


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

पहली पंक्ति में 200 मानों को सेट करने से पहले 20 उपसर्ग है। मैं जो चलाता हूं, उसके आधार पर यह लगातार लागू होता रहता है; यदि मैं nmcli500 कहने के लिए मीट्रिक के लिए मान route -nबदलूँ , तो 20500 की रिपोर्ट करेंगे। ऐसा क्यों होता है? मुझे यकीन है कि यह सही नहीं लगता, क्योंकि मैंने कहा था कि मैं 200 या 500 चाहता था, 20200 और 20500 नहीं।

दूसरी पंक्ति का मीट्रिक मान है कि मुझे पता नहीं है कि यह कहाँ से आता है, और मैं इसे बिल्कुल प्रभावित नहीं कर सकता। अगर कोई इस पर प्रकाश डाल सकता है, तो मैं आभारी हूं।

ऐसा नहीं लगता है कि ये कमांड मेट्रिक्स को प्रभावित करने के अलावा, किसी भी चीज़ को मूर्त रूप में रखते हैं; मैं यह नहीं बता सकता कि ईथरनेट पूर्वता ले रहा है, इसलिए मुझे लगता है कि यह नहीं है।

अन्य निष्कर्ष

मैंने जो उत्सुकता पाई है, और कुछ हद तक काम कर रहा है , उसका उपयोग है $ sudo ifmetric enp0s31f6 200। यह दो से तीन चीजें करता है;

  • यह इंटरफ़ेस के मीट्रिक को प्रभावित करता है ( मान के route -nसाथ सभी पंक्तियों की रिपोर्ट करता enp0s31f6है कि मान 200 है)
  • यह उबंटू में यूआई को प्रभावित करता है (ऊपरी दाएं कोने में मैं ईथरनेट और वायरलेस आइकन स्विच करने के बीच एक दृश्य स्विच देखूंगा, जो मैं मैट्रिक ifmetricकमांड में प्रदान करता हूं ) पर निर्भर करता है।
  • यह कभी-कभीNETLINK: Error: File exists मुझ पर एक त्रुटि फेंकता है । एक ही आदेश के बाद के निष्पादन इस त्रुटि के परिणामस्वरूप हो सकते हैं या नहीं हो सकते हैं

कुछ सिस्टम जानकारी

  • EliteBook 850 G5
  • उबुन्टु 18.04
  • इंस्टॉलर को पूरी डिस्क का उपयोग करने, सक्षम एन्क्रिप्शन, ड्राइवरों के लिए 3 पार्टी डाउनलोड सक्षम करने आदि के माध्यम से उबंटू इंस्टॉल किया गया।

अपडेट # 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आउटपुट है?
टॉमी

मेरा अद्यतन प्रश्न देखें।

कृपया अपने प्रश्न को एक टिप्पणी में डंप करने के बजाय उन परिणामों के साथ अपडेट करें।
टॉमी

हाँ, मुझे बहुत तेज़ एहसास हुआ, टिप्पणियों में डंप काम करने वाला नहीं था। मैं संपादन में संशोधन कर रहा हूं। मुझे 1 और मिनट दें, और आपके पास पूरा आउटपुट होगा। हॊ गया।

उस विशिष्ट मामले के लिए जहां ईथरनेट और वाईफाई एक ही लैन साझा करते हैं, सक्रिय-बैकअप मोड में एक बॉन्डिंग डिवाइस का उपयोग करके चीजों को सरल करना चाहिए: सीमलेस फेलओवर और केवल एक मार्ग: बॉन्डिंग - डेबियन विकी (केवल नेटवर्क मैनेजर में अनुवादित होना है)
एबी

जवाबों:


2

आपने यहां समस्याएं खड़ी की हैं:

  • आपका केबल LAN और वायरलेस LAN एक ही सबनेट का पुल है 123.456.89.0/24
  • यदि आपके पास उन नेटवर्क पर एक ही समय कनेक्ट करने के लिए आपके पास दो डिफ़ॉल्ट गेटवे होंगे (यह कुछ उन्नत रूटिंग के साथ हल किया जा सकता है ip rules)
  • उन गेटवे पर समान ADDRESS है, क्योंकि आपके पास वाईफाई और सक्षम कनेक्शन के बीच एक पुल है।

हो सकता है कि जब आप ईथरनेट को इस तरह से प्लग इन करते हैं तो आपको बाहरी स्क्रिप्ट को ऑटो को निष्क्रिय करने पर निर्भर होना चाहिए:

स्क्रिप्ट बनाएं /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 कनेक्शनों को दंडित करता है कि यह लगता है कि अप्राप्य हैं, मीट्रिक मूल्य में 20000 जोड़कर। से NetworkManager.conf मैनुअल :

वैश्विक कनेक्टिविटी के बिना उपकरणों के डिफ़ॉल्ट-मार्ग को मार्ग-मीट्रिक के लिए +20000 का जुर्माना मिलता है

समाधान 1

आप विकल्प की टिप्पणी करके uri=या उसे खाली छोड़ कर, कनेक्टिविटी जाँच को अक्षम करने का प्रयास कर सकते हैं NetworkManager.conf

समाधान २

सेट net.ipv4.conf.all.rp_filter = 2में /etc/sysctl.confया अपने distro में जहां लागू हो। संभावित जानकारी रिसाव की कमजोरियों से सावधान रहें ।

पृष्ठभूमि

NetworkManager.conf पुस्तिका के बारे में क्यों कनेक्टिविटी जाँच खराब हो सकता है एक छोटे से व्याख्या है:

ध्यान दें कि आपका वितरण सख्त फ़िल्टरिंग के लिए सेट / खरीद / 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 साथ इसे (ढीले फ़िल्टरिंग) में बदल दिया , इस प्रकार डिस्ट्रोस द्वारा वापस कर दिया गया।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.