หลายที่อยู่ MAC บนหนึ่งอินเทอร์เฟซเครือข่ายทางกายภาพ (linux)


20

คำถามง่าย ๆ : ฉันจะตั้งค่าที่อยู่ MAC หลายแห่งบนอินเทอร์เฟซเครือข่ายทางกายภาพ (linux) ได้อย่างไร

ทำไม? ISP ของฉันกำลังตรวจสอบ ip <-> mac บน GW และฉันต้องการกำหนดเส้นทางการรับส่งข้อมูลผ่าน "linuxbox" ของฉันและส่งต่อด้วย ip ต้นทางอื่น

หากไม่มีการตรวจสอบ ip <-> mac ฉันจะใช้ eth0, eth0: 0 แต่ในสถานการณ์นี้ฉันต้องการที่อยู่ MAC ที่ไม่ซ้ำกันสำหรับทุก IP

คำตอบ:


28

คุณสามารถใช้ macvlan เพื่อสร้างหลายอินเตอร์เฟสเสมือนที่มีที่อยู่ MAC ที่แตกต่างกัน

ip link add link eth0 address 00:11:11:11:11:11 eth0.1 type macvlan
ip link add link eth0 address 00:22:22:22:22:22 eth0.2 type macvlan

ในทางทฤษฎีแล้วสิ่งที่ควรจะเป็นคือสิ่งที่คุณต้องการแม้ว่าในบางจุดมีบางสิ่งที่แตกในเคอร์เนลและมันจะทำให้มันใช้ MAC หนึ่งเครื่องสำหรับทุกสิ่ง ฉันไม่แน่ใจว่าสถานะของสิ่งนั้นคืออะไร; หวังว่ามันคงที่

หากไม่เป็นเช่นนั้นคุณสามารถใช้ arptables เพื่อเขียนที่อยู่ MAC บนเอาต์พุตตามอินเตอร์เฟส egress หรืออินพุตตาม IP ปลายทาง:

arptables -A OUT -o eth0.1 --arhln 06 -j mangle --mangle-hw-s 00:11:11:11:11:11
arptables -A OUT -o eth0.2 --arhln 06 -j mangle --mangle-hw-s 00:22:22:22:22:22
arptables -A IN -d 192.168.1.1 --arhln 06 -j mangle --mangle-hw-d 00:11:11:11:11:11
arptables -A IN -d 192.168.1.2 --arhln 06 -j mangle --mangle-hw-d 00:22:22:22:22:22

โชคไม่ดีที่อาร์ทเทเบิลก็ค่อนข้างบั๊กในประสบการณ์ของฉัน


1
ขออภัยที่ necropost แต่เกี่ยวกับ "ในบางสิ่งบางอย่างที่แตกในเคอร์เนลและมันจะทำให้มันใช้หนึ่ง MAC สำหรับทุกอย่าง" ส่วนมันอาจจะไม่ใช่ข้อผิดพลาด: ฉันต้องตั้งเคอร์เนลที่ปรับได้ "net.ipv4.conf .all.arp_ignore "ถึง 1 เพื่อให้การทำงานนี้ถูกต้อง อาจต้องใช้ ARP อื่นด้วยเช่นกัน สำหรับคำอธิบายเพิ่มเติมโปรดอ่านนี้และนี้
MoonSweep

4

เหตุผลที่บริดจ์และอินเตอร์เฟส TAP ของคุณใช้ที่อยู่ MAC เดียวกันร่วมกันเป็นเพราะบริดจ์ไม่มี MAC จนกว่าจะถูกผูกไว้กับอินเตอร์เฟส หากคุณสร้างบริดจ์ด้วย BRCTL และทำ "brctl show" คุณจะพบว่าบริดจ์มีพอร์ตว่าง (ไม่มีส่วนต่อประสานกับมัน) ในการเชื่อม TAP0 ถึง br0 ตามธรรมชาติมันจะแสดงเป็น MAC เดียวกัน ฉันสร้างสะพานทดสอบเพื่อแสดง

# brctl addbr testbr0

[root @ stooge ฯลฯ ] # brctl แสดง testbr0
บริดจ์ชื่อบริดจ์ id อินเตอร์เฟส STP ที่เปิดใช้งาน
testbr0 8000.000000000000 ไม่

ฉันสร้าง TAPS การทดสอบสามชุด เอาต์พุตจาก "brctl showmacs testbr0"

[root @ stooge ฯลฯ ] # brctl showmacs testbr0
พอร์ตไม่มี mac addr อยู่ในเครื่องหรือไม่ เครื่องจับเวลา
  1 86: 51: b6: 95: 0e: b6 ใช่ 0.00
  2 86: 58: 63: c6: d4: e7 ใช่ 0.00
  3 8a: a7: fa: 17: c5: 12 ใช่ 0.00

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

[root @ stooge ฯลฯ ] # brctl showmacs testbr0
พอร์ตไม่มี mac addr อยู่ในเครื่องหรือไม่ เครื่องจับเวลา
  4 AA: BB: CC: DD: EE: FF ใช่ 0.00
  1 86: 51: b6: 95: 0e: b6 ใช่ 0.00
  2 86: 58: 63: c6: d4: e7 ใช่ 0.00
  3 8a: a7: fa: 17: c5: 12 ใช่ 0.00

ใช้ "การแสดง brctl" อีกครั้ง;

[root @ stooge ฯลฯ ] # brctl แสดง
บริดจ์ชื่อบริดจ์ id อินเตอร์เฟส STP ที่เปิดใช้งาน
testbr0 8000.00aabbccddee ไม่มี eth0
                                                        tap00
                                                        tap01
                                                        tap02 

อินเทอร์เฟซ TAP ได้ลดลงหนึ่งแม้ว่า eth0 ยังคงอยู่ที่ PORT 4 คุณยังคงมีที่อยู่ MAC ที่ไม่ซ้ำกัน หากอีเธอร์เน็ตบริดจ์เชื่อมโยงกับอินเทอร์เฟซเส้นทางต้นทางคุณไม่มีทางเลือกในการใช้ที่อยู่ IP หรือ DHCP สำหรับสิ่งที่คุ้มค่าถ้าคุณเชื่อมต่อส่วนต่อเส้นทางต้นทางคุณจะแสดงที่อยู่ MAC "ที่ไม่ใช่ในท้องถิ่น" นี่คือที่อยู่ MAC ของเราเตอร์กระโดดถัดไป ฉันรู้ใน RedHat มีตัวเลือกในการระบุ IP ต้นทางโดยใช้ IFCONFIG ตัวเลือกแรกของฉันจะปรึกษาการอ้างอิงคำสั่ง IP เนื่องจากฉันคิดว่าคุณสามารถระบุ IP ต้นทางได้ ฉันไม่เคยลองเลย


3

ลองสร้างtapอุปกรณ์หรืออุปกรณ์อีเธอร์เน็ตเสมือนอื่น ๆ ที่มีที่อยู่ MAC และ IP ที่จำเป็นจากนั้นแนบเข้ากับบริดจ์เดียวด้วย eth0


ฉันลองแล้วและมันใช้งานไม่ได้ ถ้าฉันใช้ br0 (eth0, tap0, tap1) ฉันต้องตั้งค่า IP บน br0 เพื่อให้ระบบเครือข่ายทำงานได้ ไม่มีเครือข่าย IP (ifconfig br0 0.0.0.0 ขึ้นไป) ไม่ทำงาน ดังนั้นเมื่อฉันตั้งค่า IP ใน br0 และ tap0 (จาก win-pc) ฉันสามารถ ping ทั้ง IP แต่หลังจาก arp -a แต่ละเครื่องมี MAC เดียวกัน
grapefruyt

0

ดูเหมือนว่าคุณอาจใช้vconfigเพื่อสร้างที่อยู่ vlan หลายแห่งบนอีเธอร์เน็ตจริงเดียวกันโดยแต่ละที่มีที่อยู่ Mac ต่างกัน


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