안녕하세요, 저는 Nayue입니다. 최근에 VPS 설정에 대해 좀 알아봤어요. codex 선생님 덕분에 codex에게 하나하나 물어보면서 정말 다 해결할 수 있었고, 성공한 김에 글을 써서 여러분과 공유하고 싶었습니다.
도움이 되길 바라며, 혹시 잘못된 부분이 있으면 알려주세요~
1. 왜 도메인과 VPS가 필요한가
단순히 검열을 우회하는 것이 목적이라면, 기성 프록시를 사는 것이 가장 쉽습니다. 하지만 노드 구성, 프로토콜 선택, 인증서 관리, 클라이언트 구독 방식을 직접 제어하고 싶다면, 직접 VPS를 구축하는 것이 더 제어하기 쉽고 장기적으로 사용하기 좋습니다.
이 글의 목표는 여러분이 자신만의 프록시를 갖도록 돕는 것이지만, 제 튜토리얼이 가장 포괄적이거나 완벽하지는 않습니다. 더 많은 기능과 더 안전한 구성을 위해서는 더 많은 튜토리얼을 공부해야 합니다. 이 튜토리얼의 목적은 빠르게 시작할 수 있도록 하는 것입니다.
최종 결과는 다음과 같습니다: 여러분만의 도메인이 생깁니다. 예: node.example.com.
이 도메인은 여러분이 구매한 VPS를 가리킵니다. 프록시 서비스는 VPS에서 실행되고, 클라이언트는 이 도메인을 통해 VPS에 연결되며, VPS는 대상 웹사이트에 접속합니다.
전체 관계는 다음과 같이 이해할 수 있습니다:
1모바일 / 컴퓨터 클라이언트2 ↓3node.example.com4 ↓5VPS 퍼블릭 서버6 ↓7대상 웹사이트
여기에는 두 가지 핵심 요소가 있습니다: 도메인과 VPS입니다.
도메인의 역할은 안정적이고 읽기 쉬우며 인증서 서명이 가능한 진입점을 제공하는 것입니다. 이론적으로 VPS IP를 사용하여 직접 연결할 수도 있지만, 실제로는 권장되지 않습니다.
그 이유는 세 가지입니다:
첫째, 도메인은 마이그레이션이 쉽습니다. VPS IP가 변경되거나, 회선 품질이 저하되거나, 공급자를 변경하는 경우 도메인의 DNS 레코드만 새 IP로 변경하면 되며, 클라이언트는 동일한 도메인에 계속 연결됩니다.
둘째, 도메인을 사용하면 TLS 인증서를 쉽게 신청할 수 있습니다. 이 글에서는 TLS 방식을 사용하며, 클라이언트는 연결 시 인증서를 확인합니다. 도메인으로 인증서를 신청하는 것이 더 자연스럽고 일반 HTTPS 서비스 사용 방식에 가깝습니다.
셋째, 도메인은 이후 관리에 편리합니다. 예를 들어, 메인 노드의 이름을 다음과 같이 지정할 수 있습니다:
백업 노드:
구독 서비스:
이것이 IP 주소를 외우는 것보다 훨씬 명확합니다.
VPS의 역할은 퍼블릭 서버를 제공하는 것입니다. 공인 IP, 안정적인 네트워크, 충분한 트래픽이 필요하며, SSH를 통해 로그인하여 서비스를 설치할 수 있어야 합니다.
이 글에서는 Ubuntu 22.04 시스템을 사용합니다. 구성은 매우 높을 필요가 없으며, 개인 사용에는 보통 1C2G면 충분합니다. 실제로 집중해야 할 것은 데이터 센터 위치, 대역폭, 월간 트래픽입니다.
이 솔루션은 개인 학습 및 자가 사용에만 적합합니다. 낯선 사람과 노드를 공유하지 말고, 구독 링크, QR 코드, UUID 또는 서버 IP와 같은 민감한 정보를 공개 페이지에 게시하지 마십시오.
2. 준비: 도메인, VPS, Cloudflare 계정, SSH 도구
시작하기 전에 이번에 사용할 것들을 준비합니다. 이 부분은 복잡하지 않지만, 한 번에 정리해두는 것이 좋습니다. 나중에 문제가 생겨 왔다 갔다 하지 않도록 말이죠.
이번에 제가 실제로 사용한 조합은 다음과 같습니다:
1도메인 등록 기관: Porkbun2DNS 관리: Cloudflare 무료 요금제3VPS 지역: 홍콩4VPS 시스템: Ubuntu 22.045VPS 사양: 1C2G / 100Mbps / 30G 디스크 / 월 300G 트래픽6서버 스크립트: v2ray-agent7프록시 코어: Xray-core8최종 프로토콜: VLESS + TCP + TLS + Vision9컴퓨터 클라이언트: Clash Verge10모바일 클라이언트: Shadowrocket
어떤 분들은 "홍콩 VPS를 샀는데 AI는 어떻게 구독하나요?"라고 물을 수도 있습니다.
ㅎㅎ, 걱정 마세요. 이 VPS는 AI를 위한 것이 아닙니다. 목표가 해외 AI를 사용하는 것이라면, 해당하는 안정적인 VPS를 찾아 구매하세요. 제 VPS 제공업체를 그대로 따라 할 필요는 없습니다. X에는 많은 VPS 추천이 있습니다.
2.1 도메인
도메인은 Porkbun, Namecheap, Cloudflare Registrar와 같은 플랫폼에서 구매할 수 있습니다. 이번에는 Porkbun을 사용했으며, 연간 약 11달러로 적당한 가격입니다.
도메인을 구매할 때는 도메인 자체만 구매하면 되며, 추가 웹 호스팅 서비스는 필요하지 않습니다. 나중에 VPS에서 서비스를 직접 구성할 것이고, 인증서는 무료 Let's Encrypt를 사용하여 신청할 것입니다.
구매 시 다음 사항을 확인하는 것이 좋습니다:
1도메인 구매 성공2Whois 프라이버시 보호 활성화3자동 갱신 활성화4계정 2FA 활성화5추가 웹 호스팅 미구매6추가 유료 SSL 미구매
다시 말씀드리지만, 도메인을 구매하는 것은 웹사이트를 만드는 것이 아니라 VPS에 안정적인 접근 경로를 제공하기 위함입니다.
예를 들어, 나중에 다음과 같은 서브도메인을 구성할 것입니다:
이것을 VPS의 공인 IP로 지정합니다. 클라이언트가 연결할 때 이 도메인에 접속하며, VPS IP를 직접 입력하지 않습니다.

2.2 Cloudflare 계정
Cloudflare는 여기서 DNS 관리를 담당하며, 반드시 Cloudflare에서 도메인을 구매할 필요는 없습니다.
제 실제 방식은 다음과 같습니다:
1Porkbun에서 도메인 구매2Cloudflare에서 DNS 관리
즉, Porkbun의 Nameservers를 Cloudflare에서 할당한 두 개의 Nameservers로 변경합니다. 그러면 모든 DNS 레코드는 앞으로 Cloudflare에서 구성됩니다.
이 단계는 나중에 자세히 설명하겠습니다. 지금은 Cloudflare 계정을 준비하고 무료 요금제를 선택하기만 하면 됩니다.
https://dash.cloudflare.com/https://dash.cloudflare.com/)를 엽니다.
등록/로그인 후:
1사이트 추가2↓3도메인 입력 (예: xxx.com), 루트 도메인 입력4↓5무료 요금제 선택6↓7Cloudflare가 기존 DNS 레코드 스캔8↓9계속
Cloudflare는 마지막에 두 개의 네임서버를 제공하며, 형식은 다음과 같습니다:
1xxxx.ns.cloudflare.com2yyyy.ns.cloudflare.com

2.3 VPS
VPS는 실제로 서비스를 실행하는 머신입니다. 공인 IPv4, SSH 접근이 필요하며, 80 및 443 포트를 사용할 수 있어야 합니다.
저는 Global Cloud에서 구매했습니다. https://my.locvps.net/idcSystem.aspxhttps://my.locvps.net/idcSystem.aspx)?
광고하는 것이 아닙니다. 요구 사항은 각자 다르므로 필요에 따라 다른 곳에서 필요한 VPS를 구매하시면 됩니다.

2.4 SSH 로그인 도구
저는 Mac의 내장 터미널을 사용하여 VPS에 로그인합니다. macOS는 추가 SSH 도구가 필요하지 않습니다. 터미널만 열면 됩니다.
SSH 로그인 명령 형식은 다음과 같습니다:
1ssh root@<VPS_IP> -p <SSH_PORT>2예시:3ssh root@203.0.113.10 -p 43781
2.5 클라이언트 소프트웨어
서버 설정이 완료된 후, 컴퓨터나 휴대폰에 노드를 가져와야 합니다.
이번에 주로 사용한 두 가지 클라이언트는 다음과 같습니다:
1Mac: Clash Verge2iPhone: Shadowrocket
Clash Verge는 구독 가져오기에 적합합니다. 나중에 v2ray-agent가 ClashMeta 형식의 구독을 생성하며, 이를 Clash Verge에 직접 추가할 수 있습니다.
Shadowrocket은 iPhone에서 단일 노드를 테스트하는 데 적합합니다. 구독에 특정 Shadowrocket 형식이 없더라도 설치 스크립트가 출력하는 vless:// 링크를 복사하여 수동으로 가져올 수 있습니다.
3. 도메인을 Cloudflare에 연결하기
도메인을 구매한 후 다음 단계는 DNS 관리를 Cloudflare에 넘기는 것입니다.
아까 그 두 개의 네임서버를 기억하시나요? 이제 그것들을 구성할 것입니다.
이 두 Nameservers의 역할은 전 세계 DNS 시스템에 다음을 알리는 것입니다:
이제부터 이 도메인의 DNS 레코드는 Cloudflare에서 관리됩니다.
즉, Porkbun은 여전히 도메인 등록 기관이지만 DNS 레코드는 Cloudflare 관리로 이전됩니다.
Porkbun을 예로 들어 수정 방법을 보여드리겠습니다. 다른 플랫폼에서 구매했다면 직접 수정 방법을 찾아보시기 바랍니다.
도메인 세부 정보로 들어가서 Nameservers 구성을 찾습니다.
원래 Porkbun Nameservers를 Cloudflare에서 제공한 두 개로 교체합니다.



저장 후 Porkbun의 Nameserver 영역에 이 두 Cloudflare 주소가 표시되어야 합니다.
이 단계를 저장한다고 해서 전 세계에 즉시 적용되는 것은 아닙니다. DNS 변경 사항이 전파되는 데는 일반적으로 몇 분에서 몇 시간까지 시간이 걸립니다. Cloudflare 페이지에도 다음과 같은 메시지가 표시됩니다:
귀하의 도메인이 Cloudflare를 가리키는지 확인 중입니다.
이는 정상입니다. 공식 안내에는 1~2시간 또는 최대 24시간이 소요될 수 있다고 나와 있습니다. 실제로 이번에는 잠시만 기다렸습니다.
수정 후 Cloudflare로 돌아가서 확인을 기다립니다.
성공하면 Cloudflare에 다음과 같은 메시지가 표시됩니다:
귀하의 도메인이 이제 Cloudflare에 의해 보호됩니다.
또는 사이트 상태가 Active로 표시됩니다.
이 상태는 다음을 의미합니다:
도메인이 Cloudflare에 성공적으로 연결되었습니다. 이후 DNS 레코드는 Cloudflare에서 구성할 수 있습니다.
이 단계가 완료되기 전에는 서버 스크립트 설치를 서두르지 않는 것이 좋습니다. 나중에 인증서를 신청하고 도메인 IP를 확인하는 과정이 올바른 DNS 전파에 의존하기 때문입니다. DNS가 완전히 전환되지 않은 상태에서 진행하면 나중에 도메인 확인 실패가 발생할 가능성이 높습니다.
Cloudflare 페이지에 성공이 표시된 후에는 명령어로 한 번 더 확인하는 것이 좋습니다.
Mac 터미널에서 다음을 실행합니다:
dig +short NS example.com
정상적으로 Cloudflare의 Nameservers가 반환되어야 합니다.
여전히 Porkbun의 Nameservers가 반환된다면 DNS 관리가 아직 Cloudflare로 완전히 전환되지 않은 것입니다. 이때는 노드 구성을 계속하지 말고 잠시 기다린 후 다시 확인하세요.
4. DNS 구성: 레코드 추가 및 그레이 클라우드 유지
도메인이 Cloudflare에 연결된 후 다음 단계는 Cloudflare에서 실제로 VPS를 가리키는 DNS 레코드를 추가하는 것입니다.
여기서 실제로 사용한 것은 다음과 같습니다:
1루트 도메인: xxx.com2노드 도메인: node.xxx.com3VPS IPv4: xx.xx.xx.xx4Cloudflare 레코드 상태: DNS only
4.1 Cloudflare DNS 페이지로 이동
Cloudflare에 로그인하여 사이트로 들어간 다음 다음을 엽니다:
1DNS → Records
여기에서 Cloudflare에서 스캔되었거나 이미 존재하는 DNS 레코드를 볼 수 있습니다.
도메인이 방금 Porkbun에서 이전된 경우 일부 기본 레코드가 표시될 수 있습니다. 예:
1A 레코드2CNAME 레코드3MX 레코드4TXT 레코드
이것들은 먼저 삭제할 수 있습니다. 새로 직접 구성할 것입니다.
'node'를 노드 도메인으로 사용할 계획이므로 'node'에 대한 레코드를 추가해야 합니다.
4.2 A 레코드 추가
클릭:
1Add record
그런 다음 입력합니다:
1Type: A2Name: node3Content: VPS 공인 IPv44TTL: Auto5Proxy status: DNS only

4.3 여기서 반드시 그레이 클라우드를 선택해야 하는 이유
Cloudflare의 Proxy status에는 두 가지 일반적인 상태가 있습니다:
1Proxied: 주황색 구름2DNS only: 회색 구름
이 글에서는 반드시 선택해야 합니다:
DNS only
즉, 회색 구름입니다.
차이점은 간단히 이렇게 이해할 수 있습니다:
회색 구름: Cloudflare는 DNS 확인만 담당하며, 클라이언트가 직접 연결합니다.
주황색 구름: 클라이언트가 먼저 Cloudflare에 연결되고, Cloudflare가 이를 원본 사이트로 전달합니다.
블로그, 공식 사이트 또는 정적 페이지와 같은 일반 웹사이트의 경우 주황색 구름을 사용하면 Cloudflare의 CDN, WAF, 캐싱을 사용하고 원본 IP를 숨길 수 있습니다.
하지만 이 튜토리얼은 다음을 사용합니다:
VLESS + TCP + TLS + Vision
일반 HTTP 웹사이트 리버스 프록시 시나리오가 아닙니다. 클라이언트가 VPS의 Xray 서비스와 직접 연결을 설정할 수 있도록 하려면 이 'node' 레코드는 회색 구름으로 유지되어야 합니다.
4.4 DNS가 VPS로 확인되는지 확인
DNS 레코드를 저장한 후 Mac 터미널에서 다음을 실행합니다:
1dig @1.1.1.1 +short A [도메인, 예: node.example.com]2dig @8.8.8.8 +short A [도메인, 예: node.example.com]3dig @223.5.5.5 +short A [도메인, 예: node.example.com]
정상적인 결과는 VPS IP를 반환해야 합니다.
참고: 컴퓨터에 프록시가 활성화되어 있고 TUN 모드를 사용하는 경우 터미널 출력에 영향을 미칠 수 있습니다. 이 확인을 수행하기 전에 TUN 모드를 끄십시오.
5. 서버 초기화
먼저 SSH를 통해 서버에 로그인합니다:
1예시:2ssh root@203.0.113.10 -p 43781
처음 로그인할 때 터미널에서 서버 지문을 신뢰할지 묻는 메시지가 표시될 수 있습니다:
1Are you sure you want to continue connecting (yes/no/[fingerprint])?
yes를 입력합니다.
그런 다음 root 비밀번호를 입력합니다.
로그인 후 먼저 패키지 목록을 업데이트합니다:
1apt update2apt upgrade -y
도중에 파란색 또는 보라색 구성 인터페이스에서 멈추더라도 창을 닫지 마십시오. Ubuntu는 특정 패키지를 업그레이드할 때 로컬 구성 파일을 유지할지 묻습니다.
이번에 두 개의 구성 파일 프롬프트를 만났습니다.
첫 번째는:

두 번째는:
1/etc/cloud/cloud.cfg
터미널 프롬프트는 다음과 같았습니다:
1cloud.cfg (Y/I/N/O/D/Z) [default=N] ?
여기서는 기본값인 N을 사용하기 위해 Enter를 바로 누릅니다.
업그레이드가 완료되기 전에 Ubuntu에서 다음과 같은 인터페이스가 나타날 수 있습니다:
1Daemons using outdated libraries2Which services should be restarted?
일부 서비스가 여전히 이전 버전의 라이브러리를 로드하고 있는지 묻는 것입니다. 이러한 서비스를 다시 시작해야 합니까?
일반적으로 기본 선택 항목을 유지하고 OK를 선택합니다.
시스템 업데이트가 완료된 후 나중에 사용할 몇 가지 도구를 설치합니다:
1apt install -y curl wget sudo vim ufw lsof unzip socat jq qrencode dnsutils
이 도구들은 다음 용도로 사용됩니다:
1curl / wget: 스크립트 다운로드, 액세스 테스트2ufw: 방화벽 구성3lsof / ss: 포트 점유 확인4unzip: 파일 압축 풀기5socat: 인증서 신청 시 사용될 수 있음6jq: JSON 처리7qrencode: QR 코드 생성8dnsutils: dig 명령어 제공
마지막 단계로 도메인이 서버를 가리키는지 확인합니다:
1curl -4 ifconfig.me2dig +short A [도메인, 예: node.example.com]
이 두 결과는 일치해야 합니다.
6. 방화벽 구성 및 사전 설치 백업
VPS 초기화가 완료된 후 v2ray-agent 설치를 서두르지 마십시오. 먼저 두 가지 작업을 수행하십시오:
첫째, 방화벽을 구성하고 SSH, 80, 443 포트를 사용할 수 있는지 확인합니다.
둘째, 현재 주요 구성을 백업하여 나중에 문제가 발생할 경우 롤백을 용이하게 합니다.
이 단계는 복잡해 보이지 않지만 매우 중요합니다. 특히 방화벽은 순서가 잘못되면 서버에서 자신을 잠글 수 있습니다.
6.1 먼저 현재 로그인 포트 확인
방화벽을 구성하기 전에 현재 VPS에 로그인하는 데 사용 중인 포트를 확인하십시오.
로그인 명령이 다음과 같은 경우:
ssh root@203.0.113.10 -p 43781
SSH 포트는 다음과 같습니다:
43781
이 단계를 추측하지 마십시오. 많은 VPS 제공업체가 기본 포트 22를 사용하지 않고 사용자 지정 SSH 포트를 제공합니다. 이번에도 사용자 지정 포트를 받았습니다.
나중에 방화벽을 활성화했지만 이 포트를 허용하는 것을 잊으면 다음과 같은 상황이 발생할 수 있습니다:
현재 SSH 세션은 끊어지지 않지만 새 창에서는 서버에 다시 연결할 수 없습니다.
따라서 첫 번째 방화벽 규칙은 SSH 포트를 허용해야 합니다.
6.2 필요한 포트 허용
이 글의 뒷부분에서는 세 개의 포트가 필요합니다:
1SSH 포트: VPS에 원격 로그인용280/tcp: HTTP 인증서 확인용3443/tcp: 최종 프록시 서비스용
VPS에서 실행합니다:
1ufw allow 43781/tcp2ufw allow 80/tcp3ufw allow 443/tcp
SSH 포트가 43781이 아닌 경우 자신의 포트로 바꾸십시오.
실행 후 규칙을 먼저 확인할 수 있습니다:
ufw status verbose
다음과 같이 표시되면:
Status: inactive
괜찮습니다. 규칙이 추가되었지만 방화벽이 아직 활성화되지 않았음을 의미합니다.
6.3 UFW 방화벽 활성화
SSH 포트가 허용된 것을 확인한 후 UFW를 활성화합니다:
ufw enable
시스템이 프롬프트를 표시합니다:
y를 입력합니다.
그런 다음 다시 확인합니다:
ufw status verbose
일반적으로 다음과 같이 표시되어야 합니다:
1Status: active23To Action From4-- ------ ----543781/tcp ALLOW Anywhere680/tcp ALLOW Anywhere7443/tcp ALLOW Anywhere843781/tcp (v6) ALLOW Anywhere (v6)980/tcp (v6) ALLOW Anywhere (v6)10443/tcp (v6) ALLOW Anywhere (v6)
IPv6가 필요하지 않은 경우 지금은 v6 규칙을 무시해도 됩니다. 여기서 중요한 것은 IPv4 SSH, 80, 443이 모두 ALLOW여야 한다는 것입니다.
6.4 새 터미널을 열어 SSH 테스트
방화벽을 활성화한 후 현재 SSH 창을 즉시 닫지 마십시오.
올바른 방법은 현재 창을 열어 두고 Mac에서 새 터미널 창을 열어 VPS에 다시 로그인하는 것입니다.
실행합니다:
ssh root@203.0.113.10 -p 43781
새 창이 정상적으로 로그인할 수 있으면 방화벽이 SSH를 차단하지 않은 것입니다.
모든 것이 정상임을 확인한 후 다음 단계를 계속 진행합니다.
새 창이 로그인할 수 없지만 이전 창이 아직 열려 있는 경우 즉시 확인할 수 있습니다:
ufw status verbose
SSH 포트를 허용하는 것을 잊었는지 확인합니다. 실제로 잘못 구성된 경우 UFW를 일시적으로 비활성화할 수 있습니다:
ufw disable
그런 다음 다시 구성합니다.
6.5 사전 설치 백업
방화벽이 정상임을 확인한 후 백업을 시작합니다.
이 단계의 목적은 v2ray-agent를 설치하기 전에 주요 상태를 저장하는 것입니다. 나중에 스크립트가 Nginx, 인증서 디렉터리, Xray 구성을 변경합니다. 설치가 실패하면 적어도 설치 전 상태를 알 수 있습니다.
실행합니다:
mkdir -p /root/backup-before-v2ray-agent
Nginx 구성 백업:
Let's Encrypt 인증서 디렉터리 백업:
SSH 구성 백업:

현재 포트 점유 기록:
ss -tulpn > /root/backup-before-v2ray-agent/ports-before.txt
현재 방화벽 상태 기록:
ufw status verbose > /root/backup-before-v2ray-agent/ufw-status.txt
마지막으로 백업 결과를 확인합니다:
ls -lah /root/backup-before-v2ray-agent
당시 제 출력은 다음과 비슷했습니다:
1total 28K2drwxr-xr-x 4 root root 4.0K May 2 08:02 .3drwx------ 6 root root 4.0K May 2 08:02 ..4drwxr-xr-x 9 root root 4.0K May 2 07:56 letsencrypt5drwxr-xr-x 8 root root 4.0K May 2 07:56 nginx6-rw-r--r-- 1 root root 1.1K May 2 08:02 ports-before.txt7-rw-r--r-- 1 root root 3.1K May 2 06:58 sshd_config8-rw-r--r-- 1 root root 600 May 2 08:02 ufw-status.txt
6.6 현재 포트 점유 확인
v2ray-agent를 설치하기 전에 80과 443이 이미 점유되어 있는지 확인하는 것이 좋습니다.
실행합니다:
출력이 없으면 현재 80 또는 443에서 수신 대기 중인 프로세스가 없는 것입니다.
Nginx가 이미 설치된 경우 Nginx가 80 또는 443에서 수신 대기 중인 것을 볼 수 있습니다. 나중에 v2ray-agent 스크립트가 일반적으로 Nginx 구성을 처리하지만, 설치 전 상태를 적어도 알아야 합니다.
7. v2ray-agent 설치 및 Xray + VLESS Vision 선택
서버 준비가 완료되었으면 공식적으로 서버 프로그램을 설치할 수 있습니다.
이번에 사용한 것은 다음과 같습니다:
1서버 스크립트: v2ray-agent2코어: Xray-core3프로토콜: VLESS + TCP + TLS + Vision4포트: 4435도메인: node.example.com6인증서: Let's Encrypt
7.1 설치 스크립트 다운로드 및 실행
VPS에서 실행합니다:
wget -P /root -N --no-check-certificate "https://raw.githubusercontent.com/mack-a/v2ray-agent/master/install.sh"; && chmod 700 /root/install.sh && /root/install.sh
이 명령은 세 가지 작업을 수행합니다:
1install.sh를 /root에 다운로드2install.sh에 실행 권한 추가3설치 스크립트 실행
실행했을 때 스크립트가 표시한 정보는 다음과 비슷했습니다:
1Author: mack-a2Current version: v3.5.143Github: https://github.com/mack-a/v2ray-agent4Description: Eight-in-one coexistence script
설치 스크립트가 실행된 후 기본 메뉴가 나타납니다:
11. Install22. Custom combination installation33. One-click no domain44. Hysteria 2 management55. REALITY management66. Tuic management77. User management88. Fake site management99. Certificate management1010. CDN node management11...
여기서 선택합니다:
Custom combination installation
이유는 우리가 명시적으로 선택하기를 원하기 때문입니다:
1Xray-core2VLESS + TLS_Vision + TCP
스크립트가 우리를 도메인 없는 경로나 다른 기본 경로로 이끌도록 하지 마십시오.
7.2 코어 선택: Xray-core
사용자 지정 조합 설치에 들어간 후 스크립트는 코어를 선택하라는 메시지를 표시합니다:
1Function 1/1: Select core installation231. Xray-core42. sing-box
여기서 선택합니다:
Xray-core
이유는 클래식 Xray + VLESS Vision 방식을 사용할 것이며, 호환성이 성숙하고 Clash Verge 및 Shadowrocket과 같은 클라이언트가 지원할 수 있기 때문입니다.
입력:
1
그런 다음 Enter를 누릅니다.
7.3 프로토콜 선택: VLESS + TLS Vision + TCP
다음으로 스크립트는 프로토콜 목록을 표시합니다. 당시 본 옵션은 다음과 비슷했습니다:
10. VLESS+TLS_Vision+TCP [Recommended]21. VLESS+TLS+WS [Recommended for CDN only]33. VMess+TLS+WS [Recommended for CDN only]44. Trojan+TLS [Not recommended]57. VLESS+Reality+uTLS+Vision [Recommended]612. VLESS+Reality+X_HTTP+TLS [CDN available]
여기서 선택합니다:
VLESS+TLS_Vision+TCP [Recommended]
입력:
0
그런 다음 Enter를 누릅니다.
7.4 기본 구성 요소 설치
프로토콜을 선택한 후 스크립트는 종속성 설치를 시작합니다.
본 과정은 다음과 비슷했습니다:
1Progress 1/12: Installing tools2---> Checking and installing updates3---> Installing unzip4---> Installing socat5---> Installing crontabs6---> Installing jq7---> Installing ping68---> Installing qrencode9---> Installing nginx10---> Installing acme.sh
나중에 사용될 여러 구성 요소가 여기에 설치됩니다:
1nginx: 가짜 사이트 및 로컬 포워딩 관련2acme.sh: TLS 인증서 신청3jq: 구성 처리4qrencode: QR 코드 생성5socat: 인증서 신청 중에 사용될 수 있음
이 단계는 새 머신에서 더 느릴 수 있습니다. 오랫동안 출력이 없으면 잠시 기다리십시오. 자주 중단하지 마십시오.
7.5 노드 도메인 입력
그런 다음 스크립트는 Nginx 및 인증서 초기화 프로세스를 시작하고 도메인을 입력하라는 메시지를 표시합니다:
Please enter the domain to be configured Example: www.v2ray-agent.com --->
도메인을 입력합니다. 예:
여기에는 루트 도메인이 아닌 전체 서브도메인을 입력해야 합니다.
7.6 포트 입력: 기본값 443 사용
도메인을 입력하면 스크립트에서 포트를 입력하라는 메시지가 표시됩니다.
포트를 입력하세요 [기본값: 443], 사용자 지정 포트 가능 [Enter 키를 누르면 기본값 사용]
여기서 바로 Enter 키를 눌러 기본값을 사용합니다.
443
제 스크립트에는 다음과 같이 표시되었습니다.
---> 포트: 443
방화벽에서 이미 허용했습니다.
443/tcp
따라서 여기서 바로 사용할 수 있습니다.
7.7 도메인 IP 확인 대기
포트가 확인되면 스크립트는 도메인 해석이 올바른지 확인합니다.
일반적으로 다음과 같은 내용이 표시됩니다.
1---> 도메인 IP 확인 통과2---> Nginx 기본 구성 삭제 중3---> Nginx가 성공적으로 시작되었습니다4---> Nginx가 성공적으로 종료되었습니다5---> 포트 443이 열려 있음 감지6---> 도메인 IP 확인 중7---> 현재 도메인 IP가 올바릅니다
이 작업이 실패하면 강제로 설치를 진행하지 마세요. 먼저 DNS 확인으로 돌아가십시오.
dig @1.1.1.1 +short A node.example.com
dig @8.8.8.8 +short A node.example.com
VPS IP가 반환되는지 확인하세요.
또한 Cloudflare에서 이 레코드가 회색 구름인지 확인하세요.
프록시 상태: DNS 전용
주황색 구름으로 설정된 경우 스크립트 감지 및 후속 연결에 문제가 발생할 수 있습니다.
7.8 TLS 인증서 신청
다음으로 인증서 신청 단계로 들어갑니다.
진행률 3/12: TLS 인증서 신청 중
스크립트가 질문합니다.
DNS API를 사용하여 인증서를 신청하시겠습니까 [NAT 지원]? [y/n]
여기서는 다음을 선택합니다.
n
이 VPS에는 공용 IPv4가 있고 포트 80과 443이 이미 허용되어 있으므로 DNS API를 사용하여 인증서를 신청할 필요가 없습니다.
그런 다음 스크립트에서 인증 기관을 선택하도록 합니다.
11. letsencrypt [기본값]22. zerossl33. buypass [DNS 신청 미지원]
여기서 바로 Enter 키를 눌러 기본값을 사용합니다.
letsencrypt
Let's Encrypt는 무료 인증서로 개인 사용에 충분합니다. 인증서 자체가 노드 이상을 유발하는 핵심 요소는 아닙니다. 실제로 보장해야 할 것은 다음과 같습니다.
올바른 도메인 해석
성공적인 인증서 신청
정상적인 갱신 작업
올바른 서버 구성
7.9 UUID 및 사용자 이름
나중에 스크립트에서 UUID를 입력하라는 메시지가 표시됩니다.
사용자 지정 UUID를 입력하세요 [필수 형식 준수], [Enter 키]를 누르면 무작위 UUID 생성
스크립트가 무작위로 생성하도록 바로 Enter 키를 누르는 것이 좋습니다.
그런 다음 사용자 이름을 입력하라는 메시지가 표시됩니다.
사용자 지정 사용자 이름을 입력하세요 [필수 형식 준수], [Enter 키]를 누르면 무작위 사용자 이름 생성
Enter 키를 눌러 무작위로 생성할 수도 있습니다. 식별하기 쉬운 이름을 입력할 수도 있지만, 실명, 전화번호, 이메일 또는 기타 개인 정보는 사용하지 마세요.
7.10 설치 후 계정 출력
설치가 완료되면 스크립트가 마지막 단계로 들어갑니다.
진행률 12/12: 계정
당시 제 출력은 다음과 같았습니다.
1VLESS TCP TLS_Vision [권장]2일반 형식 (VLESS+TCP+TLS_Vision)3vless://...4형식화된 일반 텍스트 (VLESS+TCP+TLS_Vision)5프로토콜 유형: VLESS6주소: node.example.com7포트: 4438사용자 ID: ...9보안: tls10client-fingerprint: chrome11전송 방식: tcp12flow: xtls-rprx-vision13계정 이름: ...14QR 코드 VLESS
이는 서버가 VLESS Vision 노드를 생성했음을 나타냅니다.
7.11 Xray 및 Nginx 상태 확인
설치 후 클라이언트로 바로 가져오지 마세요. 먼저 VPS에서 서비스 상태를 확인하세요.
1systemctl status xray --no-pager2systemctl status nginx --no-pager3ss -tulpn | grep -E '(:443|:80|xray|nginx)'
제가 확인한 주요 결과는 다음과 같습니다.
1xray.service active (running)2nginx.service active (running)3xray listening on public *:4434nginx listening on 127.0.0.1:31300 and 127.0.0.1:31302
이는 다음을 의미합니다.
공용 443 진입점은 Xray가接管하고, Nginx는 로컬 포트에서 가짜 사이트 또는 보조 서비스를 제공하며, 서비스가 정상적으로 시작되었습니다.
xray.service가 active (running) 상태가 아니면 먼저 로그를 확인해야 합니다. 클라이언트로 계속 가져오지 마세요.
다음을 실행할 수 있습니다.
journalctl -u xray --no-pager -n 80
8. 구독 링크 생성 및 Clash Verge 준비
이전 섹션의 설치 후 스크립트는 이미 단일 vless:// 노드 링크를 출력했습니다. 이 링크는 Shadowrocket과 같은 클라이언트에 직접 가져올 수 있습니다.
하지만 Mac에서 Clash Verge를 사용하는 경우 구독 링크를 생성하는 것이 더 좋습니다.
구독 링크의 장점은 다음과 같습니다.
1클라이언트가 구독을 한 번만 추가하면 됩니다.2노드 정보 변경 후 구독을 새로고침합니다.3여러 사용자 또는 여러 노드를 더 쉽게 관리할 수 있습니다.4Clash Verge가 ClashMeta 형식을 직접 사용할 수 있습니다.
실제로 구독을 생성할 때 v2ray-agent의 사용자 관리 기능을 사용했습니다.
1vasma2→ 7. 사용자 관리3→ 2. 구독 보기4→ ClashMeta 형식 선택
8.1 v2ray-agent 메뉴 다시 열기
설치 스크립트가 완료되면 자동으로 바로 가기 명령어가 생성됩니다.
vasma
VPS에서 다음을 실행합니다.
vasma
그러면 v2ray-agent 메인 메뉴가 다시 열립니다.
메뉴에서 다음을 볼 수 있습니다.
11. 설치22. 사용자 지정 조합 설치33. 원클릭 도메인 없음44. Hysteria 2 관리55. REALITY 관리66. Tuic 관리77. 사용자 관리88. 가짜 사이트 관리99. 인증서 관리1010. CDN 노드 관리11...
여기서 선택합니다.
사용자 관리
8.2 구독 보기로 이동
사용자 관리로 들어가면 다음과 같은 메뉴가 표시됩니다.
1기능 1/1: 계정 관리231. 계정 보기42. 구독 보기53. 다른 구독 관리64. 사용자 추가75. 사용자 삭제
여기서 선택합니다.
구독 보기
이 단계에서는 로컬 계정의 구독 콘텐츠를 다시 생성합니다.
스크립트는 다음과 같은 메시지도 표시합니다.
구독을 보면 로컬 계정의 구독이 다시 생성됩니다. md5 암호화 솔트 값을 수동으로 입력해야 합니다. 모르는 경우 임의의 값을 사용하세요. 이미 추가된 원격 구독의 콘텐츠에는 영향을 미치지 않습니다.
자신만 사용하는 경우 기본 임의 값을 사용하면 됩니다.
8.3 구독 포트 입력
스크립트가 다음을 요청합니다.
1구독 구성을 시작합니다. 구독 포트를 입력하세요.23사용자 지정 포트를 입력하세요 [필수 형식 준수], 포트는 중복될 수 없습니다. [Enter 키]를 누르면 무작위 포트가 생성됩니다.
여기에는 두 가지 선택 사항이 있습니다.
Enter 키를 바로 누름: 스크립트가 무작위 포트를 생성합니다.
사용자 지정 포트를 수동으로 입력: 기억하기 쉽지만 기존 포트와 충돌할 수 없습니다.
초보자는 Enter 키를 바로 눌러 스크립트가 무작위 포트를 생성하도록 하는 것이 좋습니다.
사용자 지정 포트를 선택하는 경우 다음을 추가로 확인해야 합니다.
포트가 점유되지 않음
방화벽에서 이 포트를 허용함
제공업체의 보안 그룹에서도 이 포트를 허용함
변수를 줄이기 위해 첫 번째 구성에서는 무작위 포트를 사용하는 것이 더 쉽습니다.
8.4 가짜 사이트 프롬프트
스크립트가 다음을 요청할 수 있습니다.
가짜 사이트 추가 시작
가짜 사이트 설치가 감지되었습니다. 다시 설치하시겠습니까 [y/n]
이전에 VLESS Vision을 설치할 때 가짜 사이트를 이미 구성한 경우 일반적으로 다음을 선택합니다.
n
다시 설치하지 않음을 의미합니다.
다시 설치하는 것이 불가능한 것은 아니지만 초보자 튜토리얼에서 변수를 추가할 필요는 없습니다. 현재 목표는 구독 링크를 생성하는 것이지 가짜 사이트를 재구성하는 것이 아닙니다.
8.5 솔트 값 선택 방법
나중에 스크립트에서 솔트 값을 입력하라는 메시지가 표시됩니다.
솔트 값을 입력하세요. [Enter 키]를 누르면 무작위 값 사용
여기서 바로 Enter 키를 누르세요.
솔트의 역할은 다음과 같이 간단히 이해할 수 있습니다.
구독 관련 콘텐츠를 생성하는 데 사용되는 임의의 값
개인 사용의 경우 수동으로 지정할 필요가 없습니다. 임의의 값이 실제로 더 안전하며 고정된 문자열 재사용을 방지합니다.
8.6 ClashMeta 형식 구독 선택
구독이 생성되면 스크립트는 여러 형식을 표시합니다.
실제로 다음을 볼 수 있습니다.
기본값
ClashMeta
sing-box
Mac에서 Clash Verge를 사용하는 경우 다음을 선택하는 것이 좋습니다.
ClashMeta
그 이유는 Clash Verge가 ClashMeta 구성에 대한 지원이 더 좋고 VLESS Vision, fingerprint, flow와 같은 필드도 ClashMeta 형식에 더 적합하기 때문입니다.
다른 클라이언트를 사용하는 경우 클라이언트 지원에 따라 선택할 수 있습니다.
Clash Verge: ClashMeta
sing-box: sing-box
Shadowrocket: 일반적으로 단일 vless:// 링크를 직접 가져올 수 있음
"기본값" 형식을 Clash Verge에 그대로 복사하지 마세요. 가능하면 ClashMeta를 사용하세요.
8.7 구독 링크 저장
스크립트가 구독 링크를 출력한 후 ClashMeta 구독 링크를 복사하여 먼저 안전한 로컬 위치에 저장하세요.
참고: 공개 저장소에 저장하지 말고, 기사에 게시하지 말고, 스크린샷에 전체 링크를 표시하지 마세요.
이유는 간단합니다. 다른 사람이 구독 링크를 얻으면 노드를 직접 사용하여 VPS 트래픽을 소비하고 노드가 남용될 수 있습니다.
9. Clash Verge에 구독 가져오기 및 테스트
서버가 이미 설치되었고 구독 링크가 생성되었습니다. 이제 Mac에서 클라이언트를 구성합니다.
9.1 구독 추가
Clash Verge를 열고 구성 페이지로 이동합니다. 버전에 따라 인터페이스 텍스트가 약간 다를 수 있으며 일반적으로 다음과 같이 호출됩니다.
프로필
또는:
구성
새 구독을 추가하려면 클릭하고 이전 단계에서 생성된 ClashMeta 구독 링크를 입력합니다.
일반적으로 다음을 입력해야 합니다.
이름: 사용자 지정, 예: 내 VPS
유형: 원격
URL: ClashMeta 구독 링크
이름에 전체 구독 링크를 넣지 마세요.
입력 후 저장한 다음 구독을 업데이트하려면 클릭합니다.
구독이 정상이면 Clash Verge가 노드 구성을 가져와 노드 목록에 방금 생성된 VLESS Vision 노드를 표시합니다.
9.2 노드 선택
구독이 성공적으로 업데이트되면 노드 선택 페이지로 이동합니다.
일반적으로 하나 이상의 정책 그룹이 표시됩니다. 예:
ProxyAutoGlobalNodeName
방금 생성된 노드를 선택합니다.
9.3 시스템 프록시 또는 TUN 켜기
Clash Verge에는 일반적으로 두 가지 일반적인 스위치가 있습니다.
시스템 프록시
TUN 모드
간단히 이해:
시스템 프록시: 시스템 프록시 설정을 따르는 대부분의 애플리케이션이 Clash를 통과하도록 함
TUN 모드: 더 낮은 수준에서 더 많은 트래픽을 처리하며 시스템 프록시를 따르지 않는 일부 애플리케이션도 포함
처음 테스트할 때는 다음을 켤 수 있습니다.
시스템 프록시
그런 다음 브라우저를 사용하여 테스트 웹사이트에 액세스합니다.
일부 애플리케이션이 시스템 프록시를 따르지 않는 경우 TUN을 켜는 것을 고려하세요.
9.4 종료 IP 테스트
브라우저를 열고 다음을 방문하세요.
프록시가 작동하는 경우 페이지에 표시된 IP는 VPS의 종료 IP여야 하며 로컬 광대역 IP 또는 이동 통신사 IP가 아니어야 합니다.
터미널에서 다음을 실행할 수도 있습니다.
curl https://ifconfig.me
Clash Verge의 시스템 프록시가 터미널에서 작동하지 않는 경우 브라우저 페이지 결과를 기준으로 사용하세요.
9.5 외부 웹사이트 및 동영상 테스트
종료 IP가 정상이면 계속해서 여러 웹사이트를 테스트할 수 있습니다.
1Google2YouTube3GitHub4Telegram5실제로 액세스해야 하는 웹사이트
테스트할 때 홈페이지가 열리는지만 확인하지 말고 다음도 확인하세요.
웹페이지가 정상적으로 로드되는지 여부
1웹페이지가 정상적으로 로드되는지 여부2동영상이 재생되는지 여부3몇 분 동안 안정적인지 여부4연결이 자주 끊기는지 여부5속도가 예상에 부합하는지 여부
YouTube는 열리지만 동영상이 매우 버벅거리는 경우 구성 오류가 아닐 수 있습니다. 다음과 같은 이유일 수 있습니다.
1평균 VPS 회선 품질2피크 시간 혼잡3월별 트래픽 제한4클라이언트 규칙이 올바르게 설정되지 않음
특정 웹사이트에서 오류가 보고되지만 다른 웹사이트는 정상인 경우 서버를 다시 설치하지 마세요. 다음 아이디어에 따라 판단할 수 있습니다.
1하나의 웹사이트만 비정상: 규칙, DNS 및 대상 사이트 제한을 우선 확인2모든 웹사이트가 비정상: 노드 연결, 구독 및 서버 상태를 우선 확인3모바일은 액세스 가능하지만 Mac은 불가능: Clash Verge / TUN / Fake-IP를 우선 확인4VPS는 curl로 액세스 가능하지만 클라이언트는 불가능: 클라이언트 구성을 우선 확인
마지막 말
위의 모든 단계가 완료되면 축하합니다. 이제 나만의 프록시를 가지게 되었습니다!
다른 사람과 공유하지 않도록 각별히 주의하고, 특히 금전 거래에 관여하지 마세요. 매우 위험할 수 있습니다~
또한 이 튜토리얼은 시작을 위한 것임을 다시 한 번 강조합니다. 많은 전문가들이 추가 구성을 더 수행하거나 다른 프로토콜을 사용합니다. 직접 탐색해 보세요!
이 글은 YouMind에 의해 Markdown에서 자동 변환 및 포맷되었습니다.





