Bagaimana cara mengatur rute statis di Server Ubuntu?

51

Saya telah menggunakan Ubuntu sejak Ubuntu 8.10; hari ini saya bekerja dengan Ubuntu 12.04 Server.

Saya mengalami kesulitan menjaga rute statis saat boot. Saya biasanya akan menempatkan perintah rute

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

di /etc/rc.localatau saya akan membuat file (bernama routes) di dalam direktori /etc/network/if-up/, tetapi saya perhatikan bahwa pada Ubuntu 12.04 tidak berfungsi.

Jika saya mengetikkan perintah di shell, mereka bekerja, tetapi perintah yang sama tidak berfungsi ketika mereka berada di file yang ditentukan.

Saya sudah mencoba mengubah nama file menjadi nama lain berpikir bahwa nama file saya ( routes) bisa salah di Ubuntu 12.04, tetapi itu juga tidak berhasil.

Saya perhatikan juga bahwa perintah itu /sbin/ifconfigberfungsi, kurang /sbin/route.

Apa yang berubah dalam pengaturan jaringan?

Bagaimana saya bisa mendefinisikan rute statis di Ubuntu 12.04?

Frank Allan
sumber
Hanya untuk memeriksa: apakah rc.local dapat dieksekusi dan dimulai dengan baris shebang? Mungkin itu masalah dengan perintah Anda. Anda dapat mencoba mengarahkan stderr ke file ( your_command > stderr.txt 2>&1) dan memeriksa hasilnya ...
Salem
Anda harus mengatur rute di / etc / network / interfaces, bukan di /etc/rc.local. Dan perintah baru yang harus Anda gunakan adalah ip adddan ip route. Satu perintah untuk mengatur jaring. :)
Anders
Pasti dibacaman 5 interfaces
David Tonhofer

Jawaban:

64

Anda dapat memasukkan rute statis di /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
Eric Carvalho
sumber
13
Sintaks untuk / sbin / ip:up ip route add 192.168.0.0/24 via 192.168.1.1
w00t
1
Bisakah Anda jelaskan dua baris terakhir Anda dalam jawaban atau berikan tautan ke sumber pengetahuan? Terima kasih!
itsol
Anda dapat melihat -net 192.68.0.0 sebagai wildcard, dengan mengatakan semua paket yang ditujukan untuk 192.168. *. * Harus dirutekan melalui gateway default 192.168.1.1. Kernel kemudian akan mencoba untuk menyelesaikan gateway default itu tetapi jika sudah memiliki entri ARP, maka ia akan mengirim paket keluar antarmuka yang telah dipelajari bahwa gateway berada dengan MAC tujuan untuk hop berikutnya. Semoga itu bisa membantu sedikit.
Neil McGill
Ada juga /etc/network/interfaces.d/ yang mungkin merupakan tempat yang lebih baik untuk menempatkan rute.
Elijah Lynn
Ini berfungsi, tetapi tidak dijelaskan dalam halaman manual untuk antarmuka jaringan. Apakah ini standar?
BЈовић
18

Saya sangat sering menemukan bahwa tempat yang tepat untuk mendefinisikan rute statis ada di / etc / network / interfaces, boleh saja jika Anda akan me-restart jaringan secara global dengan /etc/init.d/networking restart misalnya. Tetapi jika Anda akan menggunakan ifdown dan ifup untuk mematikan antarmuka secara individual, ifup akan berakhir dengan kesalahan:

ifup eth1

RTNETLINK answers: File exists
Failed to bring up eth1.

Karena itu mencoba untuk menentukan rute tetapi sudah ditentukan. Antarmuka akan tetap naik tetapi, ifup tidak akan memperbarui / menjalankan / jaringan / ifstate jadi lain kali Anda akan memberitahu kami jika Anda tidak akan dapat melakukannya kecuali jika Anda menggunakan flag --force.

Untuk membuat ifup untuk melanjutkan mengkonfigurasi bahkan jika rute sudah ditentukan, Anda dapat menggunakan format ini ketika mendefinisikan rute di / etc / network / interfaces

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

Dengan cara ini Anda akan memiliki peringatan di output tetapi konfigurasi antarmuka akan selesai

ifup eth1

RTNETLINK answers: File exists
RTNETLINK answers: File exists
ssh stop/waiting
ssh start/running, process 18553
mseisdedos
sumber
1
Mengapa tidak cukup menambahkan "down ip route del 192.168.0.0/16 via 192.168.10.1" ke konfigurasi?
w00t
Karena orang melakukan hal-hal seperti menggunakan ifconfigsecara manual, daripada menjalankan ifdown, maka ingin dapat memulihkan dengan menggunakan alat yang benar. Dengan demikian akan sangat membantu jika alat-alat itu tahan terhadap keadaan yang tidak terduga saat mereka mencoba untuk memperbaiki keadaan. The || truesaran adalah satu yang baik. Menambahkan garis bawah juga sangat membantu.
Phil P
5
Dari pengguna acak: Gunakan "ganti" dan bukan "tambahkan" dalam perintah ip. Mis: up ip route replace 172.16.0.0/24 via 192.168.10.1"ganti" akan menambahkan rute jika belum ada, tetapi jika rute dengan pemilih yang sama ada, itu akan diganti dengan yang sekarang, bahkan jika mereka memiliki tujuan yang sama.
Xen2050
9

Anda dapat mencoba ini (tambahkan ke /etc/network/interfaces), ini adalah cara yang hampir lengkap untuk mengatur rute:

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/
mmehboobhan
sumber
6

Ada paket ifupdown-extra avaible di Ubuntu.
Ini menyediakan skrip otomatis (diinstal dalam /etc/network/*/), salah satunya digunakan untuk menambahkan rute statis.

File konfigurasi untuk ini adalah /etc/network/routes

Bagian atas file konfigurasi ini memiliki deskripsi yang baik:

File konfigurasi ini dibaca oleh skrip static-route if-updown dan skrip /etc/init.d/networking-routes untuk menyiapkan daftar rute yang terkait baik dengan antarmuka yang diberikan atau rute global.

Contoh rute yang saya gunakan adalah:

192.168.240.0 255.255.255.0 192.168.130.3 em3
NGRode
sumber
1

apa yang berhasil bagi kami adalah

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

saya biasa berjalan di Mac:

sudo route -n add -net 192.168.0.2/32 192.168.1.1

tetapi pada ubuntu "gw" antara IPs dan bagian "netmask" terakhir tidak ada (juga -n tidak diperlukan di ubuntu)

Peter Perháč
sumber
10
ini berfungsi dengan baik untuk rute sementara (non-persisten), pertanyaannya adalah tentang mendapatkan rute persisten
ann
0

Saya lebih suka menggunakan nmcli.

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

Sebagai contoh:

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

Setelah itu terapkan perubahan dengan memulai kembali layanan NetworkManager:

sudo systemctl restart NetworkManager.service
isapir
sumber
0

Menggunakan nmclisaya dapat menjalankan solusi persisten (solusi @isapir tidak berfungsi pada perangkat saya).

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

Sebagai contoh:

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

Setelah itu menerapkan perubahan dimungkinkan dengan mengatur koneksi turun dan naik lagi (tidak perlu NetworkManager restart penuh):

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

Untuk melihat koneksi saat ini berjalan:

sudo nmcli connection
ofirule
sumber