macOS & Split-Tunnel VPNs

먼저, 저는 절대 네트워크 엔지니어가 아니라고 말씀드리고 싶습니다. 잘못된 가정이나 용어의 오용에 대해 사과드립니다.

요약하자면: 저는 macOS Catalina에서 L2TP VPN을 신뢰성 있게 실행하여 특정 IP/DNS 요청을 VPN을 통해 전달하면서 나머지 트래픽은 LAN을 통해 전달하게 설정할 수 있습니다.

이전에는 걱정할 필요가 없었습니다. VPN을 설정하고 시스템 환경설정에서 '모든 트래픽 보내기’를 활성화하면 그대로 작동했으며, 원격 IP 범위/원격 DNS 서버로의 요청은 LAN을 통해 전달되었고 VPN을 거치지 않았습니다.

최근에는 이것이 작동하지 않아서 모든 트래픽이 VPN을 통해 전달되거나 아예 전달되지 않는 문제가 발생했습니다. '모든 트래픽 보내기’를 활성화하지 않으면 VPN이 사실상 작동하지 않습니다.

이 문제에 대해 Cisco와 상담했으며, 그 답변은 PPP 인터페이스를 검증하는 것이었으며(활성 VPN은 항상 ppp0인 것 같습니다), 다음 명령어를 사용하여 라우팅 테이블에 경로를 추가하는 것이었습니다:

route add -net <목적지 서브넷> -netmask <서브넷> -interface ppp0

이 방법이 한 경우에는 성공했으며, VPN을 활성화하면 모든 트래픽이 예상대로 흐었습니다. 이를 검증하기 위해 두 가지 방법을 사용했습니다. 먼저, Cisco의 제안대로 netstat -r를 실행하면, LAN이 먼저인 기본 경로와 VPN 경로가 표시되었습니다. 둘째, 로컬 서버 DNS 주소와 google.com에 대해 traceroute를 실행했습니다.

그러나 다른 시도에서는 문제가 발생했습니다. 이 경우 netstat -r은 VPN 기본 경로를 LAN 기본 경로보다 상위에 표시했고, traceroute는 목적지와 상관없이 VPN을 통해 홉마다 이동하는 결과를 보여주었습니다.

저는 어리석거나, 무언가를 완전히 놓치고 있을 수 있습니다. 하지만 누군가 분할 터널 VPN을 달성하는 데 도움이 될 수 있는 통찰력을 가지고 있나요? 저는 타사 소프트웨어를 사용하고 싶지 않으며, 이전에 OS X에서 가능했던 것처럼 macOS 자체에서 이 기능을 활성화하고 싶습니다.

미리 감사드립니다.

포인트-투-포인트 프로토콜(PPP)를 사용하는 VPN에 연결하면, 맥은 /etc/ppp/ip-up에 위치한 스크립트 존재 여부를 확인합니다.

존재한다면, 실행됩니다. 또한 일부 매개변수도 전달됩니다. 여기에서 개요를 볼 수 있습니다.

예를 들어 다음과 같이 추가할 수 있습니다:

/sbin/route add 192.168.100.0/24 $5

이것은 해당 서브넷의 트래픽을 원격 IP로 보내며, 이는 /var/log/ppp.log에서 로그를 읽어보면 확인할 수 있습니다.

또한 다음과 같이 개별 호스트를 지정할 수도 있습니다:

/sbin/route add -host 192.168.1.100 $5

^ 이는 원격 근로자가 서버에 연결해야 하는 경우에 유용하며, 집에 동일한 서브넷이 있을 때입니다. 물론 사무실 네트워크가 192.168.1.0/24에 있으면 안 됩니다. 저는 MSP에서 일하기 때문에 이와 같은 경우를 자주 봅니다.

route 명령은 해당 세션에만 작동하므로 VPN을 끄면 분할 터널 설정이 사라집니다. 따라서, VPN에 연결할 때마다 이 경로를 추가하는 스크립트를 만드는 것이 필요합니다.

이와 관련된 Reddit 토론도 있으며, 다음은 fairly straightforward한 방법입니다: https://www.reddit.com/r/meraki/comments/fu9swc/mac_vpn_split_tunneling/fmc2576/
크레딧은 /u/seedari에게 돌립니다.