다운스트림 서브넷과 데스크톱 VPN: 앱이 아니라 트랜짓을 제외하십시오
앱별 우회는 로컬 출력만 분류합니다. 워크스테이션 뒤의 장치는 자체적인 인그레스, 포워딩, 반환 경로 정책이 필요합니다.
한 대의 머신, 두 가지 역할, 하나의 방화벽. Wi-Fi 상향 링크, 그 뒤의 작은 Ethernet 서브넷, 그리고 머신에서 나가는 모든 것을 로컬로 가정하는 데스크톱 VPN 클라이언트가 있다. 로컬에서 실행한 앱은 로컬 출력 경로로 나간다. 워크스테이션 뒤의 장치는 Ethernet 포트로 들어오며 포워딩 결정이 필요하다. 첫 번째 경로를 위해 작성한 제외는 두 번째 경로를 결코 보지 못한다. 그래서 브라우저는 터널을 우회하지만 장치는 그렇지 않다.
두 개의 패킷 경로, 하나의 정책
| Origin | Path | Decision owner |
|---|---|---|
| Application on the workstation | OUTPUT then egress | The VPN app's routing policy |
| Device behind the workstation | PREROUTING then FORWARD | The workstation's own forwarding policy |
첫 번째 행은 대부분의 split-tunneling 안내서가 설명하는 것이다. 두 번째는 우연히 같은 머신에 있는 라우터 구성이다. 둘을 하나의 사고 모델로 합치는 것이 실수다. 둘은 커널을 공유하지만 정책은 공유하지 않는다. 규칙을 편집하기 전에 두 경로를 모두 그려 보면, 나머지 설계는 어느 경로가 빠졌는지에서 나온다.
이 표는 한 머신이 한 테스트는 통과하고 다른 테스트는 실패하는 이유도 설명한다. 워크스테이션의 브라우저는 로컬 경로를 증명하고, Ethernet 포트에 연결한 노트북은 포워딩 경로를 증명한다. 변경은 두 가지로 모두 검증해야 한다. 그렇지 않으면 브라우저를 몇 번 새로 고쳐도 두 번째 경로는 검증되지 않은 채로 남는다.
앱 제외가 실제로 분류하는 것
앱별 제외는 보통 다음과 같이 동작한다. 프로세스나 사용자의 패킷에 표시를 남기고, 표시된 트래픽을 터널 밖으로 라우팅한다. 이것은 로컬 출력 구성이다. 다운스트림 장치의 패킷에는 로컬 프로세스가 없으므로 선택자가 무엇이든 결코 선택자와 일치하지 않는다.
선택자가 무엇이든 두 목록은 같은 목록이 아니며, 바로 그 점이 핵심이다. Mullvad의 Linux 안내서는 방화벽과 라우팅 정책이 소비하는 표시를 설명하고, 그 예제는 로컬 출력을 겨냥한다. 다운스트림 라우터에 대한 지원되는 설명이 아니다. 이것을 복사하면 제외가 있다고 믿으면서 모든 것을 터널로 포워딩하는 머신이 만들어진다.
트랜짓 계약을 작성하십시오
다운스트림 소스 프리픽스와 인그레스 인터페이스를 함께 지목하고, 인그레스에서 그 프리픽스를 제한한다. 제한이 없으면 포트에 닿는 어떤 장치든 제외된 주소를 주장하고 우회로 빠져나갈 수 있다. 이것을 두 질문으로 다루자. 이 호스트가 애초에 이 상향 링크를 써도 되는가, 그리고 워크스테이션이나 터널의 사설 범위에 도달해도 되는가. 이는 추가 권한이며 링크 선택의 부수 효과가 아니다.
포워딩을 허용한 다음 필터링한다. Linux 게이트웨이는 포워딩 활성화, 의도한 트래픽을 양방향으로 허용하는 규칙, 그리고 상향 반환 경로나 의도적으로 범위를 좁힌 소스 변환이 필요하다. NAT만으로는 상향 링크를 선택하지도, 필터 통과를 허가하지도 않는다. 주소 재작성은 그 결정 이후에 일어날 뿐이다.
트랜짓 분류는 포워딩 경로 결정보다 먼저 일어나야 하며, 이는 output이 아니라 prerouting 단계를 뜻한다. 결정 뒤에 놓은 규칙은 패킷을 바꿀 수는 있어도 이미 보낸 목적지를 바꿀 수는 없다.
표시는 그것을 소유한 앱의 것이다
표시 값, 테이블 번호, 체인 우선순위는 VPN 앱 정책의 일부이며 영원한 상수가 아니다. 다른 프로그램이 다시 만드는 테이블에 규칙을 삽입하는 데 의존하는 네트워크는 다음 업데이트에서 깨진다. 대개 편한 시점이 아니라 재연결 도중이다.
accept 판정이 있는 두 번째 베이스 체인을 추가해도 이후 체인의 drop을 반드시 덮어쓰지는 않는다. 베이스 체인에는 훅과 우선순위가 있고 순서상 첫 판정이 이긴다. 한 체인의 accept는 다른 체인이 먼저 도달하는 drop을 취소하지 않는다. 증가한 카운터 하나가 아니라 전체 규칙 집합과 라우팅 정책 순서를 보라. 카운터는 규칙이 실행되었음을 증명할 뿐, 그 판정이 적용되었음을 결코 증명하지 않는다.
통합하거나, 서브넷을 옮기십시오
두 설계는 우회를 누가 소유하는지에서 다르다. 통합 설계는 한 머신과 한 정책을 유지하는 대신, VPN 앱의 테이블 수명 주기와 문서가 바꿀 수 있는 표시 집합에 의존한다. 다운스트림 네트워크용 전용 라우터는 그 의존을 완전히 없앤다. 서브넷은 자체 상향 링크를 갖고, 워크스테이션은 포워딩 역할이 없는 클라이언트로 남는다.
다운스트림 네트워크가 VPN 업데이트를 거치면서도 계속 동작해야 하거나, 릴리스마다 통합 정책을 아무도 검증할 수 없을 때 두 번째를 고른다. 통합이 문서화되어 있고 누군가 책임질 때만 첫 번째를 고른다.
경계는 네 가지 상태에서 검증한다. 연결됨, 재연결 중, 의도적으로 차단됨, 정지됨이다. 각 상태에서 이름 해석과 두 주소 체계를 확인해야 한다. DNS가 새는 우회는 설계한 제외가 아니다. 테스트는 정확한 경계를 증명해야 하며, 페이지 하나가 열렸다는 것만으로는 부족하다.