문맥
저는 현재 팬도 없고 헤드도 없는 오래된 Intel Atom/ITX 컴퓨터로 인터넷 게이트웨이를 구축하느라 바쁩니다. 내 요구 사항은 다음과 같습니다.
- ISP의 DCHP에서 제공한 ipv4 및 ipv6 IP를 인터넷 연결 인터페이스에 할당
- 내 ISP의 DHCP로부터 ipv6 접두사를 받습니다.
- LAN을 향한 고정 개인 IPv4 IP가 있습니다.
- LAN 연결 인터페이스에는 IPv4 DHCP 서버가 있습니다.
<prefix>::1/64
LAN 연결 인터페이스에서 IPv6 IP 설정- DHCPv6 서버가 제공됩니다.상태 저장ISP가 제공한 접두사 내의 주소를 LAN 클라이언트에 할당합니다.
- LAN 및 WAN 인터페이스에서 연결 해제 및 재연결을 수용할 수 있어야 합니다.
- 네트워크 장치로 작동해야 함: 보안 업데이트 외에 유지 관리가 필요하지 않습니다.
상태 비저장 DHCP 또는 SLAAC 대신 상태 저장 DHCPv6을 사용하고 싶습니다. 새 게이트웨이와 반경 및 몇 가지 다른 가능성으로 관리되는 DDNS를 설정할 것이기 때문입니다. 그 중 일부는 클라이언트가 종료하는 IP를 결정하는 데 사용됩니다. 계속 따라가고 있어요.
현재 ipv4에서 모든 것이 잘 작동하고 있습니다. 정기적인. 게이트웨이 자체에는 완전한 기능을 갖춘 듀얼 스택 인터넷 연결이 있으며 ipv4 및 ipv6을 통해 리소스에 액세스할 수 있습니다. 또한 ipv4 및 ipv6용 netfilter 기반 방화벽도 구현했습니다. 고정 개인 IPv4 주소와 <prefix>::1/64
LAN 측 주소 도 할당했습니다 . DHCP를 통해 LAN에 있는 클라이언트에 ipv4 주소, DNS, 도메인, 게이트웨이 및 기타 모든 정보를 제공할 수 있습니다. ifplugd는 연결 끊김 및 재연결에 대한 복원력을 제공합니다.
질문
내가 할 수 없는 건 제공하는 거야상태 저장<prefix>::0/64
DHCP를 통해 클라이언트로 전송되는 IPv6 주소 범위입니다. 나는 dhcpd가 구성 파일에 정적 네임서버, 정적 게이트웨이 및 정적 접두사를 설정해야 한다는 현실에 갇혀 있습니다. 그러나 이들 모두는 내 ISP가 제공한 접두사를 기반으로 동적으로 할당됩니다. dhcpd.conf 맨페이지를 여러 번 살펴봤지만 이를 동적으로 할당하는 방법을 제공하는 내용은 아무것도 없습니다. dhcpcd가 임대 데이터를 바이너리 형식으로 저장하는 것은 도움이 되지 않습니다. dhcpcd에 임대 데이터를 쿼리하는 효과적인 방법을 찾았으므로 이는 더 이상 문제가 되지 않습니다.
다음 단계는 dhcpcd에서 필요한 데이터 쿼리를 관리하고 적절한 플래그를 사용하여 dhcpd를 (다시) 시작하기 위해 작성한 일부 스크립트 /systemd 장치를 작성하는 것입니다 (곧 답변으로 추가될 예정입니다). 하지만 투박하고 플러그 앤 플레이 설정에서 온갖 이상한 일을 할까봐 걱정됩니다. 나중에 문제를 해결하기 위해 게이트웨이에 SSH를 통해 연결해야 한다면... 이는 실패했다는 의미입니다.
내 질문:
여기서 분명한 것을 놓치고 있습니까? 그렇다면 내가 무엇을 놓치고 있습니까?맨 페이지와 RFC 문서를 자세히 살펴보는 데 48시간을 더 소비했다면... 놓쳤을 것입니다.- WIDE 또는 기타 올인원 DCHP 클라이언트/서버가 나의 높은 목표(반경, 서버 관리 DDNS 등)를 달성할 수 있습니까?
링크-로컬 또는 개인 IP를 다른 서브넷의 게이트웨이 IP로 사용할 수 있나요? 예를 들어...모든 클라이언트가 해당 서브넷과 해당 서브넷에 대한 IP를 갖고 있는 경우 해당 항목을예...하지만 제 문제가 완전히 해결되지는 않습니다.fd41:2a0d:e8e4:0::1
해당 서브넷에 대한 라우터 옵션으로 보낼 수 있습니까? 내 문제에서는 서버의 로컬 링크 IP를 사용하는 것이 전 세계적으로 라우팅 가능한 IP보다 낫다는 것을 읽었습니다. 하지만 게이트웨이 IP를 서브넷 외부에 설정한다는 아이디어는 잘못된 것 같습니다.26AA:A4A4:300:22AF::/64
fd41:2a0d:e8e4:0::/64
폴리스티렌누군가 묻기 전에 저는 wan 측에서 dhclient를 사용하려고 시도하기 시작했지만(dns/dhcp용 ISC 도구 사용) 동일한 인터페이스에서 ipv6 및 ipv4를 확인하고 싶지 않으며 v6 ip에 대한 쿼리를 허용하지 않습니다. 그리고 v6 접두사를 동시에 사용합니다. 아마 내 잘못일지도 모르지만... 결과적으로 포기하고 대신 dhcpcd를 사용했습니다.
구성 파일
radvd.conf:
interface lan {
AdvManagedFlag on;
AdvSendAdvert on;
#AdvAutonomous off;
AdvOtherConfigFlag on;
IgnoreIfMissing on;
AdvDefaultPreference high;
MaxRtrAdvInterval 60;
};
dhcpcd.conf:
hostname
duid
persistent
option rapid_commit
option classless_static_routes
option interface_mtu
require dhcp_server_identifier
noipv6rs
waitip 6
waitip 4
denyinterfaces lan
interface wan
ipv4
ipv6
dhcp
dhcp6
ipv6rs
ia_na 1
#ia_pd 2 lan
ia_pd 2/::/64 lan/0/64
답변1
그래서 다음 단계는 대본을 작성하는 것이라고 말했습니다. 훌륭한,그들이 온다.
설명하자면, 제가 제안한 솔루션은 두 가지 주요 부분으로 구성됩니다. dhcpd.conf 파일용 템플릿입니다. 필요한 데이터에 대해 dhcpcd를 쿼리하고, 구문 분석하고, 템플릿에 적용하고, 결과를 으로 저장한 /var/local/dhcpd6-lan.conf
다음, dhcpd를 다시 시작하여 새 설정을 사용하는 스크립트도 있습니다 .
이 스크립트는 dhcpcd의 실행 후크 기능을 활용합니다. 기본적으로 dhcpcd는 어떤 작업(업스트림으로부터 응답 수신 포함)을 수행할 때 /etc/dhcpcd.exit-hook
관련 dhcp 구성 옵션의 값으로 설정된 다양한 환경 변수로 실행됩니다. 방금 DELEGATED6
dhcpcd가 ipv6 접두사 응답에서 IP를 할당할 때 트리거하는 후크를 작성했습니다. dhcpcd-run-hooks가 후크 스크립트의 모든 stderr 및 stdout을 억제하는 것처럼 보이기 때문에 자체 로깅을 구현해야 합니다.
나는 이 해결책을 좋아하지 않는다. 나는 그것을 허용되는 솔루션으로 표시하지 않을 것입니다. 최대한 튼튼하게 만들려고 노력을 많이 했지만, 아직은 잠재적인 실패 포인트가 너무 많은 것 같은 느낌이 듭니다. 지금은 작업을 완료하는 중입니다. 나는 여전히 더 나은 방법이 있어야 한다고 생각합니다.
업데이트 - 8개월 후:
글쎄요, 제가 틀린 것 같습니다. 내가 만든 스크립트는 매우 신뢰할 수 있는 것으로 입증되었습니다. 8개월이 지났는데 전혀 문제가 없습니다. 또한 일부 잠재적인 극단적인 사례가 제거되고 다양한 구성 파일을 업데이트할 수 있는 기능과 현재 상태를 추적하기 위한 간단한 json 상태 파일을 포함하여 스크립트가 더욱 강력해졌습니다. 현 시점에서 이 솔루션이 얼마나 안정적이고 강력한지 고려하면 계속해서 이 답변을 받아들이겠습니다. envsubst
향후 유사한 도구에 대한 개선 사항을 살펴볼 수도 있습니다 .