ฉันกำลังพยายามกำหนดค่าเราเตอร์ / ไฟร์วอลล์ IPv6 ที่ใช้ DIY Linux เพื่อทำสิ่งต่อไปนี้:
- รับคำนำหน้า /56 จาก ISP บนอินเทอร์เฟซ "wan0"
- ระบุที่อยู่ /64 แก่โฮสต์บน "lan1"
- จัดเตรียมซับเน็ต /60 ให้กับดาวน์สตรีมเราเตอร์บน "lan2"
ตัวเลือกซอฟต์แวร์เริ่มต้นของฉันในการทำสิ่งนี้คือ systemd-networkd ซึ่งสองรายการแรกนั้นง่าย แต่รายการที่สามไม่รองรับ (เห็นได้ชัดว่าโปรดแก้ไขฉันหากฉันผิด)
ฉันเปลี่ยนเป็นการรวมกันของ dhcpcd, ไอเอสซี ดีเอชซีพี และ วิทยุ (ผ่านแพ็คเกจที่มีให้ใน Arch Linux แต่ฉันคิดว่าไม่ควรมีความแตกต่างที่มีความหมายกับซอฟต์แวร์อัพสตรีม)
dhcpcd ได้รับการกำหนดค่าเพื่อรับ /56 และกำหนดที่อยู่:
โง่
หมั่น
ผู้ขายคลาสซิด
ตัวเลือก domain_name_servers, domain_name, domain_search
ตัวเลือก classless_static_routes
ตัวเลือก interface_mtu
ตัวเลือก host_name
ตัวเลือก Rapid_commit
ต้องการ dhcp_server_identifier
สลาคส่วนตัว
noipv4ll
รอทิพย์ 6
รอทิพย์ 4
อินเทอร์เฟซ wan0
ipv6rs
ia_na 1
ia_pd 1/::/56 แลน1/0/64 แลน2/2/60
อินเตอร์เฟส lan1
noipv6rs
ip_address แบบคงที่ = 172.21.0.1
อินเตอร์เฟส lan2
ip_address แบบคงที่ = 172.22.0.1
ส่งผลให้อินเทอร์เฟซได้รับที่อยู่ตามการกำหนดค่าของ ISP และดูเหมือนว่าจะถูกต้อง
DHCP ได้รับการกำหนดค่าให้โฆษณาเพิ่มเติมที่อยู่ดาวน์สตรีมและซับเน็ต:
เวลาเช่าเริ่มต้น 2592000;
อายุการใช้งานที่ต้องการ 604800;
ตัวเลือก dhcp-เวลาต่ออายุ 3600;
ตัวเลือก dhcp-rebinding-time 7200;
อนุญาตการเช่า;
dhcpv6-lease-file-name "/var/lib/dhcp/dhcpd6.leases";
subnet6 2XXX:YYYY:ZZZZ:dd00::/64 {
range6 2XXX:YYYY:ZZZZ:dd00::2 2XXX:YYYY:ZZZZ:dd00:ffff:ffff:ffff:ffff;
}
subnet6 2XXX:YYYY:ZZZZ:dd20::/60 {
คำนำหน้า6 2XXX:YYYY:ZZZZ:dd20:: 2XXX:YYYY:ZZZZ:dd20:: /60;
range6 2XXX:YYYY:ZZZZ:dd20::2 2XXX:YYYY:ZZZZ:dd20::ffff;
}
ดูเหมือนว่าจะถูกต้องเช่นกัน เนื่องจากช่วงและซับเน็ตเหล่านั้นจะถูกใช้โดยโฮสต์ดาวน์สตรีมบน "lan1" และเราเตอร์ดาวน์สตรีมบน "lan2" ในที่สุด
ในขั้นต้น ข้อมูลข้างต้นได้รับการโฆษณาผ่านการกำหนดค่า radvd ต่อไปนี้:
อินเทอร์เฟซ lan1 {
ปิด AdvManagedFlag;
ปิด AdvOtherConfigFlag;
AdvSendAdvert on;
AdvDefaultPreference สูง;
คำนำหน้า ::/64 {
AdvOnLink บน;
Adv อัตโนมัติบน;
};
};
อินเตอร์เฟส lan2 {
ปิด AdvManagedFlag;
ปิด AdvOtherConfigFlag;
AdvSendAdvert on;
AdvDefaultPreference สูง;
เส้นทาง ::/60 {
};
};
จากนั้นฉันแทนที่บทอินเทอร์เฟซหลังด้วยวิธีที่ง่ายกว่า: อินเตอร์เฟส lan2 { };
ซึ่งฉันคิดว่าทำงานได้ดีกว่า (หรืออาจเหมือนกัน แต่ยังไงก็สั้นกว่ามาก)
ดูเหมือนว่าจะถูกต้องในแง่ที่ว่าโฮสต์และเราเตอร์จำเป็นต้องกำหนดค่าอินเทอร์เฟซจริง
อย่างไรก็ตามการกำหนดค่าทั้งหมดนี้ล้มเหลวในการทำสิ่งสำคัญอย่างหนึ่ง: เส้นทางไม่ได้รับการตั้งค่าอย่างถูกต้อง บนเราเตอร์ DIY นี้ เส้นทางมีลักษณะดังนี้:
$ ip -6 ร
:: 1 dev lo เคอร์เนลโปรโตเมตริก 256 pref สื่อ
2XXX:YYYY:ZZZZ:dd00::/64 dev lan1 proto dhcp metric 1003 pref สื่อ
2XXX:YYYY:ZZZZ:dd20::/60 dev lan2 proto dhcp metric 1004 pref สื่อ
ไม่สามารถเข้าถึงได้ 2XXX:YYYY:ZZZZ:dd00::/56 dev lo proto dhcp metric 1001 pref medium
fe80::/64 dev lan2 โปรโตเคอร์เนลเมตริก 256 pref สื่อ
fe80::/64 dev wan0 เคอร์เนลโปรโตเมตริก 256 pref สื่อ
fe80::/64 dev lan1 โปรโตเคอร์เนลเมตริก 256 pref สื่อ
ค่าเริ่มต้นผ่าน fe80::AAAA:BBBB:CCCC:DDDD dev wan0 proto ra metric 1002 mtu 1500 pref medium
ถ้าฉันเพิ่มด้วยตนเอง (ด้วยเมตริกที่เล็กกว่า) หรือแทนที่เส้นทางที่เกี่ยวข้องกับเครือข่ายย่อย /60 เช่น: ip -6 r แทนที่ 2XXX:YYYY:ZZZZ:dd20::/60 ผ่าน fe80::DOWN:STRE:AMRO:UTER dev lan2
และในทางกลับกันบนเราเตอร์แบบดาวน์สตรีมด้วยที่อยู่ท้องถิ่นของลิงก์ของเราเตอร์ DIY สิ่งต่างๆ จะเริ่มทำงาน
คำถามของฉัน:
- ฉันจะกำหนดค่าเราเตอร์ DIY ให้ทำขั้นตอนสุดท้ายโดยอัตโนมัติได้อย่างไร (ผมลองจิ้มค่าต่างๆที่
ยอมรับ_ra
, ยอมรับ_ra_defrtr
และ router_solicitations
ใน sysctl ของ net.ipv6.conf
ภายใต้ ทั้งหมด
และส่วนต่อประสานแต่ละส่วน แต่ไม่เห็นความแตกต่างในลักษณะการทำงาน)
- ฉันสามารถใช้ซอฟต์แวร์อื่น (โอเพ่นซอร์ส) บน Linux เพื่อบรรลุสิ่งที่ฉันต้องการในรูปแบบที่มีความคล่องตัวมากขึ้นได้หรือไม่? ฉันหมายความว่าเมื่อ ISP ของฉันจัดสรรคำนำหน้า /56 อื่นให้ฉัน ฉันจะต้องเปลี่ยนไฟล์การกำหนดค่า DHCP เพื่อใช้สิ่งนั้นแทน ฉันสามารถ (และจะ) สร้างสคริปต์เพื่อแก้ไขปัญหานี้ หากไม่มีซอฟต์แวร์เพื่อรองรับกรณีการใช้งานของฉัน แต่การทำเช่นนั้นดูเหมือนจะค่อนข้างเปราะบาง