Linux Clash 설치: 데스크톱 배포판과 명령줄 환경에서 mihomo 전체 구축

데스크톱 배포판의 그래픽 클라이언트 설치부터 서버·WSL 등 명령줄 전용 환경의 mihomo 커널 배포, 부팅 자동 실행, 프록시 검증까지 전 과정을 다룹니다.

먼저 경로 선택: 그래픽 클라이언트인가, mihomo 커널인가

Linux의 Clash 생태계는 두 계층으로 나뉩니다. 하위 계층은 커널로, 설정을 해석하고 트래픽을 분산하는 역할을 하며 현재 활발히 유지보수되는 커널은 mihomo(구 Clash Meta)입니다. 상위 계층은 그래픽 클라이언트로, 커널을 창 안에 감싸 구독 관리, 노드 전환, 시스템 프록시 스위치를 제공합니다. 두 경로는 각각 다른 환경에 대응합니다:

두 경로는 동일한 YAML 설정 문법을 공유하고 구독 링크도 공통으로 사용하므로, 나중에 경로를 바꾸더라도 설정을 다시 정리할 필요가 없습니다. 아래에서 각각의 전체 단계를 안내합니다.

데스크톱 배포판: 그래픽 클라이언트 설치

Debian / Ubuntu 계열(deb 패키지)

다운로드 페이지에서 해당 아키텍처의 deb 패키지를 받은 뒤, 터미널에서 다음을 실행합니다:

sudo dpkg -i clash-verge_*_amd64.deb
sudo apt-get -f install   # dpkg가 의존성 오류를 낼 때만 실행

설치 후 앱 메뉴에서 실행하고, 구독 페이지에 구독 링크를 붙여넣어 업데이트한 다음 노드를 선택하고 「시스템 프록시」 스위치를 켜면 됩니다. GNOME과 KDE의 시스템 프록시는 클라이언트가 자동으로 설정하므로 브라우저와 대부분의 데스크톱 앱이 곧바로 프록시를 통해 연결됩니다.

Fedora / RHEL 계열(rpm 패키지)

sudo dnf install ./clash-verge-*.x86_64.rpm

dnf가 의존성을 자동으로 보완하며, 설치 후 구독 가져오기와 스위치 흐름은 deb와 동일합니다.

다운로드 전에 아키텍처를 확인하세요: 대부분의 데스크톱과 노트북은 x86_64(amd64)이며, ARM 기기는 arm64를 선택합니다. 터미널에서 uname -m을 실행하면 현재 기기의 아키텍처를 확인할 수 있습니다.

일부 앱(일부 명령줄 도구, 자체 네트워크 스택을 가진 데스크톱 앱)은 시스템 프록시 설정을 읽지 않습니다. 이런 경우 클라이언트의 TUN 모드를 켜면 커널이 시스템 계층에서 모든 TCP/UDP 트래픽을 인계받습니다. TUN은 가상 네트워크 카드를 생성해야 하므로 클라이언트가 관리자 권한을 요청합니다.

명령줄 환경: mihomo 커널 배포

서버와 WSL에는 창이 없으므로 커널을 직접 실행합니다. 전체 과정은 네 단계입니다:

  1. 바이너리 확보

    다운로드 페이지의 커널 영역에서 mihomo의 Linux 빌드를 받고, 아키텍처에 따라 linux-amd64 또는 linux-arm64를 선택합니다. 압축을 풀면 다른 의존성 없는 단일 실행 파일이 나옵니다.

  2. 시스템 경로에 설치

    sudo install -m 0755 mihomo /usr/local/bin/mihomo를 실행해 파일을 표준 경로에 배치하고 실행 권한을 부여합니다.

  3. 설정 디렉터리 준비

    관례적으로 /etc/mihomo 디렉터리를 사용하며 그 안에 config.yaml을 둡니다. 구독 링크의 원본 내용은 그대로 설정으로 쓸 수 없으므로 proxies, proxy-groups, rules 세 구역으로 작성해야 합니다. 더 간편한 방법은 proxy-providers로 구독 주소를 직접 참조하는 것으로, 커널이 자동으로 가져와 주기적으로 업데이트합니다.

  4. 포그라운드 시험 실행

    먼저 mihomo -d /etc/mihomo를 포그라운드로 한 번 실행해 설정에 오류가 없는지, 포트가 정상적으로 리스닝되는지 확인한 뒤 systemd로 관리를 넘깁니다.

최소한으로 동작하는 설정 예시는 다음과 같습니다:

mixed-port: 7890
allow-lan: false
external-controller: 127.0.0.1:9090
proxy-providers:
  airport:
    type: http
    url: "https://example.com/subscribe"
    interval: 86400
    path: ./providers/airport.yaml

mixed-port는 HTTP와 SOCKS5 요청을 동시에 받아들이며, external-controller는 커널의 REST 인터페이스로 Web 패널이 이를 통해 실행 상태를 읽고 씁니다. 로컬 루프백 주소만 리스닝하면 됩니다.

systemd 관리와 부팅 자동 실행

유닛 파일 /etc/systemd/system/mihomo.service를 새로 만듭니다:

[Unit]
Description=mihomo kernel
After=network-online.target
Wants=network-online.target

[Service]
ExecStart=/usr/local/bin/mihomo -d /etc/mihomo
Restart=on-failure
LimitNOFILE=1048576

[Install]
WantedBy=multi-user.target

이어서 등록하고 시작합니다:

sudo systemctl daemon-reload
sudo systemctl enable --now mihomo
journalctl -u mihomo -f   # 실행 로그 추적

enable --now 한 줄로 부팅 자동 실행 등록과 즉시 시작을 동시에 완료합니다. 이후 설정을 수정할 때마다 sudo systemctl restart mihomo를 실행해 적용합니다.

TUN 모드의 권한

TUN은 가상 네트워크 카드를 생성해야 하므로 일반 사용자는 기본적으로 이 권한이 없습니다. 두 가지 방법이 있습니다. 하나는 위의 유닛 파일처럼 root로 직접 실행하는 것이고, 다른 하나는 바이너리에 네트워크 관리 권한을 부여한 뒤 일반 사용자로 실행하는 것입니다:

sudo setcap 'cap_net_admin,cap_net_bind_service=+ep' /usr/local/bin/mihomo

일부 컨테이너 환경(OpenVZ, 권한이 열려 있지 않은 LXC)에는 /dev/net/tun 장치가 없어 TUN을 사용할 수 없으므로 mixed-port와 앱 단위 프록시로 대체해야 합니다. systemd를 non-root 사용자로 실행한다면 유닛 파일에 AmbientCapabilities=CAP_NET_ADMIN을 추가해야 합니다.

프록시 작동 여부 확인

가장 직접적인 방법은 프록시 매개변수를 붙여 요청을 한 번 보내는 것입니다:

curl -x http://127.0.0.1:7890 https://api.ip.sb

반환된 출구 IP가 선택한 노드의 지역과 일치하면 연결이 정상적으로 작동한다는 뜻입니다. 프록시를 셸 환경 변수로 등록해 이후 명령이 자동으로 프록시를 통하게 할 수도 있습니다:

export http_proxy=http://127.0.0.1:7890
export https_proxy=http://127.0.0.1:7890
export all_proxy=socks5://127.0.0.1:7890

그래픽 인터페이스를 원한다면 Web 패널을 연동할 수 있습니다. metacubexd, zashboard, yacd 같은 정적 패널 파일을 설정 디렉터리의 ui 하위 디렉터리에 넣고 브라우저에서 http://127.0.0.1:9090/ui에 접속하면 활성 연결 확인, 노드 전환, 지연 시간 테스트가 가능합니다. 패널은 커널 인터페이스의 프런트엔드일 뿐이므로 페이지를 닫아도 프록시 작동에는 영향이 없습니다.

WSL과 서버의 두 가지 차이점

WSL2

기본 NAT 네트워크에서는 WSL과 Windows가 각각 독립된 루프백 주소를 가집니다. 프록시가 WSL 안에서 실행 중일 때 Windows 쪽에서 연결하려면 설정에서 allow-lan: true를 지정하고 WSL의 IP로 접속해야 합니다. 더 편한 방법은 클라이언트를 Windows 쪽에 설치하고 WSL에서 export되는 프록시가 Windows 호스트 IP를 가리키게 하는 것으로, /etc/resolv.conf의 nameserver가 곧 호스트 주소입니다. WSL의 mirrored 네트워크 모드를 활성화하면 양쪽이 localhost를 공유하게 되어 위 문제가 모두 사라집니다.

서버

서버에는 로컬 브라우저가 없으므로 패널은 SSH 포트 포워딩으로 접속합니다:

ssh -L 9090:127.0.0.1:9090 user@your-server

해당 세션을 유지한 채 로컬 브라우저에서 9090 포트의 ui 경로로 접속하면 됩니다.

external-controller를 0.0.0.0으로 리스닝해 공개 네트워크에 노출하지 마세요. 원격 관리가 정말 필요하다면 설정에 secret 필드를 추가해 접근 암호를 걸고, 방화벽으로 접속 IP를 제한하세요.

자주 묻는 문제

설정 필드의 전체 작성법은 사이트 내 YAML 매뉴얼을 참고하세요. 그래픽 클라이언트의 구독 가져오기 세부 사항은 Windows, macOS와 거의 동일하며 사용 문서에 해당 항목이 있습니다.

Clash 다운로드