Bagaimana cara menetapkan prioritas koneksi jaringan di Ubuntu?

42

Jika mesin Ubuntu 11.04 terhubung ke WiFi dan 3G secara bersamaan, bagaimana cara menetapkan prioritas untuk membiarkan aplikasi (browser dll.) Menggunakan WiFi terlebih dahulu? Jika itu tidak tersedia, itu harus menggunakan 3G.

Pada dasarnya, saya ingin mengatur urutan penggunaan koneksi jaringan.

Sunting: Saya mencari pendekatan yang lebih mudah yang akan berguna bagi mereka yang merasa nyaman dan tidak ahli dalam Ubuntu / Linux.

Praveen Sripati
sumber

Jawaban:

28

Saya terkejut tidak ada yang disebutkan perintah sederhana untuk melakukan hal ini: ifmetric. Itu dapat diinstal menggunakan sudo apt-get install ifmetric. Perintah ini dapat digunakan untuk mengubah metrik antarmuka apa pun. The antarmuka dengan metrik yang lebih rendah lebih disukai untuk Internet.

Untuk menggunakan ini, pertama-tama lihat metrik menggunakan routeperintah:

$ route -n

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.42.0.1       0.0.0.0         UG    100    0        0 eth0
0.0.0.0         10.42.0.2       0.0.0.0         UG    600    0        0 wlan0

Di sini, eth0memiliki metrik yang lebih rendah, sehingga akan lebih disukai daripada wlan0. Jika Anda ingin wlan0, lalu turunkan metriknya:

sudo ifmetric wlan0 50

Sekarang, tabel routing akan terlihat seperti:

$ route -n

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.42.0.2       0.0.0.0         UG    50     0        0 wlan0
0.0.0.0         10.42.0.1       0.0.0.0         UG    100    0        0 eth0

Sekarang Linux akan menggunakan wlan0untuk Internet. Perubahan akan segera tercermin.

shivams
sumber
1
Jawaban yang bagus Terima kasih (juga untuk rute -n). Saya harus reboot setelah menginstal ifmetric untuk perintah untuk mengubah metrik
Thorsten Niehues
Cara membuat perubahan ini permanen (Saya ingin tidak menggunakan hotspot iPhone saya secara tidak sengaja)
Thorsten Niehues
2
@ThorstenNiehues: Sebuah solusi yang cepat datang ke pikiran saya untuk membuatnya permanen adalah dengan menambahkan perintah ifmetric ke crontab Anda, dengan melakukan crontab -edan kemudian tambahkan baris di akhir: @reboot sudo ifmetric wlan0 50.
shivams
Berhasil. Tetapi saya tidak dapat mengakses mesin lokal setelah ini (via browser misalnya). Ada ide? Terima kasih.
tomasb
@ Thomasb: keraguan yang menarik. Namun, itu diharapkan, karena mengubah preferensi antarmuka akan membawa Anda ke jaringan lokal dari antarmuka yang disukai. Salah satu cara mudah untuk mengakses mesin lokal adalah dengan mengaksesnya menggunakan mesin virtual. Namun, solusi yang lebih baik harus ada. Biarkan saya berpikir dan membalas.
shivams
14

Mengatur metrik adalah cara Anda mengubah prioritas. Metrik yang lebih tinggi lebih "mahal" untuk digunakan, sehingga OS akan menggunakan antarmuka dengan metrik terendah jika perlu merutekan lalu lintas. Dalam hal antarmuka metrik bawah dimatikan, ia akan menggunakan antarmuka metrik lebih tinggi karena itu adalah satu-satunya antarmuka yang dapat digunakan untuk merutekan lalu lintas ke jaringan / tujuan tertentu tersebut.

Metrik ditentukan dalam file / etc / network / interfaces , titik tautan ke dokumentasi.

Gunakan editor teks apa saja untuk mengedit file, mengidentifikasi jaringan, dan hanya mengubah metricparameter dan menyimpan. Reboot adalah cara paling sederhana untuk mengatur ulang semua nilai tanpa masuk ke detail geek untuk memulai kembali layanan jaringan.

harrymc
sumber
2
Harry - Terima kasih atas responsnya - Jaringan saya tertarik dengan eth1 ditunjukkan pada "ifconfig", tetapi tidak di "/ etc / network / interfaces". Apa yang ditampilkan di "ifconfig" dan apa yang ada di "/ etc / network / interfaces"?
Praveen Sripati
1
Menambahkan eth0 ke "/ etc / network / interfaces" lebih berisiko. Anda dapat mencoba ifconfig sebagai root untuk mengubah metrik antarmuka (periksa apakah tetap ada setelah boot).
harrymc
Ketika saya menjalankan 'sudo ifconfig eth1 metric 4' Saya mendapatkan kesalahan berikut 'SIOCSIFMETRIC: Operasi tidak didukung'. goo.gl/UhXBJ mengatakan bahwa 'Selain itu, tidak semua sistem menggunakan argumen metrik. ..... Ketika mengkonfigurasi sistem Linux, Anda menambahkan perintah rute eksplisit untuk setiap antarmuka. "Sepertinya tidak ada pendekatan langsung di Ubuntu seperti dari UI untuk pengguna pemula.
Praveen Sripati
2
Sepertinya Linux menentukan dirinya sendiri pada adaptor tercepat setelah tes kecepatan cepat pada semua adapter. Metrik tidak lagi didukung di banyak distribusi. Anda masih dapat mencoba dan mendikte hal-hal melalui "/ etc / network / interfaces", tetapi saya tidak tahu seberapa sukses Anda nantinya. Lihat juga pertanyaan ini .
harrymc
3
Solusi paling sederhana, yang dilakukan semua orang, adalah mematikan antarmuka yang tidak ingin Anda gunakan, atau membatasi untuk "Gunakan koneksi ini hanya untuk sumber daya di jaringannya" (jika Anda juga memiliki printer atau apa pun itu) router yang sama).
harrymc
7
  1. Memprioritaskan antarmuka untuk lalu lintas umum dilakukan dengan memanipulasi metrik perutean. Setiap rute memiliki parameter terkait seperti hop-counts dan bandwidth. Lihat opsi "metrik" di halaman manual untuk routeperintah.

    $ route -n
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref     Use Iface
    0.0.0.0         192.168.1.254   255.255.255.255 U     0      0        0 eth0
    192.168.1.0     0.0.0.0         255.255.255.0   U     256    0        0 eth0
    
  2. Memprioritaskan akses aplikasi ke sumber daya jaringan sering ditangani oleh "traffic shaping" - Saya akan menggunakan mesin pencari web untuk melihat apakah Ubuntu atau router dapat melakukannya.


Catatan kaki.

Pada MS Windows, tetapi tidak pada Linux, netstat -nrperintah menghasilkan informasi yang sama dengan route print. Termasuk metrik perutean.

RedGrittyBrick
sumber
Di halaman manual untuk rute "Metrik 'Jarak' ke target (biasanya dihitung dalam hop). Ini tidak digunakan oleh kernel baru-baru ini, tetapi mungkin diperlukan oleh routing daemon.". Saya tidak yakin apakah pada Desktop Ubuntu biasa, parameter Metric akan berpengaruh.
Praveen Sripati
1
Bisakah Anda memberi saya perintah rute khusus untuk melakukan ini?
Praveen Sripati
11
@PraveenSripati - Saya tidak percaya Anda memberi 100 perwakilan Anda dengan susah payah untuk jawaban seperti itu - secara teknis benar, tetapi tidak membantu Anda atau saya. :-( Saya mencari perintah khusus juga.
Lord Loh.
1
Sungguh jawaban apa ?? netstat -nr juga tidak menunjukkan metrik. Lihat jawaban dari @shivams
Thorsten Niehues
3

Saya belum benar-benar mencobanya, tetapi NCD (Network Configuration Daemon - 1) dapat digunakan untuk tujuan ini. Situs ini mengklaim untuk membuat konfigurasi jaringan mudah. Sintaksnya tampaknya sederhana.

#Tunggu beberapa koneksi jaringan. Lebih suka eth1 dengan meletakkannya di depan eth0.
daftar pnames ("NET-eth1", "NET-eth0");

(1) - http://code.google.com/p/badvpn/wiki/NCD

Praveen Sripati
sumber
Anda benar, perangkat lunak NCD saya melakukan ini dengan baik; contoh di sana berfungsi apa adanya. Namun saya harus mencatat bahwa pnamesdaftar ini sebenarnya hanya argumen untuk multidepend()pernyataan pada baris berikutnya - ini adalah salah satu yang mengimplementasikan prioritas. Mekanisme di balik ini adalah bahwa ketika eth1muncul ketika eth0sudah naik, itu dieksekusi multiprovide("NET-eth1");, karena NET-eth1di depan NET-eth0, multidepend()akan turun dan kembali segera, tetapi mengekspos variabel dari eth1proses alih-alih eth0.
Ambroz Bizjak
Saya melihatnya tetapi tidak bisa mengetahuinya. Seharusnya tidak sesulit ini.
SDsolar
3

Ini semua karena metrik rute. Anda ingin menghapus rute default dengan metrik terendah dan kemudian mengembalikan rute lama dengan metrik lebih tinggi. Ikuti perintah di bawah ini.

Katakanlah tabel perutean Anda terlihat seperti ini:

# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.16.87.254    0.0.0.0         UG    100    0        0 ens38
0.0.0.0         192.168.151.2   0.0.0.0         UG    101    0        0 ens33
10.16.86.64     0.0.0.0         255.255.255.248 U     100    0        0 ens38
10.16.87.254    0.0.0.0         255.255.255.255 UH    100    0        0 ens38
10.16.88.6      10.16.87.254    255.255.255.255 UGH   100    0        0 ens38
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 ens38
192.168.151.0   0.0.0.0         255.255.255.0   U     100    0        0 ens33

Sekarang hapus gateway default

# route delete default gateway

Sekarang aktifkan kembali gateway default yang lama (perhatikan bahwa metrik dalam hal ini lebih tinggi 102 daripada rute default saat ini 101)

# route add default gw 10.16.87.254 metric 102 dev ens38                                                              
# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.151.2   0.0.0.0         UG    101    0        0 ens33
0.0.0.0         10.16.87.254    0.0.0.0         UG    102    0        0 ens38
10.16.86.64     0.0.0.0         255.255.255.248 U     100    0        0 ens38
10.16.87.254    0.0.0.0         255.255.255.255 UH    100    0        0 ens38
10.16.88.6      10.16.87.254    255.255.255.255 UGH   100    0        0 ens38
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 ens38
192.168.151.0   0.0.0.0         255.255.255.0   U     100    0        0 ens33
PnotNP
sumber
Ini bekerja. Catatan untuk pemula lain (saya harus membaca ini beberapa kali untuk mengikuti apa yang terjadi): langkah 1 di atas menghapus entri untuk Gateway= 10.16.87.254, yang merupakan UGdengan yang terendah Metric, dan langkah 2 meletakkannya kembali dengan yang lebih tinggi Metricsehingga masih tersedia sebagai cadangan jika 192.168.151.2tidak tersedia.
WillC
0

[Pembaruan] Pada Ubuntu 18.04 LTS (server), netplanadalah pembungkus default untuk manajemen jaringan. Konfigurasi Netplan dilakukan melalui file YAML , secara default /etc/netplan/01-netcfg.yaml(lebih detail di sini ).

Metrik perutean ditentukan oleh opsi " metric", yang mengharapkan bilangan bulat positif ( 100umumnya adalah nilai default). Inilah contoh dari halaman referensi:

network:
  version: 2
  renderer: networkd
  ethernets:
    eno1:
      addresses:
      - 10.0.0.10/24
      - 11.0.0.11/24
      nameservers:
        addresses:
          - 8.8.8.8
          - 8.8.4.4
      routes:
      - to: 0.0.0.0/0
        via: 10.0.0.1
        metric: 100
      - to: 0.0.0.0/0
        via: 11.0.0.1
        metric: 100

Rute dengan terendah metric(panjang jalur) menjadi gateway "yang disukai". (Gunakan: sudo netplan tryuntuk mengaktifkan perubahan)

Perhatikan bahwa dalam lingkungan roaming (beberapa koneksi, aktif dan nonaktif), Anda mungkin ingin mengatur optionalparameter (boolean) ke true(default salah):

network:
  version: 2
  ethernets:
    enred:
      dhcp4: yes
      dhcp4-overrides:
        route-metric: 100
    engreen:
      dhcp4: yes
      dhcp4-overrides:
        route-metric: 200
      # this is plugged into a test network that is often
      # down - don't wait for it to come up during boot.
      optional: true

Perhatikan sintaks yang sedikit berbeda untuk metrik rute dalam hal koneksi DHCP.

Anda juga dapat menggunakan NetworkManagersebagai renderer, yang saya kira (belum diuji sendiri) akan membiarkan Anda melihat / mengedit bagian dari konfigurasi juga melalui alat GUI.

renderer (skalar)

Gunakan backend jaringan yang diberikan untuk definisi ini. Yang didukung saat ini adalah networkddan NetworkManager. Properti ini dapat ditentukan secara global di networks:, untuk jenis perangkat (misalnya ethernets:) atau untuk definisi perangkat tertentu. Defaultnya adalah networkd.

(Contoh 'besar' terakhir di halaman referensi menunjukkan penggunaan hibrid dari kedua penyaji tersebut).

Lihat juga pertanyaan ini (askubuntu) .

EvDev
sumber