Làm cách nào để đặt tuyến tĩnh trong Ubuntu Server?


51

Tôi đã sử dụng Ubuntu kể từ Ubuntu 8.10; hôm nay tôi đang làm việc với Ubuntu 12.04 Server.

Tôi đang gặp khó khăn trong việc giữ các tuyến tĩnh khi khởi động. Tôi thường đặt các lệnh tuyến

/sbin/route add -net <IP>/<MASK> <GW> dev <ethX>

trong /etc/rc.localhoặc tôi sẽ tạo một tệp (có tên routes) trong thư mục /etc/network/if-up/, nhưng tôi nhận thấy rằng trên Ubuntu 12.04 nó không hoạt động.

Nếu tôi gõ các lệnh trong trình bao, chúng sẽ hoạt động, nhưng các lệnh tương tự không hoạt động khi chúng nằm trong tệp được chỉ định.

Tôi đã cố gắng thay đổi tên tệp thành các tên khác với suy nghĩ rằng tên tệp của tôi ( routes) có thể bị lỗi trong Ubuntu 12.04, nhưng điều đó cũng không hoạt động.

Tôi cũng nhận thấy rằng lệnh /sbin/ifconfighoạt động, ít hơn /sbin/route.

Điều gì đã thay đổi trong thiết lập mạng?

Làm cách nào để xác định các tuyến tĩnh trên Ubuntu 12.04?


Chỉ cần kiểm tra: RC.local có thể thực thi được không và nó bắt đầu với dòng shebang? Có lẽ đó là một vấn đề với lệnh của bạn. Bạn có thể thử chuyển hướng stderr đến một tệp ( your_command > stderr.txt 2>&1) và kiểm tra đầu ra của nó ...
Salem

Bạn nên đặt các tuyến trong / etc / mạng / giao diện, không phải trong /etc/rc.local. Và các lệnh mới bạn nên sử dụng là ip addip route. Một lệnh để cai trị mạng. :)
Anders

Chắc chắn đọcman 5 interfaces
David Tonhofer

Câu trả lời:


64

Bạn có thể đặt các tuyến tĩnh trong /etc/network/interfaces:

auto eth0
iface eth0 inet static
      address 192.168.1.2
      netmask 255.255.255.0
      up route add -net 192.168.0.0 netmask 255.255.0.0 gw 192.168.1.1
      up route add -net 172.16.0.0 netmask 255.240.0.0 gw 192.168.1.1

13
Cú pháp cho / sbin / ip:up ip route add 192.168.0.0/24 via 192.168.1.1
w00t

1
Bạn có vui lòng giải thích hai dòng cuối cùng của bạn trong câu trả lời hoặc cung cấp một liên kết đến nguồn kiến ​​thức? Cảm ơn!
itols

Bạn có thể xem -net 192,68.0.0 dưới dạng ký tự đại diện, nói rằng tất cả các gói được định sẵn cho 192.168. *. * Nên được định tuyến qua cổng mặc định 192.168.1.1. Sau đó, hạt nhân sẽ cố gắng giải quyết cổng mặc định đó nhưng nếu đã có mục ARP, thì nó sẽ gửi gói ra khỏi giao diện mà nó đã học được rằng cổng nằm trong MAC đích cho bước nhảy tiếp theo. Hi vọng nó giúp được chút ít.
Neil McGill

Ngoài ra còn có /etc/network/interfaces.d/ có thể là nơi tốt hơn để đặt tuyến đường.
Elijah Lynn

Điều này hoạt động, nhưng nó không được mô tả trong các trang man cho giao diện mạng. Đây có phải là tiêu chuẩn?
Bовић

18

Tôi thấy rất thường xuyên rằng vị trí chính xác để xác định tuyến tĩnh là trong / etc / mạng / giao diện, sẽ ổn nếu bạn định khởi động lại toàn cầu mạng với /etc/init.d/networking restart chẳng hạn. Nhưng nếu bạn định sử dụng ifdown và ifup để tắt riêng một giao diện, ifup sẽ kết thúc với lỗi:

ifup eth1

RTNETLINK answers: File exists
Failed to bring up eth1.

Bởi vì nó cố gắng xác định một tuyến đường nhưng nó đã được xác định. Giao diện sẽ vẫn hoạt động, nhưng, nếu không cập nhật / chạy / mạng / ifstate, vì vậy lần sau bạn sẽ cho chúng tôi biết nếu bạn không thể làm điều đó trừ khi bạn sử dụng cờ --force.

Để thực hiện ifup để tiếp tục định cấu hình ngay cả khi các tuyến đã được xác định, bạn có thể sử dụng định dạng này khi xác định tuyến trong / etc / network / giao diện

up ip route add 172.16.0.0/24 via 192.168.10.1 || true
up ip route add 192.168.0.0/16 via 192.168.10.1 || true

Bằng cách này, bạn sẽ có cảnh báo ở đầu ra nhưng cấu hình giao diện sẽ được hoàn thành

ifup eth1

RTNETLINK answers: File exists
RTNETLINK answers: File exists
ssh stop/waiting
ssh start/running, process 18553

1
Tại sao không chỉ đơn giản là thêm "đường xuống ip del 192.168.0.0/16 qua 192.168.10.1" vào cấu hình?
w00t

Bởi vì mọi người làm những việc như sử dụng ifconfigthủ công, thay vì chạy ifdown, sau đó muốn có thể phục hồi bằng cách sử dụng các công cụ chính xác. Do đó, sẽ rất hữu ích nếu những công cụ đó có khả năng phục hồi trạng thái bất ngờ khi chúng cố gắng sửa trạng thái. Các || truegợi ý là một tốt nhất. Thêm một dòng xuống quá hữu ích.
Phil P

5
Từ một người dùng ngẫu nhiên: Sử dụng "thay thế" thay vì "thêm" trong lệnh ip. Ví dụ: up ip route replace 172.16.0.0/24 via 192.168.10.1"thay thế" sẽ thêm tuyến nếu nó chưa tồn tại, nhưng nếu tuyến có cùng bộ chọn tồn tại, nó sẽ được thay thế bằng tuyến hiện tại, ngay cả khi chúng có cùng đích.
Xen2050

9

Bạn có thể thử điều này (thêm nó vào /etc/network/interfaces), đây là cách gần như hoàn chỉnh để thiết lập các tuyến đường:

auto eth0
iface eth0 inet static
    post-up /sbin/route add -net 192.168.0.0 netmask 255.255.0.0 gw 192.168.1.1
    post-up /bin/mount -t nfs 192.168.0.203:/motd/ /motd/

6

Có một gói ifupdown-Extra avaible trong Ubuntu.
Nó cung cấp các tập lệnh tự động (được cài đặt /etc/network/*/), một trong số đó được sử dụng để thêm các tuyến tĩnh.

Các tập tin cấu hình cho điều này là /etc/network/routes

Phần đầu của tệp cấu hình này có một mô tả hay:

Tệp cấu hình này được đọc bởi tập lệnh if-updown tĩnh và tập lệnh /etc/init.d/networking-routes để thiết lập danh sách các tuyến được liên kết với giao diện cụ thể hoặc các tuyến toàn cầu.

Một ví dụ tuyến đường tôi sử dụng là:

192.168.240.0 255.255.255.0 192.168.130.3 em3

1

những gì làm việc cho chúng tôi là

sudo route add -net 192.168.0.2/32 gw 192.168.1.1 netmask 255.255.0.0

tôi đã từng chạy trên máy Mac:

sudo route -n add -net 192.168.0.2/32 192.168.1.1

nhưng trên một ubfox, "gw" giữa các IP và phần "netmask" cuối cùng bị thiếu (cũng không bắt buộc trên ubfox)


10
điều này hoạt động hoàn hảo cho các tuyến tạm thời (không liên tục), câu hỏi là về việc có các tuyến liên tục
anneb

0

Tôi thích sử dụng nmcli.

nmcli device modify <device-name> ipv4.routes "<ip>/<mask> <gw>" ipv4.route-metric 25

Ví dụ:

nmcli device modify wlp2s0 ipv4.routes "1.1.1.0/24 192.168.0.1" ipv4.route-metric 25

Sau đó, áp dụng các thay đổi bằng cách khởi động lại dịch vụ NetworkManager:

sudo systemctl restart NetworkManager.service

0

Sử dụng nmclitôi đã có thể chạy một giải pháp bền bỉ (giải pháp @isapir không hoạt động trên thiết bị của tôi).

sudo nmcli connection modify <conection-name> +ipv4.routes "<ip>/<mask> <gw> <mt>"

Ví dụ:

sudo nmcli connection modify ssid-name +ipv4.routes "1.1.1.0/24 192.168.0.1 100"

Sau đó, có thể áp dụng các thay đổi bằng cách đặt kết nối xuống và lên lại (không cần khởi động lại Trình quản lý mạng đầy đủ):

sudo nmcli con down ssid-name ; sudo nmcli con up ssid-name

Để xem các kết nối hiện tại chạy:

sudo nmcli connection
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.