LAN의 클라이언트는 터널을 통해 확인하고, 라우터 자체 조회는 조용히 그렇게 하지 않습니다. 패키지 업데이트, 시간 동기화, 동적 DNS는 모두 일반 업링크로 나가지만, 전달되는 모든 쿼리는 VPN을 타며, 인터페이스에는 두 개의 서로 다른 경로가 있다는 것을 암시하는 것이 없습니다. 설명은 정책의 버그가 아니라 어느 훅이 패킷을 보는가라는 문제입니다. 두 흐름, 하나의 리졸버 주소, 그리고 그중 하나만 라우터를 지납니다. 둘을 분리하는 것이 수정의 전부입니다.

두 흐름, 하나의 리졸버 주소

첫 번째 흐름은 사람들이 상상하는 흐름입니다. 클라이언트가 라우터의 리졸버에 물으면 리졸버가 업스트림으로 전달하고, 그 전달된 패킷이 나가는 길에 라우터를 통과합니다. 그 패킷은 전달 트래픽을 지켜보는 무엇이든 볼 수 있습니다.

두 번째 흐름은 어디서도 도착하지 않습니다. 라우터가 그것을 만들기 때문에 들어오는 패킷도, 일치시킬 전달 단계도 없습니다.

둘 다 같은 리졸버 주소를 겨냥할 수 있고, 그래서 차이를 놓치기 쉽습니다. 같은 목적지, 다른 출처, 다른 체인. 출처를 보면 나머지 진단이 따라옵니다.

전달된 패킷과 로컬에서 생성된 패킷은 다르게 들어옵니다

전달 트래픽은 다른 인터페이스에서 도착할 때 평가됩니다. 정책 라우팅 패키지는 그것을 prerouting 체인으로 드러내고, 거기에 놓인 규칙은 라우터를 지나는 모든 패킷을 봅니다. 그래서 클라이언트 조회는 정책이 설명한 대로 정확히 동작하고, 그래서 라우터는 그것을 무시합니다. 규칙이 틀린 것이 아니라 라우터가 결코 도달하지 않는 훅에 붙어 있을 뿐입니다. 옮기면 같은 일치가 작동하기 시작합니다.

로컬에서 생성된 트래픽은 라우터의 프로세스가 만들고 대신 출력 경로로 들어갑니다. 라우터 자체의 결정으로 라우팅되며 정책이 그 체인을 포함할 때만 정책을 만납니다. 일치시킬 인바운드 인터페이스도, 관찰할 전달 결정도 없습니다.

이것은 패킷이 어디서 태어나는지의 성질이며 특정 패키지의 성질이 아닙니다. 한 체인을 위해 쓴 규칙은 다른 체인에 대해 의견이 없습니다. 어떤 규칙 조정도 그것을 바꾸지 않습니다.

출력 체인을 선택한 다음 일치를 좁히십시오

수정은 같은 의도를 출력 체인에도 붙이는 것, 또는 라우터 자체 쿼리가 중요할 때 규칙을 그쪽으로 옮기는 것입니다. 정책 라우팅 패키지로 구성한 OpenWrt에서는 규칙의 체인 설정에서 prerouting 대신 output을 선택하는 것을 뜻합니다. 두 집단 모두 커버리지가 필요하면 두 규칙을 유지하십시오.

그다음 규칙이 무엇과 일치하는지 좁히십시오. 리졸버가 실제로 쓰는 포트의 대상 리졸버 주소는 라우터가 만드는 모든 것을 터널로 보내는 것보다 훨씬 작은 결정입니다.

두 체인을 모두 덮는 하나의 규칙을 쓰려 하지 말고 두 규칙을 명시적으로 유지하십시오. 분리된 규칙은 읽기 쉽고, 디버깅할 때 클라이언트 트래픽을 방해하지 않고 라우터의 경로를 비활성화할 수 있게 합니다. 또한 카운터를 하나씩 의미 있게 만듭니다.

터널 자체의 전송을 규칙 밖에 두십시오

터널의 외부 연결도 라우터가 만듭니다. 로컬에서 생성된 모든 트래픽을 터널로 보내는 규칙은 터널을 자기 자신을 통해 라우팅하며, 터널은 전혀 올라오지 않습니다.

관리 접근이 두 번째 희생자입니다. 라우터에서 시작된 관리 세션 또는 그에 대한 응답이 너무 넓은 로컬 규칙에 의해 터널로 끌려가 LAN에서 접근할 수 없게 될 수 있습니다.

터널 끝점을 일치에서 제외하고 규칙을 리졸버 주소로 제한하십시오. 그것으로 DNS 요구에 충분하고 생각하기에 충분히 작습니다.

하나가 아니라 두 집단을 모두 테스트하십시오

라우터가 자체 쿼리를 만드는 것을 관찰하고 어느 인터페이스가 그것을 실었는지 기록하십시오. LAN 호스트에서 조회를 반복하고 그것이 택한 경로를 기록하십시오. 정책 규칙의 카운터는 추측 없이 두 답을 모두 보이게 합니다.

결과를 두 개의 발견으로 다루십시오. 터널을 통해 확인하는 클라이언트는 라우터에 대해 아무 말도 하지 않고, 올바르게 확인하는 라우터는 다른 리스너의 클라이언트에 대해 아무 말도 하지 않습니다. 변경 기록에 별도 줄로 적으십시오.

포트도 확인하십시오: 대상 포트 53과 일치하는 규칙은 853의 DNS over TLS나 HTTPS 엔드포인트로 도달하는 리졸버를 놓칩니다. 구성된 업스트림이 실제로 쓰는 전송과 일치시키면 누출이 올바른 이유로 닫힙니다.

관련 글