dnsmasq: การแมป 2 ที่อยู่ MAC กับที่อยู่ IP เดียวกัน


17

เป็นไปได้หรือไม่ที่จะจับคู่ที่อยู่ MAC ที่แตกต่างกัน 2 รายการกับที่อยู่ IP เดียวกัน

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

เว็บอินเตอร์เฟส openwrt ไม่ยอมรับรายการ dhcp หลายรายการที่มีที่อยู่ IP เดียวกัน แต่อาจมีวิธีแก้ปัญหาหรือไม่

ชี้แจงเพิ่มเมื่อวันที่ 23 พฤษภาคม :

ฉันควรทำให้ชัดเจนว่ามีเพียงหนึ่งอินเทอร์เฟซเครือข่ายของอุปกรณ์พกพาที่เชื่อมต่อกับเครือข่ายในเวลาที่กำหนด (ดังนั้นสวิตช์จึงไม่ควรสับสน) ตอนแรกฉันมีที่อยู่ IP ที่แตกต่างกัน 2 รายการที่กำหนดให้กับอินเทอร์เฟซด้วยชื่อ DNS เดียวกัน แต่นี่ใช้งานไม่ได้ดี (หมดเวลาเมื่อฉันได้รับ IP ผิด) แต่ฉันต้องการใช้ชื่อเดียวกันสำหรับทั้งสองเนื่องจากมันเป็นรหัสที่ยากในสคริปต์สำรองของฉัน

ขอโทษสำหรับความสับสน.


ฉันค่อนข้างมั่นใจว่า shenanigans จะตามมาหากคุณลองทำเช่นนี้
Holocryptic

ระบบปฏิบัติการบนไคลเอนต์ (และอาจเป็นเซิร์ฟเวอร์) อาจเป็นเชื้อโรคที่นี่ด้วย
Norky

คำตอบ:


29

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

ตรงกันข้ามกับคนอื่น ๆ ที่นี่ฉันอ้างว่าคำขอของคุณค่อนข้างพื้นฐานและได้รับการสนับสนุนใน dnsmasq ตั้งแต่รุ่น 2.46 , IIRC นี่เป็นเหตุผลเดียวที่ผมเปลี่ยนจาก DD-WRT หลังจากใช้งาน OpenWRT มาประมาณหนึ่งปีตอนนี้ฉันรู้แล้วว่ามีเหตุผลมากมายที่จะต้องเปลี่ยน แต่นั่นคือประเด็น

ฉันใช้Backfire 10.04-rc4 :

May 23 17:45:16 gateway dnsmasq[1925]: started, version 2.55 cachesize 150

การกำหนดค่าของฉัน:

$ cat /etc/config/dhcp

config 'dnsmasq'
    option 'domainneeded' '1'
    option 'boguspriv' '1'
    option 'localise_queries' '1'
    option 'rebind_protection' '1'
    option 'rebind_localhost' '1'
    option 'expandhosts' '1'
    option 'authoritative' '1'
    option 'readethers' '1'
    option 'leasefile' '/tmp/dhcp.leases'
    option 'resolvfile' '/tmp/resolv.conf.auto'
    option 'enable_tftp' '1'
    option 'domain' 'domain.net'
    option 'local' '/domain.net/'

config 'dhcp' 'lan'
    option 'interface' 'lan'
    option 'start' '100'
    option 'limit' '150'
    option 'leasetime' 'infinite'

config 'dhcp' 'wan'
    option 'interface' 'wan'
    option 'ignore' '1'
    option 'dynamicdhcp' '0'

config 'dhcp'
    option 'interface' 'dmz'
    option 'start' '100'
    option 'limit' '150'
    option 'leasetime' '12h'

config 'host'
    option 'name' 'travelmate'
    option 'mac' '00:11:22:33:44:55 aa:bb:cc:dd:ee:ff'
    option 'ip' '192.168.1.111'

config 'host'
    option 'name' 'mobilitymac'
    option 'mac' '99:88:77:66:55:44 ff:ee:dd:cc:bb:aa'
    option 'ip' '192.168.1.104'

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


4
จะถอนคำตอบนี้เพราะตอบคำถามของฉันอย่างละเอียด แต่ยังไม่มีกรรม
sleepyMonad

และจุดบราวนี่พิเศษเช่น luci (เว็บอินเตอร์เฟส) ดูเหมือนว่าจะสนับสนุนรูปแบบนี้จริง ๆ
sleepyMonad

1
เมื่อคืนฉันเกิดสถานการณ์ที่ฉันไม่รู้ว่า wlan0 ยังคงเชื่อมต่ออยู่ (การแสดง brcm80211 อาจจะบิตเล็กน้อย b0rked) เมื่อเชื่อมต่อ eth0 dnsmasq ไม่มีปัญหาเฉพาะกับสิ่งนี้ แต่เพิ่งกำหนด IP ใหม่สำหรับ eth0 สิ่งที่ไม่ดีคือคุณต้องเข้าสู่เราเตอร์หยุด dnsmasq และแก้ไข / kill /tmp/dhcp.leases จากนั้นเริ่มต้น dnsmasq อีกครั้งเพื่อให้สิ่งต่าง ๆ กลับสู่โหมดการทำงานที่ต้องการ
lkraav

2
เพื่อกลั่นกรองสิ่งที่ฉันคิดว่าเป็นส่วนสำคัญของสิ่งนั้นคุณสามารถรวมที่อยู่ MAC หลายรายการไว้ในรายการเดียว (ในไฟล์นี้หรือในอินเทอร์เฟซ luci) ดังนั้นแทนที่จะทำให้เส้นด้วยab:cd:ef:01:02:03และอื่น ๆ ที่มีเพียงแค่ทำให้หนึ่งรายการที่มีพื้นที่เดียวแยกสองเช่น04:05:06:07:08:09 ab:cd:ef:01:02:03 04:05:06:07:08:09
teeks99

6

ฉันทำการวิจัยเล็กน้อย

สิ่งแรกที่ฉันได้เรียนรู้คือมันเป็นไปได้ที่จะกำหนดให้เช่า DHCP ตามเกณฑ์อื่น ๆ นอกเหนือจากที่อยู่ MAC

จาก dhcp คำถามที่พบบ่อย :

รหัสลูกค้าคืออะไร

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

จากนั้นถึงแม้ว่าจะไม่ได้รับการสนับสนุนจากเว็บอินเตอร์เฟส luci บน openWRT แต่ dnsmasq เองก็สนับสนุน client_id และที่อยู่ MAC หลายแห่ง (ด้วยความระมัดระวัง)

จากหน้า dnsmasq man :

-G, --dhcp-host = [hwaddr] [, id: client_id | *] [, set: tag] [, ipaddr] [, ชื่อโฮสต์] [, lease_time] [, ไม่สนใจ] ระบุต่อพารามิเตอร์โฮสต์สำหรับเซิร์ฟเวอร์ DHCP . สิ่งนี้ช่วยให้เครื่องที่มีที่อยู่ฮาร์ดแวร์เฉพาะได้รับการจัดสรรชื่อโฮสต์ที่อยู่ IP และเวลาการเช่าที่เหมือนกันเสมอ ชื่อโฮสต์ที่ระบุเช่นนี้จะแทนที่ที่ไคลเอ็นต์ DHCP จัดหาให้ในเครื่อง นอกจากนี้ยังอนุญาตให้ ommit ที่อยู่ฮาร์ดแวร์และรวมชื่อโฮสต์ซึ่งในกรณีนี้ที่อยู่ IP และเวลาเช่าจะใช้กับเครื่องที่อ้างชื่อนั้น ตัวอย่างเช่น --dhcp-host = 00: 20: e0: 3b: 13: af, wap, infinite บอก dnsmasq เพื่อให้เครื่องพร้อมที่อยู่ฮาร์ดแวร์ 00: 20: e0: 3b: 13: af ชื่อ wap และ infinite เช่า DHCP --dhcp-host = lap, 192.168.0.199 บอก dnsmasq ให้จัดสรรเครื่องเสมอที่อยู่ IP 192.168.0.199

( ... )

ได้รับอนุญาตให้ใช้ตัวระบุลูกค้าแทนที่อยู่ฮาร์ดแวร์เพื่อระบุโฮสต์โดยนำหน้าด้วย 'id:' ดังนั้น: - dhcp-host = id: 01: 02: 03: 04, ..... หมายถึงโฮสต์ที่มีตัวระบุไคลเอ็นต์ 01: 02: 03: 04 นอกจากนี้ยังได้รับอนุญาตให้ระบุรหัสลูกค้าเป็นข้อความเช่นนี้: - dhcp-host = id: clientidastext, .....

( ... )

ในกรณีพิเศษคุณสามารถรวมที่อยู่ฮาร์ดแวร์ได้มากกว่าหนึ่งรายการ เช่น: - dhcp-host = 11: 22: 33: 44: 55: 66,12: 34: 56: 78: 90: 12,192.168.0.2 ซึ่งจะอนุญาตให้ที่อยู่ IP เชื่อมโยงกับที่อยู่ฮาร์ดแวร์หลายแห่งและให้สิทธิ์ dnsmasq เพื่อยกเลิกการเช่า DHCP ไปยังที่อยู่หนึ่งในฮาร์ดแวร์เมื่ออีกคนหนึ่งร้องขอการเช่า ระวังว่านี่เป็นสิ่งที่อันตรายที่ต้องทำมันจะทำงานได้อย่างน่าเชื่อถือหากที่อยู่ของฮาร์ดแวร์เพียงอันเดียวนั้นทำงานอยู่ตลอดเวลาและไม่มีทางที่ dnsmasq จะบังคับใช้สิ่งนี้ ตัวอย่างเช่นมีประโยชน์ในการจัดสรรที่อยู่ IP ที่เสถียรให้กับแล็ปท็อปที่มีทั้งแบบมีสายและไร้สาย

ฉันเลือกใช้วิธีการแก้ปัญหา multi-mac (เพราะฉันไม่ได้พยายามหาวิธีที่ฉันสามารถระบุรหัสลูกค้าทางฝั่งไคลเอ็นต์ซึ่งเป็นสิ่งที่ต้องทำสำหรับไคลเอนต์ที่แยกจากกันและเป็นทางเลือกหลาย Mac ทางออกหนึ่งสำหรับพอร์ตทั้งหมดในบ้าน)

ฉันหลีกเลี่ยงอินเตอร์เฟส luci และเพิ่มลงใน /etc/dnsmasq.conf โดยตรงจากบรรทัดต่อไปนี้:

DHCP-hostsfile = / etc / dnsmasq-dhcphosts.conf

และ /etc/dnsmasq-dhcphosts.conf มีบรรทัดของรูปแบบต่อไปนี้:

mac1, mac2, IP

(ฉันเก็บการตั้งค่านี้ไว้ในไฟล์แยกเพื่อป้องกันไม่ให้เขียนทับโดยการอัพเดทครั้งต่อไป)

ทำงานได้ดี


1

เป้าหมายของคุณ: การมีชื่อโฮสต์คงที่ของแล็ปท็อปจะชี้ไปที่ (ที่อยู่ IP / อินเตอร์เฟสของ) แล็ปท็อปเสมอหรือไม่ ฉันคิดว่าบริการ DNS และ DHCP ที่รวมกันของ dnsmasq จะทำเช่นนั้นเมื่อไคลเอ็นต์ทำ DHCPDISCOVER / DHCPREQUEST ลูกค้าจะรายงานชื่อโฮสต์ของมันและ dnsmasq จะเชื่อมโยงชื่อโฮสต์กับที่อยู่ IP ที่กำหนดไว้ นั่นเป็นประสบการณ์ของฉัน แต่ฉันต้องยอมรับว่าฉันไม่ได้พยายามเชื่อมต่อกับเครือข่าย i / f หนึ่งแล้วยกเลิกการเชื่อมต่อ (โดยไม่ต้องเผยแพร่อย่างชัดเจน) และเชื่อมต่อกับอีกครั้ง

สมมติว่าชื่อโฮสต์ของ "แล็ปท็อป" จะเกิดอะไรขึ้นเมื่อคุณค้นหาอุปกรณ์ OpenWRT สำหรับ "แล็ปท็อป" หลังจากเปลี่ยนจากอินเตอร์เฟซหนึ่งไปเป็นอีกอินเตอร์เฟสหนึ่ง


1

ทำไมต้องใช้ DHCP

คุณสามารถกำหนดค่าที่อยู่ IP แบบคงที่ได้ด้วยตนเองบนทั้งสองอินเทอร์เฟซจากนั้นใช้ที่คุณต้องการ


ด้วยวิธีนี้เป็นวิธีที่ง่ายที่สุดการกำหนดค่าเดียวที่เหมาะกับทุกเครือข่ายที่ฉันเชื่อมต่อ (หรืออย่างน้อยก็หวังว่าอย่างน้อย)
sleepyMonad

0

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

บอกว่าฉันเห็นด้วยแน่นอนกับ Holocryptic นี่คือมังกร


ขอบคุณที่แนะนำให้ใช้ MAC เครื่องเดียวกัน แม้ว่าฉันจะไม่แน่ใจเกี่ยวกับวิธีการทำเช่นนั้น บางทีมันอาจจะเป็นสิ่งที่ฉันสามารถกำหนดค่าจาก BIOS ...
sleepyMonad

ปกติแล้วมันจะง่ายที่สุดในการตั้งค่าในระบบปฏิบัติการบน windows ภายใต้คุณสมบัติของอินเทอร์เฟซเครือข่าย (ตั้งค่าที่อยู่ MAC ด้วยตนเอง)
happyhairydude

0

ไม่เป็นไปไม่ได้ แต่นิคส์ส่วนใหญ่อนุญาตให้คุณตั้งค่า MAC และคุณสามารถตั้งค่า NIC ทั้งสองให้เป็น MAC เดียวกันได้

ส่วนใหญ่แล้วคุณสามารถทำสิ่งนี้ได้จากนั้นตั้งค่าอินเตอร์เฟส LAGG failover ให้ทั้งสอง (ด้วยการกำหนดค่าตามความชอบสำหรับสาย) เพื่อให้คุณสามารถเสียบสายเชื่อมต่อแบบมีสายได้โดยไม่ต้องถอดเซสชัน TCP ออก

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