어떤 정책 라우팅 테이블이 IPv6 라우터 광고에서 학습된 기본 경로를 수신해야 하는지 커널에 알려주는 방법이 있습니까?
내 홈 네트워크에는 Spectrum의 기본 IPv6 서비스와 Hurricane Electric의 터널링이 있는데, 다른 이유로 여전히 필요합니다. 라우터 리디렉션을 수행하지 않으므로 정책 라우팅을 사용하여 각 소스 주소 집합에 대해 별도의 라우팅 테이블을 유지합니다.
내 정책 규칙 목록은 먼저 "기본" 라우팅 테이블을 검색합니다. 이 라우팅 테이블은 소스 주소 집합을 사용하여 도달할 수 있는 로컬 대상 접두사로 제한됩니다. 나는 dhcpcd에게 이 테이블에 기본 경로를 넣지 않도록 커널에 지시하여 일치하는 경로가 없으면 다음 규칙으로 이동하도록 지시했습니다.
다음 규칙은 HE 소스 주소에 대해서만 HE 특정 테이블을 호출합니다. 이 테이블에는 HE에 대한 기본 경로만 포함되어 있습니다.
마지막 규칙은 Spectrum 소스 주소에 대해서만 Spectrum 특정 테이블을 호출합니다. 여기에는 Spectrum에 대한 기본 경로만 포함됩니다.
이 모든 것은 정적 스크립트에서는 잘 작동하지만 내 스크립트에 주소를 직접 연결하는 것은 그리 우아해 보이지 않습니다. Spectrum이 IPv6 라우터 주소를 변경하면 어떻게 되나요?
Spectrum에 대한 기본 경로를 자동으로 유지하고 싶지만 Linux 커널에서는 두 가지 옵션만 제공합니다. Spectrum의 라우터 알림을 선택하고 이를 "기본" 테이블의 기본 경로에 넣는 것입니다.또는("accept_ra_def_rtr=0"으로 설정한 경우) 아무것도 하지 마세요. DHCP6은 DHCP4와 달리 IPv6 게이트웨이를 할당하지 않기 때문에 dhcpcd는 IPv6 게이트웨이 주소를 알려주지 않습니다. 이 기능은 라우터 광고 메시지를 수신할 때 커널에 의해 수행됩니다.
나할 수 있다커널이 "기본" 테이블에 Spectrum의 기본 경로를 설치하도록 하고 소스 주소가 Spectrum에 속하는 경우에만 해당 테이블을 호출한 다음 HE 테이블로 이동합니다. 하지만 HE 테이블의 모든 로컬 경로를 복사해야 하므로 다시 지저분해집니다.
나에게 간단하고 분명한 대답이 떠올랐다.나커널에게 알려주세요어느IPv6 라우터 알림에서 학습된 게이트웨이에 대한 기본 경로에 대한 라우팅 테이블입니다. 정책 규칙 목록의 끝에 자동으로 배치되는 "기본값"이라는 특수 테이블도 있습니다. 하지만 커널에게 이 작업을 수행하도록 지시할 방법을 찾을 수 없습니다. "메인" 테이블이거나 아무것도 아닙니다. 마찬가지로, 나는 "기본" 테이블을 dhcpcd에 의해 (부분적으로) 관리되는 로컬 항목(예: Spectrum에서 위임한 접두사)으로 제한하고 싶습니다.
다른 사람이 이 문제를 겪은 적이 있나요? 해결책이 있나요?
답변1
이것을 사용진압기존재하다ip rule
:
접두사 길이 NUMBER 억제 접두사 길이가 NUMBER 이하인 라우팅 결정을 거부합니다.
다음을 사용하여 기본 경로를 무시하면서 첫 번째(낮은 우선순위 값) 규칙에서 수정되지 않은 기본 테이블을 사용할 수 있습니다.
ip -6 rule add priority 32000 from all lookup main suppress_prefixlength 0
이 규칙은 "기본" 기본 경로인 기본 라우팅 테이블의 모든 /0 접두사를 무시합니다.
이전에 다른 일치 항목이 없는 경우(예: HE 소스에 대한 규칙이 중간 규칙에서 일치하지 않는 경우) 기본 테이블은 나중에 기본 경로(우선순위가 32766인 일반 규칙에서)를 통해 다시 사용할 수 있습니다.