DHCPv6 máy chủ ủy quyền tiền tố cho linux?


10

Tôi có thể thiết lập ứng dụng khách DHCPv6 nào để nó yêu cầu tiền tố trên một giao diện và sau đó trên tất cả các giao diện khác, nó sẽ đưa ra địa chỉ (hoặc nếu được yêu cầu, ủy nhiệm tiền tố nhỏ hơn)? Nó cũng sẽ cần phải thiết lập các tuyến đường và quảng cáo bộ định tuyến.

Nếu không có cách nào để làm điều này, phiên bản IPv6 của lập trình bộ định tuyến IPv4 để làm NAT là gì, bất cứ nơi nào nó được đặt? Về cơ bản, tôi đang cố gắng hiểu làm thế nào một nhà sản xuất sẽ thiết lập các bộ định tuyến có khả năng IPv6 của họ để khách hàng có thể cắm chúng vào và họ sẽ làm việc. Tôi không nói về NAT thực tế trong IPv6, nhưng một cách để bộ định tuyến có máy khách ủy quyền tiền tố DHCPv6 sẽ lấy tiền tố mà nó nhận được và chia nó thành các tiền tố và địa chỉ nhỏ hơn và chạy máy chủ DHCPv6 cho mỗi liên kết xuôi dòng riêng biệt.

Tôi đã thêm một sơ đồ:

Sơ đồ với 9 máy tính.  # 2, # 4, # 6, # 7 và # 9 là các máy khách DHCPv6.  # 1 được gán 2001: db8: 1200 :: / 40 và đưa ra / 48 ủy nhiệm tiền tố.  # 3, # 5 và # 8 là các máy chủ và máy khách DHCPv6 cùng lúc với yêu cầu tiền tố.

Có (một) phần mềm nào tôi có thể chạy trên Linux có thể được cấu hình một lần và sau đó đặt vào vị trí số 3, 5 hoặc 8 và nó sẽ tự động thiết lập tùy thuộc vào tiền tố được ủy quyền?

Câu trả lời:


6

Đâ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::/64và 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 dhcp6ccậ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.

  • dhcp6cnhư đã đề cập trước đây, sẽ lấy một scripttham 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_prefixsẽ đơ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ó contribvà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-expressionchi 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.


Bạn có biết Dibbler ? Có lẽ nó là một giải pháp thay thế vì nó hỗ trợ ủy quyền tiền tố trong máy khách và máy chủ của nó - và nó được đóng gói, ví dụ như đối với Fedora / EPEL. Xem thêm Phần 6.8.11 trong hướng dẫn sử dụng để biết ví dụ về cách định cấu hình ủy quyền tiền tố trong máy khách (tập lệnh hook tùy chọn, giao diện đường lên / xuống, hỏi tham số, v.v.).
maxschlepzig

Tôi nhận thức rõ về dibbler. Có khả năng thiết lập các tuyến đường trên máy chủ khi tiền tố được ủy quyền không? ISC DHCP cũng vậy, hỗ trợ ủy quyền tiền tố trong máy khách và máy chủ của nó và nó cũng được đóng gói. Đó là định tuyến là điểm gắn bó.
womble

DIbbler có scriptchỉ thị để thiết lập các hook - cơ chế đó có vẻ phù hợp để tạo các tuyến trên máy chủ khi tiền tố được ủy quyền (xem Phần 4.8).
maxschlepzig

Bạn đã thực sự làm nó? Bởi vì ISC DHCP cũng có các tập lệnh hook, và ...
womble

Chà, bạn đã phàn nàn rằng dhcp6c không tiết lộ thông tin PREFIX - ngược lại: dibbler làm điều đó. Và nó còn làm được nhiều hơn thế: Tôi đã thực hiện một số thử nghiệm với dibbler-client và với một cấu hình đơn giản (không có script), nó sẽ tự động định cấu hình tuyến đường cho tiền tố được ủy quyền trên giao diện phía dưới. Nó cũng tạo ra một radvd.confcái có thể được sử dụng để bắt đầu một radvdgiao diện xuôi dòng. Khi cấu hình một kịch bản bên ngoài kịch bản có thể thực hiện một số bước cài đặt bổ sung - biến môi trường sẵn có ví dụ PREFIX*, SRV_OPTION*(ví dụ máy chủ DNS), DOWNLINK_*...
maxschlepzig

1

Chương trình phân quyền tiền tố là radvd(Bộ định tuyến Quảng cáo Daemon). Các máy chủ IPv6 khác trên liên kết sẽ tự động định cấu hình một địa chỉ có thể định tuyến toàn cầu từ tiền tố được công bố.

IPv6 không yêu cầu NAT vì các máy chủ yêu cầu truy cập Internet dự kiến ​​sẽ có địa chỉ có thể định tuyến toàn cầu. Bạn cần cẩn thận trong các quy tắc Tường lửa của mình để ngăn chặn sự xâm nhập từ Internet.

Các ISP dự kiến ​​sẽ cung cấp một khối mạng / 48 hoặc / 56 cho khách hàng của họ. Điều này đòi hỏi một chút thông minh ở phía ISP để đảm bảo mỗi bộ định tuyến có một khối duy nhất. Một / 64 khối có thể sẽ được sử dụng làm đường lên tới mạng của IPS. Sau đó, bộ định tuyến có thể tự do thông báo số lượng / 64 giây từ phần còn lại của khối theo ý muốn. Có khả năng chỉ có một sẽ được sử dụng trong kịch bản này.

Có một triển khai DHCP DHCP.

Một thiết lập nhanh đã được thực hiện là cấu hình bộ định tuyến để sử dụng đường hầm 6to4. radvd sẽ tự động cấu hình cho thiết lập này, nhưng nó yêu cầu một địa chỉ IPv4 có thể định tuyến công khai.

EDIT: Mặc dù radvdkhông thể phân bổ các tiền tố, nó có thể tự động thông báo tiền tố / 64 dựa trên các địa chỉ có thể định tuyến có sẵn. Nó cũng có Base6to4 để tự động thông báo tiền tố 6to4 của bộ định tuyến. Subdelegation yêu cầu một số kế hoạch và vượt quá những gì cần phải có của một cấu hình plug and play.

EDIT2: Giống như IPv4 IPv6 không có phương pháp xác định mạng nào thuộc về các mạng được kết nối với eth1 hoặc eth2 dựa trên địa chỉ được gán cho giao diện eth0. Khi bạn có nhiều phân đoạn mạng, bạn cần bắt đầu quản lý các địa chỉ được gán cho từng phân đoạn. Tin tốt là điều này thường có thể được thực hiện một lần.

IPv6 giúp dễ dàng hơn vì 5 và 8 có thể dễ dàng được cung cấp / 49 hoặc / 50 mạng con của / 48 được ủy nhiệm cho 3. Cách tiếp cận thay thế sẽ là cấu hình 3, 5 và 8 làm cầu nối trên cùng / 64 mạng con. Trong cấu hình như vậy, chúng sẽ hoạt động như các công tắc. Cả hai bộ định tuyến rủi ro tạo mạng con tự động 5 và 8 đều chọn ủy quyền cùng một mạng con.

Cắm và cầu định tuyến cho sử dụng tại nhà chỉ cần sử dụng một khối địa chỉ riêng mặc định. Chúng nhanh chóng bị hỏng khi được cấu hình như thể hiện trong sơ đồ của bạn. Trộn các bộ định tuyến với các khối địa chỉ mặc định khác nhau có thể hoạt động. Nếu không, bạn cần đảm bảo mỗi bộ định tuyến có khối địa chỉ khác nhau.


Tôi khá chắc chắn rằng radvd không thể thực hiện ủy quyền Tiền tố, ít nhất là không phải bằng chính nó. Nó phải được cấu hình để có một cờ chỉ đến việc sử dụng DHCPv6 và sau đó máy chủ DHCPv6 có thể ủy nhiệm các tiền tố. Tôi đang tìm kiếm phần mềm có thể yêu cầu ủy quyền tiền tố và sau đó phân cấp phần mềm đó, bao gồm các ủy nhiệm tiền tố nhỏ hơn.
Azendale

Trả lời để chỉnh sửa: Với IPv4, người tiêu dùng có thể cắm bộ định tuyến và kết nối máy tính thông qua nó. IPv4 sử dụng NAT để làm điều này. Làm thế nào để một bộ định tuyến IPv6 làm điều này? Nó không cần một khối địa chỉ để gán cho hạ lưu của nó sao? Câu hỏi của tôi là tìm kiếm phần mềm yêu cầu một khối địa chỉ và sau đó gán nó cho hạ lưu, cho dù hạ lưu đó là máy khách hay bộ định tuyến khác có nhiều máy khách hơn đằng sau nó.
Azendale

Vì vậy, tôi đoán rằng một tình huống tôi thấy về NAT đằng sau NAT là một trường hợp may mắn. Tôi đoán đây là cơ hội để IPv6 làm tốt hơn so với IPv4. Từ việc đặt câu hỏi này tại tunbroker.net/forums/index.php?topic=2212.0 , rõ ràng những gì tôi đang hỏi có thể được thực hiện trong khi vẫn tuân theo giao thức. Vì vậy, tôi vẫn đang tìm kiếm phần mềm để làm những gì tôi muốn.
Azendale

1

Tôi phát hiện ra rằng máy chủ dibbler dhcpv6 hiển thị thông tin cần thiết vào tệp AddrMgr.xml của nó. Nó chứa địa chỉ liên kết cục bộ của bộ định tuyến yêu cầu và tiền tố được ủy quyền. Tôi sẽ thử nghiệm điều này sau.

BIÊN TẬP:

Tôi đã viết một tệp PHP nhỏ có thể tạo tất cả các tuyến chỉ bằng cách đọc tệp XML. Cách sử dụng:

  1. Cài đặt phần mềm cần thiết trên máy chủ: sudo apt install php php-xml

Important: You need to have radvd and dibbler-server configured to do this, but I think there are enough resources for radvd on the internet and dibbler-server comes with a standard configuration.

  1. Nhận tệp từ http://185.248.140.213/project/Sub/RouterHelper/routen.php.tar.gz
  2. Di chuyển tệp đến / var / www / html /
  3. Đăng nhập với tư cách người dùng root sudo suvà gõ:root@machine:~# echo "YOURLANINTERFACENAME" > /var/www/html/lanif.txt
  4. Thay đổi đặc quyền: sudo chmod 777 /var/www/html/lanif.txt
  5. Tạo một crontab cho người dùng root: sudo runuser -l root -c 'crontab -e' Nối dòng sau:

* * * * * php /var/www/html/routen.php Sau đó lưu tập tin. Làm xong! Khi bạn kết nối một bộ định tuyến khác, phải mất vài giây cho đến một phút để bảng định tuyến cập nhật, nhưng sau đó nó hoạt động!


-1

Có vẻ như bạn cần một giao thức định tuyến như RIPng. Bạn có thể cài đặt quagga trên các hộp đó, định cấu hình các giao diện cần giao thức định tuyến (một lần) và tắt đi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.