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


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.