Nebula 라이트하우스 필터와 방화벽: 각각 무엇을 차단하는가
라이트하우스의 허용 목록은 피어가 알리거나 시도하는 언더레이 엔드포인트를 고릅니다. 방화벽 규칙은 핸드셰이크 후 오버레이 내부 트래픽을 통제합니다.
Nebula 핸드셰이크를 반대쪽에서 보면 두 메커니즘은 서로 바꿔 쓸 수 있어 보입니다. 하나는 노드가 라이트하우스에 알리는 주소와 시도할 원격 주소를 정하고, 다른 하나는 터널이 생긴 뒤 무엇이 통과할 수 있는지를 정합니다. 필터는 어떤 방화벽 규칙이 평가되기 전에 연결을 막을 수 있지만, 방화벽 규칙은 검색이 제거한 엔드포인트를 되살릴 수 없습니다. 두 계층은 서로 다른 질문에 답하며, 작동하는 순서가 핵심입니다.
하나의 연결을 네 단계로 따라갑니다: 알려진 로컬 주소, 검토되는 원격 엔드포인트, 핸드셰이크, 그리고 오버레이 트래픽입니다. 각 단계에는 고유한 설정과 고유한 실패 흔적이 있습니다.
노드가 알리는 로컬 주소에서 시작합니다
local_allow_list 는 이 호스트의 로컬 주소를 라이트하우스에 보고하기 전에 걸러 냅니다. 항목은 주소 범위일 수 있고, 설정은 인터페이스 이름 패턴도 지원합니다. 호스트에 컨테이너 브리지나 피어 엔드포인트가 되어서는 안 되는 추가 터널 인터페이스가 있을 때 유용합니다.
호스트의 인터페이스를 살펴보고 원격 피어가 실제로 도달할 수 있는 것이 무엇인지 물어봅니다. Docker 브리지 주소는 그 호스트에만 국한되며 다른 네트워크의 피어에게는 쓸모가 없습니다. 그것을 알리면 검색을 낭비하고 피어를 결코 응답하지 않는 주소로 보낼 수 있습니다. 피어가 라우팅할 수 없는 것은 모두 라이트하우스 응답에서 잡음입니다.
여기서는 좁은 허용 목록이 넓은 차단 목록보다 안전합니다. 허용 항목만 있으면 지정되지 않은 나머지는 제외되며, 나중에 차단 항목을 추가하면 기본 논리가 바뀌므로 별도의 검토가 필요합니다. 그 변경은 기본값을 다시 볼 가치가 있습니다.
다음으로 원격 엔드포인트 선택을 봅니다
remote_allow_list 는 핸드셰이크 동안 이 호스트가 원격 피어에 대해 검토할 주소를 걸러 냅니다. 적용되는 것은 언더레이 주소이며, 터널이 올라간 뒤 피어가 사용할 오버레이 주소가 아닙니다.
사설 범위는 공유 사무실 네트워크에서 충분히 쓸모가 있지만, 두 호스트가 모두 10.0.0.0/8 을 쓰는 무관한 네트워크에 있으면 의미가 없습니다. 필터를 사용하면 라우팅 가능한 경로를 선호하고 우연을 무시할 수 있습니다.
피어가 연결하지 못하면 시도 중인 주소를 그에 맞는 규칙과 비교합니다. 핸드셰이크 로그를 켜고 선택된 원격 주소를 읽습니다; 로그 줄은 필터링을 통과한 엔드포인트를 알려 주며, 이는 피어가 가진 주소 목록보다 유용합니다.
알리는 쪽의 인터페이스 이름 필터는 받는 쪽이 보기도 전에 엔드포인트를 제거할 수 있습니다. 한 방향만 실패할 때는 두 노드를 모두 확인합니다.
핸드셰이크 뒤에는 오버레이 접근 규칙이 적용됩니다
Nebula 방화벽 규칙은 터널이 수립된 뒤 오버레이 내부에서 작동합니다. 호스트, 그룹, 포트, 프로토콜을 일치시키고 패킷이 로컬 호스트로 들어오거나 나갈 수 있는지 결정합니다. 언더레이 엔드포인트를 선택하지는 않습니다.
이 분리는 흔한 오진을 설명합니다. 운영자가 포트에 대한 방화벽 규칙을 추가해도 여전히 연결하지 못하는 것은 라이트하우스 필터가 유일하게 도달 가능한 엔드포인트를 제거했기 때문입니다. 다른 운영자가 주소 필터를 열어도 서비스에 닿지 못하는 것은 오버레이 방화벽이 포트를 거부하기 때문입니다.
실패는 올바른 계층에서 읽습니다. 결코 완료되지 않는 핸드셰이크는 검색, 엔드포인트 필터링 또는 네트워크 경로를 가리킵니다. 완료된 핸드셰이크 뒤에 서비스 연결이 거부되거나 버려지면 오버레이 방화벽이나 애플리케이션을 가리킵니다.
허용과 차단을 섞을 때 기본값을 읽습니다
라이트하우스 설정은 허용 전용, 차단 전용, 혼합 목록을 지원하며, 지정되지 않은 나머지에 대한 기본값은 그 형태에 따라 다릅니다. 혼합 목록에는 주소 패밀리에 대한 명시적 기본값이 필요하며, 나머지가 이전 설정처럼 동작한다고 가정하는 것이 작동하던 엔드포인트가 조용히 사라지는 길입니다.
lighthouse:
local_allow_list:
interfaces:
docker0: false
remote_allow_list:
192.168.0.0/16: true
default: false
기본값을 규칙의 일부로 다루고 템플릿 문구로 다루지 않습니다. 패밀리의 기본값이 차단이면 목록에 없는 모든 주소가 제외되며, 설정을 작성한 뒤 추가된 새 사무실 범위도 포함됩니다.
어떤 주소가 도달 가능해야 했는지 기록하고 양쪽에서 시험합니다. 한 피어 쌍에서 작동하는 필터가, 유일한 공통 경로가 목록에서 제외한 주소를 쓰는 다른 쌍에서는 실패할 수 있습니다.
직접 엔드포인트에 도달할 수 없을 때는 릴레이를 사용합니다
후보 엔드포인트가 모두 걸러지거나 도달할 수 없다면, 답은 신뢰하지 않는 주소를 다시 받아들이는 더 넓은 허용 목록이 아닙니다. 직접 연결이 현실적이지 않을 때 Nebula 의 릴레이 설정이 대체 피어 경로를 제공합니다.
릴레이는 전송과 검색을 해결하며 권한 부여가 아니고, 방화벽을 넓히지 않습니다. 오버레이 방화벽은 어떤 서비스를 쓸 수 있는지 여전히 결정하며, 릴레이는 라이트하우스 필터링을 접근 제어 메커니즘으로 바꾸지 않습니다.
직접 엔드포인트를 끈 상태에서 릴레이 경로를 시험하고, 의도한 서비스는 계속 작동하고 의도하지 않은 서비스는 작동하지 않음을 확인합니다. 그 한 번의 시험이 전송 수정과 정책 변경을 구분하고 두 계층을 정직하게 유지합니다.