ฉันสามารถป้องกันเส้นทางเริ่มต้นที่เพิ่มเข้ามาเมื่อเรียกใช้ส่วนต่อประสานได้หรือไม่


12

ฉันมีระบบที่มี NIC สองตัวอยู่ เครื่องนี้และอุปกรณ์ที่ใช้งานร่วมกันสองสามเครื่องจะถูกย้ายและเชื่อมต่อกับ LAN ที่แตกต่างกันหรือบางครั้งจะใช้การเรียกผ่านสายโทรศัพท์

    eth0:
    - 10.x.x.x address space
    - no internet gateway
    - only a few devices

eth1 (when used):
- 172.16.x.x or 192.168.x.x or other address spaces
- access to the gateway from LAN to internet

ppp0 (when used):
- internet access through dialup using KPPP

ฉันใช้ ifconfig เพื่อนำอินเตอร์เฟสขึ้นหรือลง (นอกเหนือจากกับ ppp0 ซึ่งจัดการโดย KPPP)

ถ้าฉันนำ eth1 ขึ้นมาก่อนมันจะได้รับที่อยู่จาก DHCP ของมันและรับเกตเวย์และที่ถูกเพิ่มเข้าไปในการกำหนดเส้นทางดังนั้นจึงไม่มีปัญหาในการเข้าถึง LAN และอินเทอร์เน็ต

ถ้าฉันนำ eth0 ขึ้นมาครั้งแรกหรือครั้งที่สองมันจะได้รับที่อยู่และตั้งค่าเกตเวย์เริ่มต้นให้อยู่ในพื้นที่ที่อยู่ (ในช่วง 10.xxx) ถ้าฉันนำค่า eth0 ขึ้นมาก่อนและ eth1 วินาทีค่าเกตเวย์เริ่มต้นจะยังคงอยู่ในช่วง 10.xxx

ดังนั้นไม่ว่าฉันจะทำอะไร eth0 จะแทนที่ eth1 และ "อ้างสิทธิ์" เกตเวย์ในการกำหนดเส้นทาง

มีวิธีใดบ้างที่จะป้องกันไม่ให้ Eth0 อ้างสิทธิ์เกตเวย์หรือตรวจสอบให้แน่ใจว่า eth1 (หากนำขึ้นอันดับ 2) ใช้เกตเวย์หรือไม่ หรือฉันสามารถจัดลำดับความสำคัญของอันดับของเกตเวย์ที่ควรใช้กับอินเตอร์เฟสอื่นได้หรือไม่?

ฉันต้องการให้แน่ใจว่าเกตเวย์พื้นที่ที่อยู่เริ่มต้นของ eth1 นั้นถูกใช้หากมีการใช้งานอยู่และหากไม่ได้ใช้เกตเวย์เริ่มต้นของ ppp0 จะถูกใช้ ฉันต้องการป้องกัน eth0 ไม่ให้มีเกตเวย์เริ่มต้น


มันแปลกที่การใช้ifconfigจะทำให้เกิดการโต้ตอบแบบ DHCP ใด ๆ โดยปกติจะทำเช่นนี้โดยการเริ่มต้นifup dhclientอินเทอร์เฟซ eth * ของคุณอาจเกิดขึ้นจากกระบวนการบูตระบบพูด/etc/init.d/networkหรือโดย NetworkManager หรือไม่
— Mark Plotnick

@MarkPlotnick: นี่เป็นหลังจากที่ฉันบูตและใช้ "ifconfig eth1 up" (หรือลงหรือ eth0 ... ) ฉันเดาว่ารูปแบบที่ง่ายที่สุดของสิ่งที่ฉันต้องการจะทำให้เกิด eth0 โดยไม่มีการเพิ่มเส้นทางอื่นนอกเหนือจากพื้นที่ที่อยู่ 10.xxx
— Tango

คำตอบ:


5

การกำหนดค่าเซิร์ฟเวอร์ DHCP ไม่ถูกต้อง จะต้องไม่ส่งตัวเลือกเกตเวย์เริ่มต้นเมื่อไม่สามารถกำหนดเส้นทางไปยังส่วนอื่น ๆ ของโลกได้ หากมันส่งตัวเลือกนั้นไคลเอนต์ใด ๆ อาจคิดว่ามันสามารถส่งแพ็กเก็ตสำหรับปลายทางออฟลิงค์ไปยังเกตเวย์เริ่มต้นที่ระบุ

ดังนั้นกล่องของคุณถูกต้องในการใช้เกตเวย์เริ่มต้นจาก eth0 ถ้ามันถูกบอกโดย DHCP ทางออกคือการลบตัวเลือกที่ไม่ดีออกจากเซิร์ฟเวอร์ DHCP ของคุณ


ตกลงนั่นทำให้รู้สึกมาก น่าเสียดายเซิร์ฟเวอร์ DHCP เป็น DLink DNS-321 ซึ่งไม่อนุญาตให้ใช้ตัวเลือกการควบคุมมากมาย ดูเหมือนว่าฉันจะต้องมีเกตเวย์ ฉันจะต้องดูว่าฉันสามารถแฮ็คมันอย่างใดและแก้ไขไฟล์ config แต่ปัญหาอีกอย่างหนึ่ง: ทำไมจึงใช้เกตเวย์จากเซิร์ฟเวอร์ 10.xxx DHCP เสมอและไม่ใช้เกตเวย์จากเซิร์ฟเวอร์อื่นเสมอไป
— Tango

1
ฉันไม่แน่ใจว่า linux เลือกระหว่างเส้นทางที่เหมือนกันได้อย่างไร มันอาจเป็นไปตามตัวชี้วัด คุณสามารถแสดงตารางเส้นทางของคุณเมื่อคุณมีเส้นทางเริ่มต้นหลายเส้นทางได้หรือไม่
— Sander Steffann

ไม่อนุญาตให้มีเส้นทางเริ่มต้นหลายเส้นทาง ความขัดข้องคือเหตุผลที่ทำให้ eth0 รับฟัง DHCP และอัพเดทเกตเวย์อยู่เสมอ ด้วย eth1 มันจะรับฟังและใช้เกตเวย์ถ้ามันเป็นอินเตอร์เฟสแรกและอินเตอร์เฟสเดียวที่อัพ หากเกตเวย์ของ eth0 ไม่ได้แทนที่ของ eth1 เสมอไปฉันก็แค่เขียนสคริปต์ดังนั้นเมื่อนำ eth0 ขึ้นมา eth1 ก็ถูกถอดออกจากนั้นก็นำขึ้นมา
— Tango

มันเกือบจะฟังดูเหมือนความแปลกประหลาดที่กำหนดค่าตายตัวในไคลเอนต์ DHCP คุณใช้อันไหน เป็นทางเลือก: มันอาจจะง่ายกว่าที่จะสลับ eth0 และ eth1;)
— Sander Steffann

อยู่ใน D-Link DNS-321 แต่ฉันได้ผ่าน / var / logs / syslog และฉันเห็นว่า DHCP สำหรับ eth1 ยังส่งในเกตเวย์ทุกครั้ง ฉันไม่สามารถเข้าใจได้ว่าทำไม eth1 จึงใช้เกตเวย์และเพิ่มไปยังเส้นทางและ eth1 ไม่ได้ ฉันจะลอง จำกัด ช่วงสำหรับ DHCP eth0 ที่จะใช้เริ่มต้นที่ 10.0.0.3 แล้วทำให้เป็น eth0 คงที่โดยใช้ 10.0.0.2 และดูว่ามันทำให้มันไม่สนใจเซิร์ฟเวอร์ DHCP ที่หยาบคายหรือไม่
— Tango

16

ฉันประสบปัญหาคล้ายกันใน Raspbian (ฉันคิดว่าโซลูชันด้านล่างจะใช้กับ Debian ได้เช่นกัน) Raspberry Pi 3 มี 2 NIC รวม: Wi-Fi และอีเธอร์เน็ต ฉันใช้ทั้งคู่นั่นคือ wlan0 และ eth0 ตามลำดับ wlan0 เชื่อมต่อกับเครือข่าย Wi-Fi ในบ้านของฉันและการเข้าถึงอินเทอร์เน็ตผ่านอินเทอร์เฟซนี้ ได้รับการตั้งค่าผ่าน DHCP จากเราเตอร์ที่บ้านของฉัน eth0 เชื่อมต่อโดยตรงกับพีซีที่ใช้ windows ของฉันและกำหนด IP แบบคงที่ ไม่มีการเข้าถึงอินเทอร์เน็ตผ่าน eth0 เพราะฉันไม่ได้กำหนดค่าบนพีซีที่ใช้ Windows

ใน Raspbian dhcpcd daemon มีหน้าที่กำหนดค่าเน็ตเวิร์กอินเตอร์เฟส ในการตั้งค่า IP แบบคงที่เป็นอินเตอร์เฟส eth0 มีการเพิ่มบรรทัดต่อไปนี้ที่ส่วนท้ายของ/etc/dhcpcd.conf:

interface eth0

static ip_address=192.168.2.2/24
static routers=192.168.2.1
static domain_name_servers=192.168.2.1

ด้วยการตั้งค่านี้ dhcpcd สร้าง 2 เส้นทางเริ่มต้นและเส้นทางผ่าน eth0 มีลำดับความสำคัญสูงกว่านั้นผ่าน wlan0:

pi@raspberrypi:~ $ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.2.1     0.0.0.0         UG    202    0        0 eth0
default         192.168.1.254   0.0.0.0         UG    303    0        0 wlan0
192.168.1.0     *               255.255.255.0   U     303    0        0 wlan0
192.168.2.0     *               255.255.255.0   U     202    0        0 eth0

ดังนั้นฉันจึงไม่สามารถเข้าถึงอินเทอร์เน็ตได้เนื่องจากระบบพยายามหาเส้นทางผ่าน eth0 และไม่มีการเชื่อมต่ออินเทอร์เน็ตดังที่ฉันได้กล่าวไว้ข้างต้น

เพื่อแก้ปัญหาฉันใช้nogatewayตัวเลือกในส่วน/etc/dhcpcd.confต่อประสานสำหรับ eth0 ดังนั้นการกำหนดค่าเฉพาะ eth0 เริ่มมีลักษณะเช่นนั้น:

interface eth0

static ip_address=192.168.2.2/24
static routers=192.168.2.1
static domain_name_servers=192.168.2.1
nogateway

หลังจากบันทึกการกำหนดค่านี้และการรีบูตไม่มีเส้นทางเริ่มต้นผ่านทาง eth0:

pi@raspberrypi:~ $ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.1.254   0.0.0.0         UG    303    0        0 wlan0
192.168.1.0     *               255.255.255.0   U     303    0        0 wlan0
192.168.2.0     *               255.255.255.0   U     202    0        0 eth0

การเข้าถึงอินเทอร์เน็ตปรากฏขึ้นและปัญหาได้รับการแก้ไข


1
นี่เป็นสถานการณ์ของฉันและนี่ก็เป็นทางออกที่แท้จริง
— PNDA

ขอบคุณnogatewayเป็นวิธีที่จะไปใน distros เดเบียนล่าสุด
— Alessandro Dionisi

คุณไม่สามารถจินตนาการได้ว่าปัญหาที่ยุ่งยากคือการเผชิญกับปัญหานี้ใน Raspbian Pi และคุณเพียงแค่ให้ทางออกที่ดีที่สุดและถูกต้องที่สุด ขอบคุณชาย
— TechNyquist

7

ใน RHEL6 / Fedora 22 ข้อมูลต่อไปนี้ได้รับการทดสอบแล้ว

ใน / etc / sysconfig / network-สคริปต์ / ifcfg-eth1 เพิ่มบรรทัด:

DEFROUTE=no

แทนที่ eth1 ด้วยชื่อของอินเตอร์เฟสที่ไม่ต้องการการกำหนดเส้นทางเริ่มต้น

สิ่งนี้สามารถทำได้ผ่าน Network Manager GUI โดยทำเครื่องหมายที่ช่อง "ใช้การเชื่อมต่อนี้สำหรับทรัพยากรในเครือข่ายของมัน" ที่ด้านล่างของแท็บ IPv4

DEFROUTE = no ป้องกันการเพิ่มเส้นทางเริ่มต้น (ปลายทาง 0.0.0.0) ไปยังตารางเส้นทางเมื่อเปิดใช้งานอินเตอร์เฟส กล่าวคือ รายการต่อไปนี้จะไม่ถูกเพิ่ม

Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         172.16.x.x      0.0.0.0         UG        0 0          0 eth1

1
โปรดอธิบายสาเหตุที่แก้ไขปัญหา และเมื่อมันได้ผล มันจะทำงานบน Distros ตาม Debian (ฉันเชื่อ) แต่ไม่ได้อยู่ใน distros ที่มีการตั้งชื่อส่วนต่าง (หรือ distro โดยใช้ systemd สำหรับเครือข่ายบริการ)
— grochmal

1
เหมือน Red Hat มากกว่าระบบที่ใช้เดเบียน
— ilkkachu

4

ตกลงดังนั้นสิ่งที่คุณต้องการคือเครื่องจะไม่เปิดเกตเวย์เริ่มต้นเมื่อเปิดใช้งาน eth0 และรับที่อยู่ผ่าน DHCP

นี่คือทางออก:

แก้ไขไฟล์:

/etc/dhcp/dhclient-up-hooks

และเติมด้วย:

#!/bin/sh
## Prevent DHCP server on eth0 from forcing a default route on us

case ${interface} in
  eth0)
     printf "executing ip route delete default via $new_routers\n" 
     ip route delete default via $new_routers
  ;;
     *)
  ;;
esac

ก่อน:

[root@centos7lab dhcp]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.4.1     0.0.0.0         UG    20     0        0 eth0
192.168.4.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0

หลังจาก ifdown eth0, ifup eth0:

[root@centos7lab dhcp]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.4.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0

การทำเช่นนี้จะลบเส้นทางที่มีเกตเวย์หลังจากสร้างเสร็จแล้วซึ่งหมายความว่าได้ลบเส้นทางอื่น ๆ ด้วยเกตเวย์เริ่มต้นแล้ว หรือฉันเข้าใจผิด?
— Tango

มันจะลบเพียงเกตเวย์ที่ไคลเอ็นต์ DHCP สร้างขึ้นเมื่อนำค่า eth0 มาใช้จะไม่ส่งผลกระทบต่อเกตเวย์อื่น ๆ ที่อยู่ในระบบ จากคำอธิบายของคุณฉันจะสมมติว่าปัญหาของคุณคือคุณได้รับสองเกตเวย์เริ่มต้นพร้อมกันในบางครั้ง (หนึ่งใน eth0 และหนึ่งใน eth1) และคุณต้องกำจัดหนึ่งสำหรับ eth0 ก่อนที่มันจะวางบนตารางเส้นทาง หากคุณโพสต์เส้นทางของคุณ - เอาท์พุท n ในช่วงเวลาของปัญหาฉันอาจเปลี่ยนสมมติฐานของฉัน
— Ricardo

1

คุณสามารถแก้ไขไฟล์ dhcpclient.conf และไม่ขอเส้นทางเริ่มต้นจากเซิร์ฟเวอร์ DHCP ระยะไกล

ตัวอย่างเล็ก ๆ ของสิ่งที่ฉันได้ทำไปแล้วและมันก็ใช้ได้กับกรณีของฉัน

ส่งชื่อโฮสต์ = "random-hostname";

ขอ subnet-mask, Broadcast-Address, Time-offset, interface-mtu, rfc3442-classless-static-route, ntp-servers;

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