macOS Clash 클라이언트 권한 설정: 네트워크 확장 승인 및 키체인 암호 팝업 해결

ChatGPT 접속이 불안정하거나 GitHub·npm 다운로드가 자주 멈추나요? Mihomo rule-providers로 관리하기 쉬운 YAML 규칙을 만들고, 규칙 우선순위와 프록시 그룹 연결, 원격 목록 갱신 방법을 살펴봅니다. 실제 규칙 매칭 확인과 DNS·잘못된 라우팅 문제…

rule-providers로 도메인 목록을 규칙에서 분리하세요

Mihomo의 rule-providers는 여러 도메인 규칙을 별도 파일에서 관리하고, 설정의 rules에서 이름으로 불러오는 기능입니다. ChatGPT와 Claude용 도메인, GitHub와 npm용 도메인을 각각 나누면 목록을 수정하거나 갱신하기 쉽고, 어떤 트래픽을 어느 정책 그룹으로 보낼지도 명확해집니다. 다만 rule-provider는 프록시 노드나 정책 그룹을 만드는 기능이 아닙니다. 실제 연결을 위해서는 대상 그룹이 먼저 정의되어 있어야 합니다.

아래 예시는 원격 YAML 목록을 하루에 한 번 확인하는 구성입니다. 주소는 실제로 내려받을 수 있는 규칙 파일의 URL로 바꾸세요. GitHub 저장소 페이지 주소가 아니라 파일 내용만 반환하는 원시 파일 주소를 사용해야 합니다. 파일이 공개되어 있지 않거나 인증이 필요한 경우, 인증 토큰을 설정이나 공개 로그에 그대로 넣지 말고 안전한 배포 방법을 검토하세요.

rule-providers:
  ai-sites:
    type: http
    behavior: domain
    format: yaml
    path: ./rules/ai-sites.yaml
    url: "https://rules.example.net/mihomo/ai-sites.yaml"
    interval: 86400

  github-sites:
    type: http
    behavior: domain
    format: yaml
    path: ./rules/github-sites.yaml
    url: "https://rules.example.net/mihomo/github-sites.yaml"
    interval: 86400

  npm-sites:
    type: http
    behavior: domain
    format: yaml
    path: ./rules/npm-sites.yaml
    url: "https://rules.example.net/mihomo/npm-sites.yaml"
    interval: 86400

path는 Mihomo가 다운로드한 파일을 저장할 위치입니다. 상대 경로는 실행 환경과 클라이언트가 설정 파일을 보관하는 위치에 따라 해석될 수 있으므로, 경로에 쓰기 권한이 있는지 확인하세요. 그래픽 클라이언트가 설정을 다른 폴더로 복사하거나 임시 경로에서 실행한다면 경로가 예상과 다를 수 있습니다. interval의 단위는 초이며, 86400은 24시간입니다. 너무 짧은 간격으로 설정하면 원격 서버에 불필요한 요청이 반복될 수 있습니다.

AI·GitHub·npm 목록과 정책 그룹을 연결하세요

behavior: domain을 사용하면 provider 파일의 payload에 도메인 항목을 작성합니다. 아래는 구성 예시이며, 서비스가 사용하는 모든 도메인을 완전히 열거한 목록은 아닙니다. 서비스 도메인은 바뀔 수 있고 로그인, 파일 전송, API 요청은 서로 다른 하위 도메인을 사용할 수 있습니다. 예상하지 못한 연결이 남으면 Mihomo 연결 화면에서 실제 대상 도메인을 확인한 뒤, 필요한 항목만 신뢰할 수 있는 목록에 추가하세요.

# ai-sites.yaml
payload:
  - "+.openai.com"
  - "+.chatgpt.com"
  - "+.oaistatic.com"
  - "+.oaiusercontent.com"
  - "+.anthropic.com"
  - "+.claude.ai"
  - "+.claudeusercontent.com"
# github-sites.yaml
payload:
  - "+.github.com"
  - "+.githubusercontent.com"
  - "+.githubassets.com"

# npm-sites.yaml
payload:
  - "+.npmjs.com"
  - "+.npmjs.org"

+.example.com 형태는 해당 도메인의 하위 도메인을 포함하는 도메인 항목입니다. 루트 도메인도 함께 처리하는 방식이므로 규칙 파일의 형식과 사용 중인 Mihomo 버전이 해당 표현을 지원하는지 확인하세요. provider의 behavior와 파일의 실제 내용 형식이 맞지 않으면 다운로드가 성공해도 규칙을 읽지 못할 수 있습니다. behavior: domain 파일에 DOMAIN-SUFFIX,... 형식의 규칙 행을 넣지 말고, 그런 규칙 행이 필요하면 behavior: classical을 사용하는 별도 provider로 구성하세요.

정책 그룹 이름은 설정에 이미 있는 이름과 글자, 대소문자, 공백까지 정확히 일치해야 합니다. 예시에서는 AI 서비스와 개발 도구를 별도 그룹으로 분리합니다. 그룹 안의 노드 목록이나 선택 정책은 사용 중인 설정에 맞게 구성하세요.

proxy-groups:
  - name: AI-Select
    type: select
    proxies:
      - Proxy
      - DIRECT

  - name: Dev-Select
    type: select
    proxies:
      - Proxy
      - DIRECT

rules:
  - RULE-SET,ai-sites,AI-Select
  - RULE-SET,github-sites,Dev-Select
  - RULE-SET,npm-sites,Dev-Select
  - MATCH,Proxy

Proxy 역시 예시용 그룹 이름입니다. 실제 설정에 해당 그룹이 없다면 존재하는 그룹으로 바꾸세요. 조직 정책이나 서비스 이용 조건에 따라 직접 연결이 적절하지 않을 수도 있으므로, DIRECT를 선택지에 넣을지 여부도 확인해야 합니다. 정책 그룹의 선택값은 provider의 목록과 별개입니다. 규칙이 AI-Select에 일치하더라도 그 그룹에서 DIRECT를 선택했다면 최종 연결은 직접 연결됩니다.

규칙 순서와 provider 형식을 점검하세요

Mihomo는 규칙을 위에서 아래로 확인하고, 먼저 일치한 규칙에 따라 연결을 처리합니다. 그러므로 위 예시의 RULE-SET 항목은 모든 트래픽을 처리하는 MATCH보다 앞에 있어야 합니다. MATCH,Proxy를 provider 규칙보다 먼저 배치하면 뒤에 있는 AI·GitHub·npm 분기 규칙은 적용되지 않습니다. 기존 설정에 특정 도메인을 직접 연결하는 예외가 있다면, 그 예외와 provider 규칙 중 어느 쪽이 우선해야 하는지 정한 뒤 더 구체적인 규칙을 위쪽에 두세요.

규칙 목록을 넓게 만드는 것만으로 분기가 정확해지는 것은 아닙니다. 예를 들어 GitHub의 하위 서비스와 파일 호스트가 서로 다른 도메인을 쓸 수 있으므로, 실제 연결 기록에서 도메인을 확인하고 필요한 항목을 추가해야 합니다. 반대로 너무 포괄적인 도메인을 넣으면 관련 없는 서비스까지 같은 그룹으로 전달될 수 있습니다. 처음에는 소수의 명확한 도메인으로 시작하고, 접속이 누락되는 경우에만 목록을 보완하는 편이 관리하기 쉽습니다.

설정 항목확인할 내용흔한 문제
behaviordomain, classical, ipcidr 중 파일 내용과 맞는 종류도메인 목록 파일에 규칙 행을 넣어 파싱에 실패
format원격 파일이 YAML인지, 텍스트인지파일 확장자와 실제 응답 내용이 서로 다름
url인증 없이도 규칙 파일 본문을 반환하는 주소인지HTML 오류 페이지나 로그인 화면을 규칙 파일로 받음
path클라이언트가 파일을 저장할 수 있는 경로인지권한 부족, 상대 경로 기준 착오, 파일 충돌
RULE-SETprovider 이름과 실제 정책 그룹 이름이 정확히 일치하는지오타 또는 존재하지 않는 그룹 이름

일반적인 도메인 목록 파일에는 payload: 아래에 도메인 항목을 두고 format: yaml을 지정할 수 있습니다. 반면 텍스트 형식은 파일의 각 줄과 provider 설정이 서로 맞아야 합니다. 파일 이름을 .yaml로 바꾸는 것만으로 텍스트 규칙이 YAML이 되지는 않습니다. 원격 서버가 예상한 파일 대신 오류 페이지, 빈 응답, 차단 안내를 반환하는 경우에도 provider 업데이트가 실패할 수 있으므로 응답 본문과 상태 코드를 함께 점검하세요.

업데이트와 매칭 결과를 확인하세요

설정을 저장한 뒤에는 클라이언트에서 설정을 다시 불러오거나 코어를 재시작하고, 로그에 YAML 파싱 오류나 provider 다운로드 실패가 없는지 확인하세요. 일부 GUI는 프로필을 다시 불러오거나 코어를 재시작해야 변경 사항이 적용됩니다. 설정 파일을 편집했는데도 결과가 바뀌지 않는다면 현재 실행 중인 프로필이 실제로 수정한 파일인지 먼저 확인하세요. 구독 설정과 로컬 오버라이드 기능을 함께 쓰는 클라이언트에서는 화면의 최종 설정이 원본 YAML과 다를 수 있습니다.

  1. 설정 파일의 들여쓰기가 공백으로 일관적인지, 각 provider의 이름과 RULE-SET 참조가 일치하는지 확인합니다.
  2. provider URL을 직접 열어 예상한 YAML 본문이 반환되는지 점검합니다. 개인 토큰이 포함된 주소라면 브라우저 기록이나 화면 캡처를 공유하지 마세요.
  3. 클라이언트 로그에서 다운로드 오류, 권한 오류, YAML 파싱 오류를 확인합니다. 오류가 특정 provider에 한정되는지도 기록합니다.
  4. 대상 서비스를 새로 접속하고 연결 화면에서 도메인, 일치한 규칙, 최종 정책 그룹과 선택된 노드를 확인합니다.
  5. 실제 도메인이 목록에 없다면 provider 파일을 보완하고 다시 업데이트합니다. 그룹에 일치했지만 연결이 실패한다면 그룹의 선택 노드와 해당 노드의 연결 상태를 따로 확인합니다.

원격 목록은 설정한 interval에 따라 갱신되지만, 클라이언트가 꺼져 있거나 네트워크에 연결할 수 없는 동안 즉시 새 목록을 받을 수는 없습니다. 테스트할 때는 자동 갱신 시각만 기다리지 말고 클라이언트의 provider 또는 프로필 업데이트 기능을 사용하세요. 메뉴 이름은 클라이언트마다 다르므로 provider 상태, 업데이트 결과, 마지막 갱신 시각을 표시하는 화면을 찾아 확인하면 됩니다.

정상적으로 설정된 경우 AI 서비스 연결은 ai-sites에, GitHub와 npm 연결은 각 개발 도구 provider에 매칭되고, 목록에 없는 트래픽은 마지막 MATCH 규칙으로 넘어갑니다. 다만 브라우저나 애플리케이션이 자체 DNS, 자체 프록시, 별도 연결 방식을 사용할 수 있으므로 규칙 파일만으로 모든 앱의 트래픽이 자동 분기된다고 단정할 수는 없습니다. 실제 연결 화면의 매칭 결과를 기준으로 목록과 정책을 조정하세요.

Clash 다운로드