한 인터페이스에서 접두사를 요청한 다음 다른 모든 인터페이스에 주소를 제공하도록(또는 요청 시 더 작은 접두사 위임을 제공하도록) 어떤 종류의 Linux DHCPv6 클라이언트를 설정할 수 있습니까? 또한 라우팅 및 라우터 알림을 설정해야 합니다.
이를 수행할 수 있는 방법이 없다면 배치 위치에 상관없이 NAT용 IPv4 라우터를 프로그래밍하는 IPv6 버전은 무엇입니까? 기본적으로 저는 고객이 플러그를 꽂고 작동할 수 있도록 제조업체가 IPv6 지원 라우터를 설정하는 방법을 이해하려고 노력하고 있습니다. IPv6의 실제 NAT에 대해 말하는 것이 아니라, 수신된 접두사를 가져와 더 작은 접두사와 주소로 나누고 각각에 별도의 IP 주소를 제공하는 DHCPv6 접두사 위임 클라이언트를 라우터에 갖게 하는 방법입니다. 다운스트림 링크는 DHCPv6 서버.
차트를 추가했습니다.
한 번 구성한 다음 위치 3, 5 또는 8에 놓고 대리인의 접두사에 따라 자동으로 설정되도록 Linux에서 실행할 수 있는 소프트웨어가 있습니까?
답변1
아직 몇 가지 문제를 해결하는 중이므로 이것이 완전한 대답은 아니지만, (비록 몇 가지 다른 이유가 있지만) 거의 동일한 설정을 배포하려고 시도하면서 지금까지 얻은 내용은 다음과 같습니다.
좋은 소식은 사양 내에서 이 작업을 수행할 수 있다는 것입니다. 실제로 이러한 사양은 주로 네트워크 구조의 유연성을 허용하면서 여러 NAT 계층에 대한 고통스러운 필요성을 방지하기 위해 그러한 접두사의 하위 위임을 장려하도록 명시적으로 설계되었습니다.
나쁜 소식은 업스트림에서 접두사를 요청하고, 주소와 경로를 로컬로 구성하고, 하위 접두사를 다운스트림 네트워크에 배포할 수 있는 "즉시 사용 가능한" 단일 소프트웨어가 없다는 것입니다. 도대체, 필요한 작업을 수행하기 위해 (패칭 없이) Linux에 기존 소프트웨어를 연결하는 것조차 불가능해 보입니다. 가장 나쁜 점은 아무도 이것에 관심을 두지 않는다는 것입니다.
지금까지 제가 설정하고 작업한 내용은 다음과 같습니다.
저는 WIDE DHCPv6 클라이언트(
dhcp6c
)를 사용하여 "업스트림" 네트워크에서 접두사를 요청하고 있습니다. ISC의 DHCP 클라이언트 대신 이 클라이언트를 선택했는데, 그 이유는 이 클라이언트가 수신된 주소에 자동으로 포함된 유일한 클라이언트였기 때문입니다. 다른 인터페이스의 DHCPv6 클라이언트에 할당됩니다. 그 이후로 다른 DHCP 클라이언트가 개선되었다고 생각하지만 지금은 너무 게으른지 확인해 볼 수 없습니다.불행하게도 그것은아니요대리자의 접두사 세부 정보를 외부 후크 스크립트에 노출합니다. 이는 "다운스트림" dhcpd 구성을 (쉽게) 재정의할 수 없음을 의미합니다.
ISC DHCP 서버(v6 모드)는 "다운스트림" 네트워크에 접두사를 할당합니다. 내가 아는 한 WIDE의 DHCP 서버는 접두사를 동적으로 위임할 수 없고 정적으로만 위임할 수 있기 때문에 이것을 선택했습니다. 놀랍게도 동적 접두사 위임을 수행하도록 ISC DHCP 서버를 구성하는 것은 비교적 쉽습니다. 다음과 같은 간단한 작업을 수행할 수 있습니다.
subnet6 2001:db8:1234:ffff::/64 { prefix6 2001:db8:1234:a000:: 2001:db8:c0f:aff0:: /60; }
이는 주소가 있는 모든 인터페이스를 수신
2001:db8:1234:ffff::/64
하고 지정된 범위에서 /60을 배포합니다.dhcp6c
위 구성을 강제로 업데이트 할 수 있는 한 (다음 단계!) 위임된 수퍼 접두사가 변경되면 dhcpd 구성을 자동으로 업데이트할 수 있습니다.dhcp6c
앞서 언급했듯이script
DHCPv6 응답이 수신되면 실행하기 위해 구성 파일의 매개변수를 사용합니다. 안타깝게도 SIP 서버 및 DNS 확인자와 같은 매개변수만 노출되지만효과가있다위임된 접두사 등의 정보. 따라서 이 작업을 수행하는 다음 스크립트가 있습니다.#!/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
서브셸에서 이 모든 작업을 수행한다는 것은
sleep 3
DHCP 클라이언트를 잠시 기다릴 수 있음을 의미합니다.실제로인터페이스를 구성합니다(인터페이스를 구성하기 전에 스크립트를 실행하는 것으로 보입니다). 충분히 안정적으로 작동합니다. 내 ISP가 나에게 을 맡겼기/56
때문에 받은 접두사에서 마지막 두 개의 0만 제거합니다. 운이 좋게 전체 를 얻을 수 있다면/48
할당된 파이프라인은base_prefix
훨씬 간단합니다.
무엇아니요이미 존재하며 소스 코드를 패치해야 한다고 확신합니다. 즉, 접두사를 위임할 때 경로를 설정해야 합니다. 내가 아는 한 DHCP 서버에는 자동으로 경로를 추가하는 기능이 내장되어 있지 않습니다. (WIDE를 두 번 확인했는데 dhcp6s
확실히 할 수 없으며 ISC DHCP를 "파이핑"하여 이를 수행하는 방법에 대한 조언을 찾을 수 없습니다. ). 대리자 접두사 및 클라이언트 링크 로컬 주소를 가져오기 위해 외부 명령을 실행할 수도 없습니다(ISC DHCP에는 있지만 on commit { execute(...) }
클라이언트의 링크 로컬 주소를 전달할 수 없음).
문제는 이 중요한 기능이 없으면 위임 라우터가 이후에 접두사에 대한 트래픽을 어디로 라우팅할지 알 수 없다는 것입니다. 이것은 매우 기본적인 제한 사항이며 이전에 아무도 이 문제를 처리하지 않은 것 같다는 사실에 다소 놀랐습니다.진짜그것에 대해 침묵하십시오.
저는 평가 기능을 위한 추가 "데이터 표현"을 제공하는 ISC DHCP용 패치를 개발했습니다. 이를 통해 접두사가 할당되고 패치가 해제/만료될 때 경로를 추가/제거할 수 있습니다. ~에https://github.com/mpalmer/isc-dhcp/commit/4c8ae763bcf83c9068d57a5d9f570690a581b6d6(ISC DHCP 4.3.1의 경우) 아직 경로에 대한 스크립트를 추가하지 않았지만 contrib
작성을 마치면 해당 분기에 추가할 수 있습니다.
부록:경로를 다시 제거할 수 있도록 하려면 추가 수정이 필요하다는 것이 밝혀졌습니다. 이제 이 client-address-data-expression
모든 것을 하나로 묶는 방법을 보여주는 작은 Ruby 스크립트와 함께 브랜치에 추가되었습니다.
답변2
접두사 위임을 수행하는 프로그램은 radvd
라우터 광고 데몬입니다. 링크의 다른 IPv6 호스트는 알려진 접두사를 기반으로 전역적으로 라우팅 가능한 주소를 자동으로 구성해야 합니다.
인터넷 액세스가 필요한 호스트에는 전역적으로 라우팅 가능한 주소가 있어야 하므로 IPv6에는 NAT가 필요하지 않습니다. 인터넷으로부터의 침투를 방지하려면 방화벽 규칙에 주의해야 합니다.
ISP는 고객에게 /48 또는 /56 네트워크 블록을 제공할 것으로 예상됩니다. 이를 위해서는 각 라우터가 고유한 블록을 얻도록 하기 위해 ISP 측의 독창성이 필요합니다. /64 블록은 IPS 네트워크에 대한 업링크로 사용될 수 있습니다. 그러면 라우터는 블록의 나머지 부분에서 필요한 만큼의 /64를 자유롭게 알릴 수 있습니다. 이 경우 하나만 사용할 수 있습니다.
IPv6 DHCP 구현도 있습니다.
수행되는 빠른 설정 중 하나는 6to4 터널을 사용하도록 라우터를 구성하는 것입니다. radvd는 이 설정을 자동으로 구성하지만 공개적으로 라우팅 가능한 IPv4 주소가 필요합니다.
편집: radvd
접두사를 하위 위임할 수는 없지만 사용 가능한 라우팅 가능한 주소를 기반으로 /64 접두사를 자동으로 알릴 수 있습니다. 또한 라우터의 6to4 접두사를 자동으로 알리는 Base6to4도 있습니다. 하위 위임에는 약간의 계획이 필요하며 플러그 앤 플레이 구성에서 기대하는 것 이상입니다.
EDIT2: IPv4와 마찬가지로 IPv6은 eth0 인터페이스에 할당된 주소를 기반으로 eth1 또는 eth2에 연결된 네트워크가 어느 네트워크에 속하는지 확인할 수 있는 방법이 없습니다. 여러 네트워크 세그먼트가 있으면 각 네트워크 세그먼트에 할당된 주소 관리를 시작해야 합니다. 좋은 소식은 이 작업이 일반적으로 한 번에 완료된다는 것입니다.
IPv6을 사용하면 5와 8이 쉽게 /48을 /49에 할당하거나 /50 서브넷을 3에 쉽게 할당할 수 있으므로 더 쉽습니다. 또 다른 방법은 3, 5, 8을 동일한 /64 서브넷의 브리지로 구성하는 것입니다. 이 구성에서는 스위치 역할을 합니다. 자동 서브넷 생성 위험 라우터 5와 8은 모두 동일한 서브넷에 위임하도록 선택합니다.
가정용 플러그 앤 플레이 라우터는 기본 개인 주소 블록을 사용합니다. 다이어그램에 표시된 대로 구성하면 매우 빠르게 분해됩니다. 서로 다른 기본 주소 블록을 가진 라우터를 혼합하면 작동할 수 있습니다. 그렇지 않으면 각 라우터에 서로 다른 주소 블록이 있는지 확인해야 합니다.
답변3
RIPng와 같은 라우팅 프로토콜이 필요한 것 같습니다. 이러한 컴퓨터에 quagga를 설치하고 라우팅 프로토콜이 필요한 인터페이스를 한 번 구성하면 모든 작업이 완료됩니다.