1. 블로그
  2. 리눅스에서 Clash 배포하기: 데스크톱 클라이언트 설치와 mihomo 명령줄 설정

리눅스에서 Clash 배포하기: 데스크톱 클라이언트 설치와 mihomo 명령줄 설정

Linux 데스크톱 환경에 Clash 클라이언트를 설치하는 방법과 mihomo 코어로 명령줄에서 프록시를 실행하는 전체 과정, 부팅 자동 실행 설정까지 소개합니다.

먼저 정하기: GUI냐 명령줄이냐

Linux에서 Clash를 쓰는 방법은 크게 두 가지입니다. 하나는 데스크톱 클라이언트로, Clash Verge Rev나 FlClash처럼 GUI를 갖춘 앱을 쓰는 방식입니다. 구독 가져오기, 노드 전환, 지연 테스트, 규칙 확인까지 모두 창 안에서 처리할 수 있어 평소 데스크톱을 쓰는 환경에 적합합니다. 다른 하나는 mihomo 코어와 명령줄 조합입니다. mihomo는 Clash Meta 코어를 이어가는 프로젝트로, 오픈소스이며 프록시 코어 기능만 담고 있고 GUI가 없습니다. 모든 설정은 하나의 YAML 파일에 담기며, 서버·NAS·라우터 환경은 물론 프록시를 시스템 서비스처럼 상시 구동하고 싶은 데스크톱 사용자에게도 알맞습니다.

두 방식은 서로 배타적이지 않습니다. 같은 기기에서 집에서는 클라이언트 GUI로 편하게 조작하고, 외부에서는 systemd가 mihomo를 띄워 계속 서비스를 제공하게 할 수도 있습니다. 아래 표를 참고해 상황에 맞는 방식을 먼저 정한 뒤 진행하세요.

비교 항목데스크톱 클라이언트mihomo 명령줄
적합한 환경GNOME/KDE 등 데스크톱서버, 터미널, 상시 구동 서비스
설정 방식GUI 조작 + 구독 링크config.yaml 직접 편집
부팅 자동 실행클라이언트 내 스위치systemd 유닛으로 관리
리소스 사용량코어 + GUI 프로세스코어 프로세스만
관리 패널기본 제공 GUI 패널metacubexd 등 외부 웹 패널 연동

데스크톱 클라이언트 설치

본 사이트 다운로드 센터의 Linux 항목에서 배포판에 맞는 패키지 형식을 고르세요. Debian, Ubuntu, Deepin 계열은 .deb 패키지를, Fedora, openSUSE 계열은 .rpm 패키지를 사용합니다. 시스템에 직접 설치하고 싶지 않다면 단일 실행 파일인 AppImage를 쓰면 됩니다. Clash Verge Rev는 deb와 rpm을 모두 제공하고, FlClash는 deb를 제공하며, 둘 다 mihomo 코어를 내장해 설치 후 바로 사용할 수 있습니다.

# Debian / Ubuntu 계열
sudo dpkg -i clash-verge_*_amd64.deb
sudo apt -f install    # 의존성이 빠졌을 때 보충 설치

# Fedora / openSUSE 계열
sudo dnf install ./clash-verge-*-1.x86_64.rpm

AppImage는 FUSE 런타임 라이브러리가 필요한데, Ubuntu 22.04부터는 기본으로 포함되지 않아 libfuse2를 먼저 설치해야 합니다(24.04에서는 패키지명이 libfuse2t64). Fedora는 fuse-libs가 이에 해당하며, 설치 후 파일에 실행 권한을 부여하면 바로 실행할 수 있습니다.

sudo apt install libfuse2
chmod +x FlClash-*-amd64.AppImage
./FlClash-*-amd64.AppImage

주의할 점이 두 가지 있습니다. 첫째, 아키텍처를 정확히 골라야 합니다. 일반 PC는 amd64(x86_64), 라즈베리 파이나 ARM 노트북은 arm64를 선택해야 하며, 잘못 고르면 실행 자체가 되지 않습니다. 둘째, 첫 실행 후 구독 페이지에서 사용 중인 프록시 서비스가 제공하는 Clash 구독 링크를 붙여넣고 업데이트해 노드 목록을 받아온 다음, 프록시 페이지에서 노드를 선택하고 설정에서 시스템 프록시 스위치를 켭니다. 트래픽을 전체적으로 관리하고 싶다면 TUN 모드를 켜면 되는데, 이때 클라이언트가 코어 권한 상승 승인 창을 띄우며, 한 번 승인하면 이후 모든 앱의 트래픽이 개별 설정 없이 자동으로 프록시를 거치게 됩니다.

mihomo 명령줄 배포

명령줄 방식은 세 단계로 진행됩니다: 코어 설치, 설정 준비, 수동 확인. 정상 동작을 확인한 뒤에 systemd로 관리를 넘깁니다.

1단계: 코어 설치

본 사이트 다운로드 센터나 mihomo의 GitHub Releases 페이지에서 Linux용 압축 파일을 받으세요. 파일명은 mihomo-linux-amd64-v1.18.9.gz 형태이며 실제 버전 번호는 다를 수 있습니다. 오래된 CPU라 x86-64-v3 명령어 집합이 없다면 파일명에 compatible이 붙은 버전을 사용하세요. 압축을 풀고 시스템 PATH 아래에 배치합니다.

gunzip mihomo-linux-amd64-v1.18.9.gz
chmod +x mihomo-linux-amd64-v1.18.9
sudo mv mihomo-linux-amd64-v1.18.9 /usr/local/bin/mihomo
mihomo -v    # 버전 번호가 출력되면 설치 성공

2단계: 설정 디렉터리 준비

sudo mkdir -p /etc/mihomo
sudo curl -L -o /etc/mihomo/config.yaml "여기에 Clash 구독 링크 입력"

대부분의 프록시 서비스는 Clash용 구독 주소를 바로 제공하므로, 그대로 받아오면 사용 가능한 config.yaml이 됩니다. 범용 구독만 제공하는 경우라면 데스크톱 클라이언트에서 먼저 가져온 뒤 설정을 내보내거나, 구독 변환 서비스를 이용해 Clash 형식으로 만들면 됩니다. GeoIP, GeoSite 데이터 파일(geoip.metadb, geosite.dat 등)은 처음 실행할 때 설정 디렉터리로 자동 다운로드되며, 네트워크 환경이 제한적이라면 클라이언트를 쓰던 기기에서 같은 이름의 파일을 복사해 옮겨도 됩니다.

config.yaml에서 실제 사용과 가장 관련 있는 항목은 세 가지입니다.

mixed-port: 7890                        # HTTP·SOCKS 통합 진입 포트
allow-lan: false                        # 로컬 네트워크의 다른 기기 접속 허용 여부
external-controller: 127.0.0.1:9090     # 컨트롤러 주소, 로컬에서만 수신
  • mixed-port: HTTP와 SOCKS를 함께 받는 통합 포트로, 시스템 프록시가 이 포트를 가리키게 됩니다.
  • allow-lan: 같은 네트워크의 다른 기기가 접속할 수 있게 할지 여부이며, 단일 기기에서만 쓸 경우 false로 둡니다.
  • external-controller: 외부 컨트롤러 주소로, 패널 도구가 이 주소를 통해 코어를 관리합니다.

주의

external-controller를 0.0.0.0에 바인딩한 채로 공개 네트워크에 노출하지 마세요. 원격 관리가 꼭 필요하다면 secret 값을 반드시 설정하고, 그 앞에 인증이 걸린 리버스 프록시를 한 겹 더 두어야 합니다.

3단계: 수동 실행으로 확인

mihomo -d /etc/mihomo

터미널에 mixed inbound 리스닝 로그가 출력되면, 다른 터미널 창을 열어 아웃바운드를 확인합니다.

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

반환된 아웃바운드 IP가 선택한 노드의 지역과 일치한다면 프록시 경로가 정상적으로 연결된 것입니다. Ctrl+C로 프로세스를 종료하고 서비스화 설정 단계로 넘어갑니다.

systemd로 부팅 자동 실행 등록

수동 실행이 정상 동작하는 것을 확인했다면, mihomo를 systemd에 맡겨 부팅 시 자동 실행과 장애 발생 시 자동 복구를 지원하게 만듭니다. root 권한으로 /etc/systemd/system/mihomo.service 파일을 새로 만드세요.

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

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

[Install]
WantedBy=multi-user.target

유닛을 불러와 활성화합니다.

sudo systemctl daemon-reload
sudo systemctl enable --now mihomo
systemctl status mihomo     # active (running)이 보이면 성공
journalctl -u mihomo -f     # 코어 로그를 실시간으로 확인

status 출력에 active (running)이 나오면 서비스가 정상 동작 중입니다. 문제가 생기면 먼저 journalctl 로그를 확인하세요. 오류 메시지가 문제가 발생한 지점을 바로 알려줍니다.

TUN 모드로 전체 트래픽을 관리하려면 먼저 config.yaml에서 tun 항목을 활성화하세요.

tun:
  enable: true
  stack: mixed
  auto-route: true
  auto-detect-interface: true

그다음 service 파일의 [Service] 항목에 두 줄을 추가해 코어가 가상 네트워크 인터페이스를 만들 수 있는 권한을 갖도록 합니다.

AmbientCapabilities=CAP_NET_ADMIN CAP_NET_BIND_SERVICE
CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE

수정 후 systemctl daemon-reload를 실행하고 mihomo를 restart하면 반영됩니다.

구독 갱신도 자동화할 수 있습니다. cron으로 매주 config.yaml을 다시 받아온 뒤 systemctl restart mihomo를 실행하거나, 컨트롤러 API를 호출해 재시작 없이 즉시 적용할 수도 있습니다.

curl -X PUT "http://127.0.0.1:9090/configs?force=true" \
  -d '{"path": "/etc/mihomo/config.yaml"}'

데스크톱 환경에서 프록시 연결하기

코어를 실행한 것만으로는 부족하고, 시스템 트래픽을 실제로 그쪽으로 보내줘야 합니다. GNOME 데스크톱: 설정 → 네트워크 → 네트워크 프록시 → 수동, HTTP와 HTTPS 호스트에 127.0.0.1, 포트 7890을 입력하고 SOCKS 호스트도 동일하게 127.0.0.1:7890으로 지정합니다. KDE는 시스템 설정의 네트워크 프록시 페이지에서 같은 방식으로 설정하면 됩니다. 명령줄로 같은 설정을 하려면 다음과 같이 합니다.

gsettings set org.gnome.system.proxy mode 'manual'
gsettings set org.gnome.system.proxy.http host '127.0.0.1'
gsettings set org.gnome.system.proxy.http port 7890

터미널에서만 잠시 프록시를 쓰고 싶다면 환경 변수를 쓰는 게 가장 간단합니다.

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

이 세 줄을 ~/.bashrc에 넣어두면 계속 적용됩니다. TUN 모드를 켠 기기라면 이 단계는 모두 필요 없습니다. 라우팅 계층에서 이미 트래픽을 가로채므로 앱마다 따로 설정할 필요가 없습니다.

자주 묻는 질문

AppImage를 더블클릭해도 반응이 없고, 터미널에서 실행하면 FUSE 관련 오류가 뜨는 경우

시스템에 FUSE 런타임 라이브러리가 없는 경우입니다. Ubuntu는 libfuse2를 설치하고(24.04는 libfuse2t64), Fedora는 fuse-libs를 설치하면 됩니다. 또는 AppImage에 --appimage-extract 옵션을 붙여 압축을 푼 뒤 실행해도 됩니다.

TUN 모드를 켜면 권한 부족 메시지가 뜨는 경우

클라이언트를 쓴다면 팝업창에서 코어 권한 상승 승인을 완료해야 합니다. 명령줄을 쓴다면 service 파일에 CAP_NET_ADMIN 권한이 추가되어 있는지 확인하고, root 또는 해당 권한을 가진 사용자로 실행해야 합니다.

curl로 테스트해도 여전히 로컬 IP가 나오는 경우

먼저 7890 포트가 정상적으로 리스닝 중인지 확인하세요(ss -tlnp | grep 7890). 그다음 규칙 모드를 확인하세요. 규칙 모드에서는 대상 사이트가 DIRECT 규칙에 걸려 직접 연결될 수 있으니, 전역 모드로 바꿔 다시 테스트하면 규칙 문제인지 배제할 수 있습니다.

systemctl로 mihomo를 실행하면 실패하는 경우

대부분 config.yaml 문법 오류나 데이터 파일 누락이 원인입니다. journalctl -u mihomo -n 50을 실행해 구체적인 오류 내용을 확인하세요. YAML 들여쓰기는 반드시 공백을 사용해야 하며 탭은 쓸 수 없습니다.

같은 네트워크의 다른 기기가 이 기기의 프록시를 함께 쓰고 싶은 경우

config.yaml에서 allow-lan을 true로 바꾸고, 방화벽에서 7890 포트를 허용했는지 확인하세요. 다른 기기에서는 프록시 주소를 이 기기의 내부 IP로 지정하면 됩니다. external-controller는 여전히 로컬에서만 수신하도록 유지하고, 함께 개방하지 마세요.

정리하면, 데스크톱 클라이언트는 '쓰기 편하게', mihomo와 systemd 조합은 '항상 켜져 있게' 만드는 역할을 합니다. 이 글의 순서대로 진행하면 Linux 기기가 부팅되는 순간부터 안정적인 프록시 경로를 갖추게 됩니다. 클라이언트와 각 플랫폼용 코어는 다운로드 센터에 시스템별로 정리되어 있으니 필요한 것을 골라 받으면 됩니다.

Clash 클라이언트 다운로드

전 플랫폼 클라이언트와 코어를 플랫폼별로 정리했으며, 버전 번호도 각각 표기되어 있습니다.

Clash 다운로드