Làm cách nào để đặt mức độ ưu tiên của các kết nối mạng trong Ubuntu?


41

Nếu máy Ubuntu 11.04 được kết nối đồng thời với WiFi và 3G, làm cách nào để đặt ưu tiên cho các ứng dụng (trình duyệt, v.v.) sử dụng WiFi trước? Nếu không có sẵn, nó nên sử dụng 3G.

Về cơ bản, tôi muốn đặt thứ tự sử dụng các kết nối mạng.

Chỉnh sửa: Tôi đang tìm kiếm một cách tiếp cận dễ dàng hơn, hữu ích cho những người chỉ thoải mái và không phải là chuyên gia về Ubuntu / Linux.

Câu trả lời:


27

Tôi ngạc nhiên không ai đã đề cập đến lệnh đơn giản nhất để làm điều này : ifmetric. Nó có thể được cài đặt bằng cách sử dụng sudo apt-get install ifmetric. Lệnh này có thể được sử dụng để thay đổi số liệu của bất kỳ giao diện nào. Các giao diện với số liệu thấp hơn được ưu tiên cho Internet.

Để sử dụng điều này, trước tiên hãy xem số liệu bằng routelệnh:

$ 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

Ở đây, eth0có số liệu thấp hơn, vì vậy nó sẽ được ưa thích hơn wlan0. Nếu bạn muốn thích wlan0, sau đó hạ thấp số liệu của nó:

sudo ifmetric wlan0 50

Bây giờ, bảng định tuyến sẽ trông như sau:

$ 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

Bây giờ Linux sẽ được sử dụng wlan0cho Internet. Sự thay đổi sẽ được phản ánh ngay lập tức.


1
Câu trả lời chính xác. Thx (cũng cho tuyến đường -n). Tôi đã phải khởi động lại sau khi cài đặt ifmetric cho lệnh để thay đổi số liệu
Thorsten Niehues

Cách thực hiện thay đổi này vĩnh viễn (Tôi không muốn vô tình sử dụng điểm nóng iPhone của mình)
Thorsten Niehues

2
@ThorstenNiehues: Một giải pháp nhanh chóng xuất hiện trong đầu tôi để biến nó thành vĩnh viễn là thêm lệnh ifmetric vào crontab của bạn, bằng cách thực hiện crontab -evà sau đó thêm dòng ở cuối : @reboot sudo ifmetric wlan0 50.
shivams

Nó hoạt động. Nhưng tôi không thể truy cập các máy cục bộ sau này (thông qua trình duyệt). Bất kỳ ý tưởng? Cảm ơn.
tomasb

@tomasb: nghi ngờ thú vị. Tuy nhiên, điều đó được mong đợi vì việc thay đổi tùy chọn giao diện sẽ đưa bạn vào mạng cục bộ của giao diện ưa thích. Một cách đơn giản để truy cập các máy cục bộ là truy cập chúng bằng máy ảo. Tuy nhiên, các giải pháp tốt hơn phải tồn tại. Hãy để tôi suy nghĩ và trả lời.
shivams

14

Đặt số liệu là cách bạn thay đổi các ưu tiên. Số liệu cao hơn sẽ "đắt" hơn khi sử dụng, do đó, HĐH sẽ sử dụng các giao diện có số liệu thấp nhất nếu cần định tuyến lưu lượng. Trong trường hợp giao diện số liệu thấp hơn bị tắt, nó sẽ sử dụng giao diện số liệu cao hơn vì đây là giao diện duy nhất có thể được sử dụng để định tuyến lưu lượng truy cập đến mạng / đích cụ thể đó.

Các số liệu được chỉ định trong tệp / etc / mạng / giao diện , các điểm liên kết đến tài liệu.

Sử dụng bất kỳ trình soạn thảo văn bản nào để chỉnh sửa tệp, xác định mạng và chỉ cần thay đổi metrictham số và lưu. Khởi động lại là cách đơn giản nhất để thiết lập lại tất cả các giá trị mà không cần đi sâu vào các chi tiết táo bạo khi khởi động lại các dịch vụ mạng.


2
Harry - Cảm ơn bạn đã phản hồi - Mạng mà tôi quan tâm đến eth1 được hiển thị trong "ifconfig", nhưng không hiển thị trong "/ etc / network / giao diện". Những gì được hiển thị trong "ifconfig" và những gì trong "/ etc / network / interface"?
Praveen Sripati

1
Thêm eth0 vào "/ etc / mạng / giao diện" sẽ rủi ro hơn. Bạn có thể thử ifconfig làm root để thay đổi số liệu cho giao diện (kiểm tra xem nó có ở đó sau khi khởi động không).
harrymc

Khi tôi chạy 'sudo ifconfig eth1 metric 4' Tôi đã gặp lỗi sau 'SIOCSIFMETRIC: Thao tác không được hỗ trợ'. goo.gl/UhXBJ nói rằng 'Ngoài ra, không phải tất cả các hệ thống đều sử dụng đối số số liệu. ..... Khi định cấu hình hệ thống Linux, bạn thêm lệnh tuyến đường rõ ràng cho từng giao diện. "Có vẻ như không có cách tiếp cận thẳng nào trong Ubuntu như từ giao diện người dùng cho người dùng mới làm quen.
Praveen Sripati

2
Có vẻ như Linux tự quyết định bộ điều hợp nhanh nhất sau khi kiểm tra tốc độ nhanh trên tất cả các bộ điều hợp. Số liệu không còn được hỗ trợ trên nhiều bản phân phối. Bạn vẫn có thể thử và ra lệnh mọi thứ thông qua "/ etc / mạng / giao diện", nhưng tôi không biết bạn sẽ thành công như thế nào. Xem thêm câu hỏi này .
harrymc

3
Giải pháp đơn giản nhất mà mọi người thường làm là tắt giao diện mà bạn không muốn sử dụng hoặc giới hạn ở chế độ "Chỉ sử dụng kết nối này cho các tài nguyên trên mạng của nó" (nếu bạn cũng có máy in hoặc bất cứ thứ gì trên đó cùng bộ định tuyến).
harrymc

7
  1. Ưu tiên giao diện cho lưu lượng chung được thực hiện bằng cách thao tác các số liệu định tuyến. Mỗi tuyến có các tham số liên quan như số bước nhảy và băng thông. Xem tùy chọn "số liệu" trong trang man để biết routelệnh.

    $ 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. Ưu tiên truy cập ứng dụng vào tài nguyên mạng thường được giải quyết bằng "định hình lưu lượng truy cập" - Tôi sẽ sử dụng công cụ tìm kiếm web để xem Ubuntu hoặc bộ định tuyến có thể làm điều đó không.


Chú thích.

Trên MS Windows, nhưng không phải trên Linux, netstat -nrlệnh xuất ra thông tin giống như route print. Bao gồm các số liệu định tuyến.


Trong trang hướng dẫn cho tuyến đường "Số liệu 'khoảng cách' đến mục tiêu (thường được tính bằng bước nhảy). Nó không được sử dụng bởi các nhân gần đây, nhưng có thể cần bằng cách định tuyến daemon." Tôi không chắc chắn nếu trên Ubuntu Desktop thông thường, tham số số liệu sẽ có bất kỳ ảnh hưởng nào.
Praveen Sripati

1
Bạn có thể vui lòng cho tôi lệnh tuyến đường cụ thể để làm điều này?
Praveen Sripati

11
@PraveenSripati - Tôi không tin rằng bạn đã đưa ra 100 đại diện kiếm được nhiều tiền cho câu trả lời như vậy - đúng về mặt kỹ thuật, nhưng không giúp ích gì cho bạn và tôi. :-( Tôi cũng đang tìm kiếm một mệnh lệnh cụ thể.
Lord Loh.

1
Thực sự những gì một câu trả lời ?? còn netstat -nr không hiển thị số liệu. Xem câu trả lời từ @shivams
Thorsten Niehues

3

Tôi chưa thực sự dùng thử, nhưng NCD (Mạng cấu hình mạng - 1) có thể được sử dụng cho mục đích này. Các trang web tuyên bố để làm cho cấu hình mạng dễ dàng. Cú pháp có vẻ đơn giản.

#Wait cho một số kết nối mạng. Thích eth1 bằng cách đặt nó trước eth0.
danh sách ("NET-eth1", "NET-eth0") tên;

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


Bạn nói đúng, phần mềm NCD của tôi làm điều này độc đáo; ví dụ ở đó hoạt động như vốn có. Tuy nhiên, tôi cần lưu ý rằng pnamesdanh sách trên thực tế chỉ là một đối số cho multidepend()câu lệnh trên dòng tiếp theo - đây là danh sách thực hiện các ưu tiên. Cơ chế đằng sau điều này là khi eth1xuất hiện khi eth0đã lên, nó được thực thi multiprovide("NET-eth1");, bởi vì NET-eth1ở phía trước NET-eth0, multidepend()sẽ đi xuống và quay lại ngay lập tức, nhưng phơi bày các biến từ eth1quá trình thay vì eth0.
Ambroz Bizjak

Tôi nhìn nó nhưng không thể hiểu được. Điều này không nên khó khăn như vậy.
SDsolar

3

Đây là tất cả vì số liệu tuyến đường. Bạn muốn xóa tuyến mặc định với số liệu thấp nhất và sau đó khôi phục tuyến cũ với số liệu cao hơn. Hãy làm theo các lệnh dưới đây.

Hãy nói rằng bảng định tuyến của bạn trông như thế này:

# 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

Bây giờ xóa cổng mặc định

# route delete default gateway

Bây giờ khôi phục cổng mặc định cũ hơn (lưu ý rằng số liệu trong trường hợp này cao hơn 102 so với tuyến mặc định 101 hiện tại)

# 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

Những công việc này. Lưu ý cho bất kỳ người mới nào khác (tôi đã phải đọc điều này một vài lần để theo dõi những gì đang xảy ra): bước 1 ở trên loại bỏ mục nhập Gateway= 10.16.87.254, là UGmức thấp nhất Metricvà bước 2 đặt nó trở lại với mức cao hơn Metricđể nó cao hơn vẫn có sẵn như là bản sao lưu trong trường hợp 192.168.151.2không có sẵn.
WillC

0

[Cập nhật] Kể từ Ubuntu 18.04 LTS (máy chủ), netplanlà trình bao bọc mặc định để quản lý mạng. Cấu hình Netplan được thực hiện thông qua tệp YAML , theo mặc định /etc/netplan/01-netcfg.yaml(chi tiết tại đây ).

Số liệu định tuyến được xác định bởi metrictùy chọn "", dự kiến ​​số nguyên dương (thường 100là giá trị mặc định). Đây là ví dụ từ trang tham khảo:

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

Tuyến đường có thấp nhất metric(chiều dài đường dẫn) trở thành cổng "ưa thích". (Sử dụng: sudo netplan tryđể cho phép thay đổi)

Lưu ý rằng trong môi trường chuyển vùng (nhiều kết nối, bật và tắt), bạn có thể muốn đặt optionaltham số (boolean) thành true(mặc định là sai):

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

Lưu ý cú pháp hơi khác nhau cho số liệu tuyến đường trong trường hợp kết nối DHCP.

Bạn cũng có thể sử dụng NetworkManagernhư một trình kết xuất, mà tôi cho rằng (chưa tự kiểm tra) sẽ cho phép bạn xem / chỉnh sửa một phần cấu hình đó thông qua các công cụ GUI.

renderer (vô hướng)

Sử dụng phụ trợ mạng đã cho cho định nghĩa này. Hiện đang được hỗ trợ networkdNetworkManager. Thuộc tính này có thể được chỉ định trên toàn cầu networks:, đối với loại thiết bị (ví dụ ethernets:) hoặc cho một định nghĩa thiết bị cụ thể. Mặc định là networkd.

(Ví dụ 'lớn' cuối cùng trên trang tham chiếu cho thấy việc sử dụng kết hợp cả hai trình kết xuất như vậy).

Xem thêm câu hỏi này (Askubfox) .

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.