라우터 VPN 규칙: 출발지와 목적지를 맞춰라
라우터의 VPN 규칙에는 두 끝이 있습니다. 트래픽을 보내는 장치와 터널을 써야 하는 목적지입니다. 먼저 교집합과 대체 동작을 정하십시오.
라우터 쇼핑 페이지는 VPN 라우팅을 체크박스 하나로 표시하지만, 그 표현에는 세 가지 다른 질문이 숨어 있습니다. 규칙은 트래픽을 보내는 장치와 일치해야 합니까, 트래픽을 받는 서버와 일치해야 합니까, 아니면 둘 다입니까? 어느 쪽과도 일치하지 않는 트래픽은 어떻게 됩니까? 그리고 두 규칙이 겹칠 때 어느 쪽이 이깁니까? 답을 출발지와 목적지의 쌍으로 적으면 모호한 기능 목록이 시험 가능한 설계로 바뀝니다.
기능 이름은 두 끝을 숨긴다
터널을 써야 하는 미디어 플레이어는 출발지 일치입니다. 터널을 통해 닿아야 하는 사설 사무실 프리픽스는 목적지 일치입니다. 터널을 한 서비스에만 써야 하는 워크스테이션은 둘 다이며, 그 교집합이 대부분의 소비자용 펌웨어가 잘못 다루는 사례입니다.
제품을 비교하기 전에 요구 사항을 쌍으로 적으십시오. 나중에 시험할 대상이 바로 그 쌍입니다.
장치 목록이나 전역 목적지 목록을 제공하는 제품은 «이 장치만, 이 목적지만»을 표현하지 못할 수 있습니다. 이 차이는 겉모습이 아니라, 전역 목적지 규칙은 그 사이트로 가는 모든 장치의 트래픽을 터널로 보내고, 장치 규칙은 해당 장치의 모든 트래픽을 보냅니다. 둘 다 요구 사항이 아닙니다. 화면을 믿기 전에 두 장치로 그 사례를 시험하십시오.
규칙을 교집합으로 세우십시오
표는 설계를 정직하게 유지합니다. 시나리오를 왼쪽에 두고, 보낸 쪽 일치와 대상 일치를 따로 이름 붙이십시오:
| Scenario | Sender match | Target match | Rule shape |
|---|---|---|---|
| Media player uses the tunnel | Player address | Any internet destination except the LAN | Source only |
| Office prefix reachable | Authorized LAN devices | 10.40.0.0/16 | Target only |
| One app on one laptop | Laptop address | The service address set | Source and target |
| Guest network never tunnels | Guest subnet | Any | Deny, evaluated first |
세 번째 행이 흥미로운 이유는 두 반쪽을 동시에 필요로 하기 때문입니다. 펌웨어가 한 축만 표현할 수 있다면 요구 사항을 두 규칙으로 나누거나 그것이 가능한 장치로 옮겨야 합니다.
출발지 정체성을 안정적으로 유지하십시오. DHCP 예약, 전용 세그먼트, 장치 정체성 메커니즘은 모두 작동하지만, 임대가 끝난 뒤 바뀌는 주소는 작동하지 않습니다. IPv4 주소 하나로는 장치의 모든 트래픽을 식별하지 못하므로 IPv6를 포함하십시오.
겹침은 우선순위가 정한다
규칙이 겹치는 것은 정상입니다. 넓은 장치 규칙과 좁은 목적지 규칙이 같은 흐름을 설명할 수 있고, 문서화된 우선순위 순서가 어느 쪽이 이기는지 정합니다. 매력적인 설정 화면은 그 순서를 알려 주지 않습니다.
순서와 일치하지 않는 경우에 대해 설명서를 읽고, 관찰할 수 있는 트래픽으로 둘 다 시험하십시오:
ip rule show
ip route get 203.0.113.10
문서에 순서가 없으면 좁은 규칙이 이기지 못할 수 있다고 가정하고 그에 맞춰 설계하십시오. 충돌할 수 없는 두 규칙은 우선순위가 문서화되지 않은 하나의 영리한 규칙보다 지원하기 쉽습니다.
이름에는 갱신 정책이 필요하다
도메인으로 적은 목적지는 유지 관리 문제를 더합니다. 라우터는 이를 해석하고, 매핑을 갱신하고, 여러 주소와 하위 도메인을 처리하고, 예상한 리졸버를 우회하는 애플리케이션 DNS에도 대응해야 합니다.
조회 결과 하나를 IP 규칙에 복사하는 것은 스냅숏이지 도메인 정책이 아닙니다.
규칙이 틀리기 전에 답이 얼마나 오래되어도 되는지, 해석이 실패할 때 라우터가 무엇을 하는지 정하십시오. 마지막으로 알려진 주소를 유지하는 규칙은 서비스 이전을 견딜 수 있지만, 항목을 버리는 규칙은 조용히 터널링을 멈출 수 있습니다. 두 동작 모두 규칙 옆에 적어 두면 허용됩니다.
사용 불가 상태를 정의하십시오
경로 기본 설정은 VPN 전용 트래픽을 강제하지 않습니다. 터널이 내려가면 라우터는 흐름을 차단하거나, 직접 보내거나, 다른 터널을 쓸 수 있으며 각 선택은 다른 실패 흔적을 남깁니다.
요구 사항에 어느 쪽이 필요한지 정하고, 터널을 멈추고 흐름을 관찰해 확인하십시오:
curl -sS -o /dev/null -w "%{http_code}" --max-time 5 https://service.example/
ping -c 2 203.0.113.10
라우터 자체에서 시작되는 트래픽은 별도 범위입니다. DNS 전달, 업데이트 확인, 모니터링은 장치의 출발지 일치를 물려받는 대신 라우터 자체에서 새 흐름을 시작할 수 있습니다. 그 흐름을 명시적으로 계산하지 않으면 로그에 설명되지 않는 누출로 나타납니다.