Đây không phải là một câu trả lời hoàn chỉnh, vì tôi vẫn đang giải quyết một số vấn đề, nhưng đây là những gì tôi đã có từ trước đến nay, cố gắng triển khai một thiết lập gần giống nhau (mặc dù vì một số lý do khác nhau).
Tin tốt là: nó có thể được thực hiện, trong thông số kỹ thuật. Trên thực tế, các thông số kỹ thuật được thiết kế rõ ràng để khuyến khích loại tiền tố phụ này, phần lớn là để tránh sự cần thiết của nhiều lớp NAT đau đớn trong khi vẫn cho phép linh hoạt trong cách cấu trúc mạng.
Tin xấu là: không có phần mềm "ngoài luồng" nào sẽ yêu cầu tiền tố từ thượng nguồn, định cấu hình địa chỉ và tuyến đường cục bộ và chuyển tiền tố phụ cho các mạng hạ lưu. Quỷ quái, thậm chí dường như không thể kết nối các phần mềm có sẵn trong Linux (không cần vá) để làm những gì cần phải làm. Tệ nhất là, có vẻ như không ai thực sự quan tâm đến điều này.
Những gì tôi đã thiết lập và làm việc cho đến nay trông như thế này:
Tôi đang sử dụng WID DHCPv6 client ( dhcp6c
) để yêu cầu tiền tố từ mạng "ngược dòng"; Tôi đã chọn ứng dụng khách này trên máy khách DHCP của ISC bởi vì, tại thời điểm tôi thiết lập nó, nó là máy khách DHCPv6 duy nhất tự động gán địa chỉ ra khỏi tiền tố nhận được cho các giao diện khác. Tôi muốn nghĩ rằng các máy khách DHCP khác đã được cải thiện kể từ đó, nhưng tôi không thể bận tâm kiểm tra tại thời điểm này.
Thật không may, nó không hiển thị chi tiết tiền tố được ủy quyền cho tập lệnh hook bên ngoài của nó, có nghĩa là bạn không thể (dễ dàng) viết lại cấu hình dhcpd "xuôi dòng" của mình.
Máy chủ ISC DHCP (ở chế độ v6) để gán tiền tố cho mạng "hạ lưu". Tôi đã chọn điều này bởi vì máy chủ DHCP của WIDE, theo như tôi có thể nói, chỉ có thể ủy nhiệm các tiền tố một cách tĩnh chứ không phải động. Thật dễ dàng để cấu hình máy chủ ISC DHCP để thực hiện ủy nhiệm tiền tố động; một cái gì đó đơn giản như điều này sẽ thực hiện các mẹo:
subnet6 2001:db8:1234:ffff::/64 {
prefix6 2001:db8:1234:a000:: 2001:db8:c0f:aff0:: /60;
}
Điều này sẽ lắng nghe trên bất kỳ giao diện nào có địa chỉ 2001:db8:1234:ffff::/64
và sẽ phân phát / 60 giây từ phạm vi được chỉ định. Miễn là bạn có thể ép buộc dhcp6c
cập nhật cấu hình trên (tiếp theo!), Bạn có thể tự động cập nhật cấu hình dhcpd khi siêu tiền tố được ủy quyền của bạn thay đổi.
dhcp6c
như đã đề cập trước đây, sẽ lấy một script
tham số trong tệp cấu hình của nó, để chạy khi nhận được phản hồi DHCPv6. Thật không may, nó chỉ hiển thị các tham số như máy chủ SIP và bộ phân giải DNS, không phải thông tin hữu ích như tiền tố được ủy quyền. Vì vậy, tôi đã có đoạn script sau để làm điều đó cho tôi:
#!/bin/sh
(sleep 3;
base_prefix="$(ip -6 ad sh eth0 | grep 'scope global' | cut -d ' ' -f 6 | cut -d : -f 1-4 | sed 's/00$//')"
if [ "$base_prefix" = "" ]; then
exit 0
fi
cat <<-EOF >/etc/dhcp/dhcpd6.conf
default-lease-time 1800;
max-lease-time 7200;
subnet6 ${base_prefix}00::/64 {
prefix6 ${base_prefix}a0:: ${base_prefix}f0:: /60;
}
EOF
svc -t /etc/service/dhcp6d) &
exit 0
Thực hiện tất cả công việc trong lớp vỏ phụ có nghĩa là tôi có thể đợi một chút (máy sleep 3
) để máy khách DHCP thực sự định cấu hình giao diện (nó xuất hiện để chạy tập lệnh trước khi định cấu hình giao diện). Nó hoạt động đủ đáng tin cậy. Lưu ý rằng ISP của tôi ủy quyền cho tôi a /56
, do đó tại sao tôi chỉ tước bỏ hai số không ra khỏi tiền tố nhận được. Nếu bạn đủ may mắn để có được một tổng thể /48
, đường ống để phân công base_prefix
sẽ đơn giản hơn rất nhiều.
Những gì không tồn tại và tôi khá chắc chắn yêu cầu vá mã nguồn, đang thiết lập các tuyến đường khi tiền tố được ủy quyền. Theo như tôi có thể thấy, không có máy chủ DHCP nào có khả năng tích hợp để tự động thêm tuyến đường (Tôi đã kiểm tra cẩn thận RỘNG dhcp6s
, nó chắc chắn không thể làm được và tôi không thể tìm thấy bất cứ điều gì trên các ống để đề xuất ISC DHCP làm điều đó). Thậm chí không có khả năng chạy một lệnh bên ngoài lấy tiền tố được ủy quyền và địa chỉ liên kết cục bộ của máy khách (ISC DHCP có on commit { execute(...) }
, nhưng không có cách nào để loại bỏ địa chỉ liên kết cục bộ của máy khách).
Vấn đề là nếu không có chút chức năng quan trọng này, bộ định tuyến khiến cho phái đoàn không thể biết nơi định tuyến lưu lượng truy cập cho tiền tố đến sau đó. Đó là một hạn chế khá cơ bản, và tôi khá choáng váng mà không ai dường như đã giải quyết vấn đề này trước đây - hoặc nếu họ có, họ đang giữ thực sự im lặng về nó.
Tôi vừa phát triển một bản vá cho ISC DHCP để cung cấp thêm "biểu thức dữ liệu" cho chức năng eval; điều này cho phép tôi trình bày ra một chương trình bên ngoài, sau đó có thể thêm / xóa các tuyến trên phân bổ tiền tố và giải phóng / hết hạn; Bản vá có sẵn tại https://github.com/mpalmer/isc-dhcp/commit/4c8ae763bcf83c9068d57a5d9f570690a581b6d6 (chống lại ISC DHCP 4.3.1); Tôi không có tập lệnh để thêm tuyến đường (nhưng), nhưng có lẽ tôi sẽ thêm nó contrib
vào nhánh đó sau khi tôi viết nó.
ĐỊA CHỈ: Hóa ra cần phải sửa đổi thêm để cho phép các tuyến đường được xóa lại; hiện đã được thêm vào client-address-data-expression
chi nhánh, cùng với một tập lệnh Ruby nhỏ cho thấy cách tất cả có thể được kết hợp với nhau.