จะตั้งค่าเส้นทางสแตติกในเซิร์ฟเวอร์ Ubuntu ได้อย่างไร


51

ฉันใช้ Ubuntu ตั้งแต่ Ubuntu 8.10; วันนี้ฉันทำงานกับ Ubuntu 12.04 Server

ฉันมีปัญหาในการรักษาเส้นทางคงที่ในการบูท ฉันมักจะใส่คำสั่งเส้นทาง

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

ใน/etc/rc.localหรือฉันจะสร้างไฟล์ (ชื่อroutes) ภายในไดเรกทอรี/etc/network/if-up/แต่ฉันสังเกตเห็นว่าบน Ubuntu 12.04 มันไม่ทำงาน

หากฉันพิมพ์คำสั่งในเชลล์คำสั่งเหล่านั้นจะทำงาน แต่คำสั่งเดียวกันจะไม่ทำงานเมื่ออยู่ในไฟล์ที่ระบุ

ฉันพยายามเปลี่ยนชื่อไฟล์เป็นชื่ออื่นโดยคิดว่าชื่อไฟล์ของฉัน ( routes) อาจผิดพลาดใน Ubuntu 12.04 แต่นั่นก็ไม่ได้ผล

ฉันสังเกตเห็นว่าคำสั่งนั้นใช้/sbin/ifconfigงาน/sbin/routeได้ดี

สิ่งที่เปลี่ยนแปลงไปในการตั้งค่าเครือข่าย

ฉันจะกำหนดเส้นทางแบบคงที่ใน Ubuntu 12.04 ได้อย่างไร


เพียงเพื่อตรวจสอบ: เป็น rc.local ปฏิบัติการและเริ่มต้นด้วยบรรทัด shebang หรือไม่ อาจเป็นปัญหากับคำสั่งของคุณ คุณสามารถลองเปลี่ยนเส้นทาง stderr ไปยังแฟ้ม ( your_command > stderr.txt 2>&1) และตรวจสอบการส่งออก ...
ซาเลม

คุณควรกำหนดเส้นทางใน / etc / network / interfaces ไม่ใช่ใน /etc/rc.local และคำสั่งใหม่ที่คุณควรใช้เป็นและip add ip routeคำสั่งเดียวในการควบคุมเน็ต :)
Anders

อ่านอย่างแน่นอนman 5 interfaces
David Tonhofer

คำตอบ:


64

คุณสามารถใส่เส้นทางแบบคงที่ใน/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
ไวยากรณ์สำหรับ / sbin / ip:up ip route add 192.168.0.0/24 via 192.168.1.1
w00t

1
คุณช่วยอธิบายสองบรรทัดสุดท้ายในคำตอบหรือให้ลิงก์ไปยังแหล่งความรู้ได้หรือไม่ ขอบคุณ!
itsols

คุณสามารถดู -net 192.68.0.0 เป็น wildcard โดยบอกว่าแพ็กเก็ตทั้งหมดที่กำหนดไว้สำหรับ 192.168. *. * ควรได้รับการกำหนดเส้นทางผ่านเกตเวย์เริ่มต้น 192.168.1.1 เคอร์เนลจะพยายามแก้ไขเกตเวย์เริ่มต้นนั้น แต่ถ้ามีรายการ ARP อยู่แล้วมันจะส่งแพ็กเก็ตออกไปยังส่วนต่อประสานที่ได้เรียนรู้ว่าเกตเวย์นั้นอยู่กับปลายทาง MAC สำหรับการกระโดดครั้งต่อไป หวังว่าจะช่วยหน่อย
Neil McGill

นอกจากนี้ยังมี /etc/network/interfaces.d/ ซึ่งอาจเป็นสถานที่ที่ดีกว่าในการวางเส้นทาง
Elijah Lynn

ใช้งานได้ แต่ไม่ได้อธิบายไว้ใน man pages สำหรับส่วนต่อประสานเครือข่าย เป็นมาตรฐานนี้หรือไม่
BЈовић

18

ฉันพบบ่อยมากว่าสถานที่ที่ถูกต้องในการกำหนดเส้นทางแบบสแตติกอยู่ใน / etc / network / interfaces มันก็โอเคถ้าคุณจะรีสตาร์ทเครือข่ายทั่วโลกด้วย /etc/init.d/networking รีสตาร์ทตัวอย่างเช่น แต่ถ้าคุณจะใช้ ifdown และ ifup เพื่อปิดอินเทอร์เฟซแต่ละตัว ifup จะจบลงด้วยข้อผิดพลาด:

ifup eth1

RTNETLINK answers: File exists
Failed to bring up eth1.

เพราะมันพยายามกำหนดเส้นทาง แต่มันถูกกำหนดไว้แล้ว อินเทอร์เฟซจะอัพอยู่แล้ว แต่ ifup จะไม่อัปเดต / รัน / เครือข่าย / ifstate ดังนั้นในครั้งต่อไปที่คุณจะให้เราดาวน์คุณจะไม่สามารถทำได้ถ้าคุณใช้แฟล็ก --force

หากต้องการทำให้ ifup ทำการกำหนดค่าต่อไปแม้ว่าเส้นทางจะถูกกำหนดไว้แล้วคุณสามารถใช้รูปแบบนี้เมื่อกำหนดเส้นทางใน / 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

วิธีนี้คุณจะมีคำเตือนในเอาต์พุต แต่การกำหนดค่าอินเตอร์เฟสจะเสร็จสมบูรณ์

ifup eth1

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

1
ทำไมไม่เพียงเพิ่ม "down ip route del 192.168.0.0/16 ผ่าน 192.168.10.1" ไปยัง config
w00t

เพราะคนทำสิ่งต่าง ๆ เช่นใช้ifconfigด้วยตนเองแทนที่จะทำงานifdownแล้วต้องการกู้คืนได้โดยใช้เครื่องมือที่ถูกต้อง ดังนั้นจึงเป็นประโยชน์หากเครื่องมือเหล่านั้นสามารถปรับให้เข้ากับสถานะที่ไม่คาดคิดได้ขณะที่พวกเขาพยายามแก้ไขสถานะ || trueข้อเสนอแนะเป็นหนึ่งที่ดี การเพิ่มบรรทัดลงก็มีประโยชน์เช่นกัน
Phil P

5
จากผู้ใช้แบบสุ่ม:ใช้ "แทนที่" แทน "เพิ่ม" ในคำสั่ง ip ตัวอย่าง: up ip route replace 172.16.0.0/24 via 192.168.10.1"replace" จะเพิ่มเส้นทางหากยังไม่มี แต่ถ้ามีเส้นทางที่มีตัวเลือกเดียวกันมันจะถูกแทนที่ด้วยเส้นทางปัจจุบันแม้ว่าเส้นทางนั้นจะมีปลายทางเดียวกันก็ตาม
Xen2050

9

คุณสามารถลอง (เพิ่มเข้าไป/etc/network/interfaces) นี่เป็นวิธีที่เกือบสมบูรณ์แบบสำหรับการตั้งค่าเส้นทาง:

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

มีแพ็คเกจifupdown-extra avaible ใน Ubuntu
มันมีสคริปต์อัตโนมัติ (ติดตั้งใน/etc/network/*/) ซึ่งหนึ่งในนั้นจะใช้ในการเพิ่มเส้นทางคงที่

ไฟล์การกำหนดค่าสำหรับสิ่งนี้คือ /etc/network/routes

ด้านบนของไฟล์ปรับแต่งนี้มีคำอธิบายที่ดี:

ไฟล์การกำหนดค่านี้ถูกอ่านโดยสคริปต์คงที่ if-updown และสคริปต์ /etc/init.d/networking-routes เพื่อตั้งค่ารายการเส้นทางที่เชื่อมโยงกับอินเตอร์เฟสที่กำหนดหรือเส้นทางทั่วโลก

ตัวอย่างเส้นทางที่ฉันใช้คือ:

192.168.240.0 255.255.255.0 192.168.130.3 em3

1

สิ่งที่ทำงานให้กับเราคือ

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

ฉันเคยทำงานบน Mac:

sudo route -n add -net 192.168.0.2/32 192.168.1.1

แต่ใน Ubuntu นั้น "gw" ระหว่าง IP และส่วน "netmask" สุดท้ายก็หายไป (เช่น -n ไม่จำเป็นบน Ubuntu)


10
นี้ทำงานอย่างสมบูรณ์แบบชั่วคราว (ไม่ใช่ถาวร) เส้นทางคำถามคือเกี่ยวกับการเส้นทางถาวร
anneb

0

nmcliฉันชอบที่จะใช้

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

ตัวอย่างเช่น:

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

หลังจากนั้นใช้การเปลี่ยนแปลงโดยเริ่มบริการ NetworkManager ใหม่:

sudo systemctl restart NetworkManager.service

0

การใช้nmcliฉันสามารถเรียกใช้โซลูชันถาวร (โซลูชัน @isapir ไม่ทำงานบนอุปกรณ์ของฉัน)

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

ตัวอย่างเช่น:

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

หลังจากนั้นการใช้การเปลี่ยนแปลงสามารถทำได้โดยการตั้งค่าการเชื่อมต่อขึ้นและลงอีกครั้ง (ไม่จำเป็นสำหรับ NetworkManager เต็มรูปแบบเริ่มต้นใหม่):

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

หากต้องการดูการเชื่อมต่อปัจจุบันให้ทำดังนี้

sudo nmcli connection
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.