왜 Linux에서는 명령줄·systemd 구성이 중요할까요?
Windows나 macOS에서는 그래픽 클라이언트가 한 번에 코어 실행·트레이·설정 UI를 묶어 주지만, Linux 서버나 데스크톱에서는 Clash Meta(커뮤니티에선 Mihomo라고도 부릅니다) 코어만 받아 데몬으로 돌리는 방식이 흔합니다. 이렇게 하면 SSH 세션만으로도 동일한 규칙과 구독을 유지할 수 있고, 재부팅 뒤에도 자동으로 올라오게 하려면 systemd 한 벌이면 충분합니다.
이 글은 Ubuntu 및 그와 패키지 체계가 비슷한 Debian 계열을 기준으로, 설치 경로·권한·유닛 파일까지 복사해 쓸 수 있는 형태로 적었습니다. 이미 Windows나 macOS, Android 튜토리얼을 따라온 사용자라면, 여기서는 “코어와 설정 파일이 Linux에서 어디에 놓이고 어떻게 상주하는가”에 초점을 맞추면 학습 비용이 크게 줄어듭니다.
사전 준비와 보안에 대한 짧은 메모
터미널에서 sudo를 쓸 수 있는 계정이 있어야 하고, 방화벽(ufw 등)을 쓰는 경우에는 프록시 포트와 컨트롤러 포트를 허용 목록에 넣을지 결정해야 합니다. TLS 검증이 깨지지 않도록 ca-certificates 패키지가 최신인지도 확인하는 것이 좋습니다.
설치 파일은 출처가 분명한 경로에서 받는 것이 원칙입니다. 일상적인 배포·업데이트 동선은 본 사이트 다운로드 페이지를 먼저 확인하고, 오픈소스 라이선스와 소스 코드는 상위 프로젝트 저장소에서 검증하는 식으로 나누어 생각하면 안전합니다.
바이너리 배치와 실행 권한
배포판마다 패키지 이름이 다를 수 있으므로, 여기서는 공통적으로 쓰이는 절차만 적습니다. 아키텍처에 맞는 단일 바이너리(예: mihomo)를 내려받은 뒤, 시스템 전역에서 실행하려면 /usr/local/bin/ 아래에 두고 실행 비트를 부여합니다.
sudo mv mihomo /usr/local/bin/mihomo
sudo chmod +x /usr/local/bin/mihomo
mihomo -v
-v로 버전이 출력되면 경로와 권한은 정상입니다. 사용자 홈에만 둘 거라면 ~/bin 등을 PATH에 추가하는 방식도 가능하지만, systemd와 함께 쓸 때는 절대 경로를 유닛 파일에 박아 두는 편이 덜 헷갈립니다.
설정 디렉터리와 최소 구성 개요
Clash Meta 계열은 보통 -d 옵션으로 설정 루트 디렉터리를 지정합니다. 예를 들어 /etc/clash를 쓰면 다음과 같이 생각하면 됩니다.
config.yaml— 메인 프로필- 구독·Rule Provider가 내려받는 로컬 파일 — 상대 경로는 이 디렉터리 기준
- 필요 시 GeoIP 등 데이터 파일
디렉터리 소유자는 코어를 실행하는 사용자와 맞춰야 합니다. systemd로 돌릴 때는 전용 시스템 사용자를 만들거나, 개인용이면 자신의 UID로 서비스를 띄우도록 유닛을 짜는 방식 중 하나를 고릅니다.
아주 작은 예시로 구조만 확인하기
실제 운영용 config.yaml은 공항·규칙 세트에 따라 길어지지만, 형태만 보면 포트·모드·프록시·규칙 블록이 계층적으로 이어집니다. 구독 URL을 넣는 방법과 다중 소스 관리는 Clash 구독 링크 사용 튜토리얼에서 단계별로 다루므로, Linux에서는 “파일을 그 디렉터리에 두고 코어가 읽게 한다”는 점만 일치시키면 다른 플랫폼과 동일한 사고방식으로 이어집니다.
수동 실행으로 동작 확인하기
systemd에 넣기 전에 포그라운드에서 한 번 실행해 보는 것이 좋습니다. 설정 오류는 여기서 바로 로그로 드러나기 때문입니다.
sudo /usr/local/bin/mihomo -d /etc/clash
기본적으로 HTTP 프록시나 SOCKS, 그리고 외부 API(컨트롤러) 포트는 config.yaml의 port, socks-port, external-controller 등에 따라 결정됩니다. 다른 앱과 포트가 겹치면 충돌이 나므로, 이미 사용 중인 툴이 있다면 숫자를 조정합니다.
브라우저만이 아니라 터미널 도구까지 같은 규칙으로 묶고 싶다면 TUN 계층이 필요합니다. 개념과 주의점은 TUN 모드 상세 해설을 참고하되, Linux에서는 캡어빌리티·라우팅 테이블·iptables/nftables와의 관계까지 직접 책임지는 경우가 많으니, 먼저는 시스템 프록시나 수동 proxychains 수준에서 안정화한 뒤 확장하는 전략이 안전합니다.
systemd 유닛으로 상시 실행하기
포그라운드 테스트가 끝났다면 서비스 파일을 만듭니다. 아래는 예시이며, 사용자·경로·환경 변수는 환경에 맞게 바꿉니다.
[Unit]
Description=Clash Meta (mihomo)
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
ExecStart=/usr/local/bin/mihomo -d /etc/clash
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
network-online.target을 기다리면 DHCP나 VPN이 올라온 뒤 구독 갱신이 안정적인 경우가 많습니다. DNS만으로 해석이 꼬이는 환경이라면 코어의 DNS 설정과 systemd-resolved 동작도 함께 점검합니다.
활성화와 로그 확인
유닛을 /etc/systemd/system/mihomo.service 등에 저장한 뒤 데몬을 리로드하고 활성화합니다.
sudo systemctl daemon-reload
sudo systemctl enable --now mihomo.service
systemctl status mihomo.service
journalctl -u mihomo.service -e
active (running)이면서 로그에 반복적인 오류가 없으면 상시 실행 단계는 통과입니다. 실패 시에는 설정 파일 문법, 디렉터리 권한, 포트 점유부터 순서대로 좁히면 됩니다.
쉘 환경 변수로 CLI 트래픽 넣기(선택)
브라우저는 OS 프록시를 따르지만, curl이나 패키지 매니저는 기본적으로 직접 연결하는 경우가 많습니다. 임시로는 다음과 같이 환경 변수를 셸에 걸어 테스트할 수 있습니다.
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:7891
포트 번호는 자신의 config.yaml에 맞게 조정합니다. 영구 반영은 ~/.bashrc나 ~/.profile에 넣되, 팀 공용 서버라면 민감 정보가 남지 않도록 주의합니다.
권한·보안에 대한 현실적인 체크리스트
외부 컨트롤러를 켜 두었다면 로컬 네트워크에만 바인딩했는지, 비밀번호나 토큰을 설정했는지 확인합니다. 공용 Wi-Fi에서는 노출 면적을 최소화하는 것이 좋습니다.
TUN이나 방화벽 조작이 포함되면 CAP_NET_ADMIN 같은 권한 이야기가 나올 수 있습니다. Ubuntu 데스크톱에서 개인용으로 쓸 때와, 멀티 유저 서버에서 돌릴 때의 위험 프로필은 다릅니다. 후자라면 전용 계정·최소 권한·감사 로그까지 포함한 운영 정책을 갖추는 편이 안전합니다.
자주 막히는 지점과 점검 순서
설정을 읽지 못한다고 나옵니다
YAML 들여쓰기 한 치라도 어긋나면 코어가 거부합니다. 메시지에 나온 줄 번호를 기준으로 블록을 주석 처리해 가며 원인을 줄입니다. Clash Meta 전용 키를 쓰는 경우에도 상위 문서의 호환 범위를 확인합니다.
포트가 이미 사용 중입니다
ss -lntp 또는 lsof -i :포트로 점유 프로세스를 확인하고, 다른 프록시나 개발 서버와 겹치지 않게 조정합니다.
서비스가 재시작을 반복합니다
Restart=on-failure를 걸어 두었다면 설정 오류로 즉시 종료될 때 루프처럼 보일 수 있습니다. 잠시 Type=simple 상태에서 journalctl로 원인을 고친 뒤 다시 활성화합니다.
정리
Linux에서 Clash Meta Ubuntu 조합으로 무엇을 얻느냐면, GUI 없이도 서버·데스크톱 모두 동일한 규칙 문법을 유지할 수 있고, systemd 부팅 자동 시작으로 세션 로그인 여부와 무관하게 코어를 일정하게 유지할 수 있다는 점입니다. Linux 프록시 클라이언트를 직접 고르는 대신 코어와 설정만 맞춰 두면, 다른 운영체제에서 쓰던 프로필을 옮기는 비용도 줄어듭니다.
다른 플랫폼에 비해 Clash 계열은 규칙 기반 라우팅과 예제 구성이 풍부해, 한 번 루트 디렉터리와 유닛만 정리해 두면 이후 변경은 대부분 YAML 안에서 끝납니다. 설치 패키지가 여러 포크로 흩어져 헷갈릴 수 있으니, 본 사이트 다운로드 페이지에서 정리된 경로를 먼저 확인해 보세요. 준비가 되었다면 → Clash를 무료로 내려받아 Linux 환경에 맞춰 바로 적용해 보세요.