v2rayN 코어를 시작할 때 수신에 실패하거나, 노드를 바꾼 직후 프로그램이 종료되거나, 앱에서 로컬 프록시에 연결할 수 없는 경우에 적용할 수 있습니다. 먼저 로그에서 실패한 주소와 포트를 확인한 뒤 Windows 명령어로 수신 프로세스를 찾습니다. 프로세스 용도에 따라 중복 실행을 종료하거나 포트를 변경하고, 시스템 프록시와 앱 설정도 함께 업데이트합니다. 이 글은 Windows를 중심으로 설명하고 macOS와 Linux 명령어도 소개합니다.
먼저 수신 실패인지 노드 연결 시간 초과인지 확인
로컬 수신 포트는 브라우저나 터미널 같은 앱이 트래픽을 코어로 전달하는 입구이며, 원격 노드의 서버 포트와는 다릅니다. 코어가 시작되는 단계에서 로그에 bind, listen tcp 또는 “주소가 이미 사용 중입니다”라는 오류가 표시되면 먼저 로컬 수신 문제를 해결해야 합니다. 이때 구독을 새로 고치거나 VMess 또는 VLESS 노드 설정을 바꿔도 보통 포트 충돌은 해결되지 않습니다.
v2rayN 메인 화면의 로그 영역을 열고 코어 시작부터 실패까지의 기록을 모두 확인하세요. 오류의 바깥쪽에는 “시작 실패” 같은 설명이 붙을 수 있지만, 실제 원인을 찾으려면 가장 안쪽에 있는 오류 행을 확인해야 합니다. 보통 해당 행에 수신 프로토콜, IP 주소, 포트와 시스템 오류가 표시됩니다. 아래는 발생할 수 있는 오류 예시이며, 모든 버전에서 로그 전체가 똑같이 표시되는 것은 아닙니다.
bind: Only one usage of each socket address (protocol/network address/port) is normally permitted.
원인: Windows에서 흔히 나타나는 주소 사용 중 오류로, 소켓 오류 10048에 해당합니다. 다른 수신 프로세스가 이미 해당 주소와 포트를 사용 중일 수 있습니다.
해결: 로그에 나온 포트의 수신 PID를 조회하고 프로세스가 무엇인지 확인한 다음, 중복 실행을 종료하거나 현재 인스턴스에 사용 가능한 포트를 지정하세요.
bind: An attempt was made to access a socket in a way forbidden by its access permissions.
원인: Windows 소켓 오류 10013은 제외된 포트 범위, 독점 바인딩 또는 보안 정책과 관련될 수 있습니다. 일반적인 수신 프로세스를 찾을 수 없는 경우도 있습니다.
해결: 먼저 수신 기록을 확인한 다음 시스템의 제외 포트 범위를 조회하세요. 관리자 권한으로 반복 실행하는 것을 근본적인 해결책으로 삼지 마세요.
bind: address already in use
원인: macOS와 Linux에서 흔히 볼 수 있는 주소 사용 중 오류입니다. 현재 설정으로는 지정한 수신 주소에 바인딩할 수 없다는 뜻입니다.
해결: lsof 또는 ss로 수신 프로세스를 찾고 v2rayN이 중복 실행 중인지 확인하세요.
포트와 버전별 설정 확인
가이드에 나온 포트 번호만 보고 충돌 여부를 판단하지 마세요. v2rayN 6.x의 클래식 Windows 화면에서는 SOCKS 포트 10808, HTTP 포트 10809를 기본값으로 사용하는 경우가 많습니다. 일부 최신 버전이나 코어 설정에서는 HTTP와 SOCKS 요청을 하나의 혼합 수신 포트로 처리할 수 있습니다. 업그레이드하거나 설정을 옮긴 뒤에도 기존 포트가 유지될 수 있으므로, 이 글에서는 두 번호를 점검 대상으로 다루며 모든 버전의 공통 기본값으로 보지는 않습니다.
| 점검 항목 | 예시 또는 범위 | 판단 기준 |
|---|---|---|
| 기존 분리 수신 | SOCKS 10808、HTTP 10809 | v2rayN 6.x에서 흔히 사용하는 기본 설정입니다. 현재 설정을 기준으로 확인하세요. |
| 혼합 수신 | 하나의 포트에서 두 종류의 프록시 요청을 처리 | 화면의 수신 유형과 실제 코어 로그를 확인하세요. 포트 번호만으로 프로토콜을 판단하지 마세요. |
| 루프백 주소 | 127.0.0.1、::1 | 각각 IPv4와 IPv6 루프백 주소이며, 오류에 표시된 주소와 대조해야 합니다. |
| 모든 인터페이스 | 0.0.0.0、:: | 바인딩 범위가 넓어 같은 포트의 특정 주소 수신과 충돌할 수 있습니다. |
“LAN 연결 허용”을 끈다고 포트가 해제되는 것은 아닙니다. 주로 수신 범위가 달라집니다. 이 컴퓨터에서만 사용할 경우 루프백 주소로 수신하는 것이 좋습니다. 충돌을 피하려고 주소를 모든 인터페이스로 변경하거나 LAN 수신을 추가로 활성화해 시험하지 마세요.
Windows: 포트로 PID와 프로그램 경로 찾기
PowerShell에서 아래 명령을 실행하세요. 이 명령은 수신 정보만 조회하며 프로세스를 종료하지 않습니다. 결과가 없다면 현재 포트에서 수신 중인 프로세스가 없거나, 코어가 시작에 실패한 뒤 이미 종료됐을 수 있습니다. 권한 오류가 발생하면 관리자 터미널에서 다시 조회할 수 있지만, 조회 권한 문제와 코어를 관리자 권한으로 실행해야 하는지는 별개입니다.
# TCP 수신 정보를 조회해 주소, 포트, 프로세스 ID 표시
Get-NetTCPConnection -State Listen -ErrorAction SilentlyContinue |
Where-Object { $_.LocalPort -in 10808,10809 } |
Select-Object LocalAddress,LocalPort,OwningProcess
# 해당 수신 프로세스의 이름, 실행 파일 경로, 명령줄 확인
$ownerIds = @(Get-NetTCPConnection -State Listen -ErrorAction SilentlyContinue |
Where-Object { $_.LocalPort -in 10808,10809 } |
Select-Object -ExpandProperty OwningProcess -Unique)
Get-CimInstance Win32_Process |
Where-Object { $_.ProcessId -in $ownerIds } |
Select-Object ProcessId,Name,ExecutablePath,CommandLine
명령 프롬프트에서 Windows 기본 제공 도구인 netstat을 사용할 수도 있습니다. 아래 식은 로컬 포트만 찾으므로 원격 10808에 연결된 기록을 로컬 수신으로 잘못 판단하지 않게 해줍니다. 상태 열도 확인해야 합니다. LISTENING일 때만 TCP가 수신 중이라는 뜻입니다.
netstat -ano -p tcp | findstr /R /C:":10808 " /C:":10809 "
- PID 확인: 출력의 마지막 열에 프로세스 ID가 표시됩니다. “작업 관리자” → “세부 정보”에서 PID로 프로그램을 찾으세요. 이름만 보고 판단하지 마세요.
- 경로 확인: 이름이 같은 코어라도 서로 다른 위치의 v2rayN에서 실행됐을 수 있습니다. 실행 파일 경로와 명령줄을 확인해 어느 클라이언트 폴더에 속하는지 파악하세요.
- 연결 상태 구분:
TIME_WAIT는 프록시 입구를 제공하는 수신 프로세스가 아닙니다. 이 상태만으로 특정 앱이 포트를 점유했다고 단정할 수 없습니다. - 프로토콜 확인: TCP와 UDP는 별도의 포트 공간을 사용합니다. 로그에 UDP 바인딩 실패가 명시된 경우에만
Get-NetUDPEndpoint로 해당 포트를 조회하세요.
판단 기준: 먼저 프로그램을 확인한 뒤 종료 여부 결정
두 포트를 예전 클라이언트 폴더의 코어 하나가 수신 중이라면 해당 클라이언트를 종료하는 것이 우선입니다. 점유 프로세스가 계속 사용해야 하는 서비스라면 현재 v2rayN의 포트를 변경하는 편이 낫습니다. 프로세스 이름에 xray나 v2ray가 들어 있다는 이유만으로 강제 종료하지 마세요.
포트를 해제하거나 설정에서 포트 변경
한 컴퓨터에서 v2rayN을 두 개 실행하거나, 창을 닫은 뒤에도 트레이에서 계속 실행 중이거나, 이전 코어 프로세스가 메인 프로그램 종료 후에도 남아 있으면 시작 직후 포트가 점유된 것처럼 보일 수 있습니다. 먼저 현재 설정을 저장한 뒤 해결 방법 하나를 선택하세요. 노드 주소, DNS, 라우팅과 수신 포트를 한꺼번에 바꾸면 어떤 변경이 효과가 있었는지 파악하기 어렵습니다.
-
중복 실행 종료
작업 표시줄 트레이를 확인하고 사용하지 않는 v2rayN 인스턴스에서 “종료”를 선택하세요. 메인 창을 닫으면 트레이로 최소화되기만 할 수 있습니다. 종료한 뒤 포트를 다시 조회해 수신 기록이 실제로 사라졌는지 확인하세요.
-
남은 프로세스 확인
메인 프로그램을 종료했는데도 포트가 점유된 상태라면 “작업 관리자” → “세부 정보”에서 앞서 조회한 PID, 프로그램 경로와 명령줄을 확인하세요. 더 이상 필요하지 않다고 확인된 코어 프로세스만 “작업 끝내기”로 종료하세요. 시스템 프로세스나 정체를 모르는 서비스는 종료하지 마세요.
-
설정 열기
클래식 메뉴를 사용하는 v2rayN에서는 “설정” → “매개변수 설정”으로 이동해 로컬 수신 관련 항목을 찾으세요. 클래식 6.x 화면에서는 보통 “Core: 기본 설정” 페이지에서 “로컬 수신 포트”를 확인합니다. 다른 화면에서는 SOCKS, HTTP 또는 혼합 수신으로 표시된 실제 항목을 기준으로 확인하세요.
-
사용 가능한 포트 선택
먼저 조회 명령의 포트 번호를
11808,11809로 바꿔 후보 포트를 확인할 수 있습니다. 분리 수신 설정에서는 사용할 각 입구의 포트가 비어 있는지 확인하세요. HTTP 포트가 기본 포트에 1을 더해 자동으로 정해지는 경우 인접 포트도 확인해야 합니다. 두 포트를 각각 수정할 수 있다고 가정하지 마세요. -
저장 후 재시작
설정을 저장해 코어를 다시 불러오세요. 자동으로 재시작되지 않으면 v2rayN을 정상 종료한 뒤 다시 실행하세요. 로그와 TCP 수신 목록을 다시 확인해 새 포트를 예상한 폴더의 코어가 사용 중인지 확인합니다.
점유 프로세스를 찾지 못했는데도 바인딩에 실패하는 경우
먼저 로그에 표시된 주소와 포트를 대조해 다시 조회하세요. 로그의 포트가 다른 번호라면 10808/10809만 조회해서는 찾을 수 없습니다. 실패 순간 다른 프로그램도 종료됐다면 나중에 조회했을 때 결과가 없을 수 있습니다. 포트 번호가 맞는지 확인한 뒤 Windows의 오류 10013 같은 권한 관련 오류라면 제외 포트 범위도 확인하세요.
netsh interface ipv4 show excludedportrange protocol=tcp
netsh interface ipv6 show excludedportrange protocol=tcp
출력에는 시작 포트와 끝 포트가 표시됩니다. 대상 포트가 해당 범위 안에 있을 때만 이번 바인딩 실패와 관련이 있습니다. 목록이 길다는 이유만으로 시스템 오류라고 단정하지 마세요. 시스템 네트워크 구성 요소나 가상화 기능이 이러한 범위를 관리할 수 있습니다. 범위를 직접 삭제하거나 시스템 서비스를 중지하면 다른 네트워크 기능에 영향을 줄 수 있으므로, 해당 범위에 포함되지 않고 수신 중인 프로세스도 없는 포트로 변경하는 것이 우선입니다.
- 실제 주소 확인:
127.0.0.1:10808과[::1]:10808은 서로 다른 수신 주소입니다. 와일드카드 주소에 바인딩하면 다른 주소에도 영향을 줄 수 있으므로 점검할 때 주소 열 전체를 확인하세요. - 보안 기록 확인: 사용 가능한 것으로 확인된 여러 포트에서도 실패하면 시스템이나 보안 소프트웨어의 차단 기록을 확인하세요. 보호 기능을 바로 끄거나 광범위한 인바운드 허용 규칙을 추가하지 마세요.
- 로컬과 원격 구분: 방화벽이 원격 연결을 차단하면 보통 연결 실패나 시간 초과가 발생합니다. 웹페이지가 열리지 않는다는 이유만으로 로컬 포트 충돌이라고 단정할 수 없습니다.
macOS 및 Linux에서 동일하게 조회하기
v2rayN 데스크톱 버전을 사용할 때는 현재 설정에서 포트를 확인한 뒤 아래 명령의 숫자를 바꾸세요. macOS에서는 lsof, Linux에서는 ss를 사용할 수 있습니다. 프로세스 경로와 권한 정보를 확인하려면 관리자 권한이 필요할 수 있습니다. 점유 프로세스를 종료하기 전에는 해당 앱을 정상적으로 종료하세요.
# macOS: 예시 포트 두 개를 각각 확인
lsof -nP -iTCP:10808 -sTCP:LISTEN
lsof -nP -iTCP:10809 -sTCP:LISTEN
# Linux: 수신 소켓 및 프로세스 확인
sudo ss -ltnp '( sport = :10808 or sport = :10809 )'
변경 후 시스템 프록시와 앱 설정도 업데이트
포트 변경은 수신 측 문제만 해결합니다. 브라우저, 터미널이나 개발 도구가 여전히 이전 포트에 연결하면 “코어는 시작됐지만 앱에서 인터넷에 연결할 수 없는” 상황이 생길 수 있습니다. v2rayN에서 “시스템 프록시” → “시스템 프록시 자동 설정”을 다시 적용하세요. 현재 화면에 해당 메뉴가 없다면 이에 해당하는 시스템 프록시 자동 설정 항목을 사용하고, 시스템에 기록된 실제 주소도 확인하세요.
| 사용 방법 | 업데이트할 설정 위치 | 확인 방법 |
|---|---|---|
| Windows 시스템 프록시 | “설정” → “네트워크 및 인터넷” → “프록시”의 수동 프록시 | 주소와 포트가 새 HTTP 또는 혼합 수신 입구를 가리키는지 확인 |
| 앱에서 수동 프록시 설정 | 앱 자체의 네트워크 또는 프록시 설정 | SOCKS5 설정을 HTTP만 지원하는 이전 수신 항목에 잘못 입력하지 마세요. |
| 터미널 환경 변수 | HTTP_PROXY、HTTPS_PROXY、ALL_PROXY | 현재 터미널 세션과 시작 설정에 이전 포트가 남아 있는지 확인 |
| 백그라운드 도구 또는 서비스 | 도구 설정 파일 및 서비스 시작 매개변수 | 변경 후 해당 도구의 안내에 따라 다시 불러오거나 재시작 |
PowerShell에서 새 TCP 입구를 테스트할 수 있습니다. 아래 예시는 11808을 실제로 활성화한 경우를 가정합니다. TcpTestSucceeded : True는 TCP 연결이 성공했다는 뜻일 뿐, 수신 프로세스가 올바른지, 프록시 프로토콜이 작동하는지 또는 원격 노드에 연결할 수 있는지는 확인해 주지 않습니다. PID 조회 결과와 실제 요청을 함께 확인하세요.
Test-NetConnection -ComputerName 127.0.0.1 -Port 11808
확인: 수신 복구와 노드 연결은 따로 점검
먼저 바인딩 오류가 없는지, 포트를 올바른 프로세스가 사용 중인지, 앱이 새 입구에 연결하는지 확인한 뒤 정상 작동이 확인된 대상 페이지로 프록시 요청을 테스트하세요. 이 과정에서 원격 연결 시간 초과가 발생하면 노드 주소, 전송 설정과 서버 상태를 점검해야 합니다. 로컬 포트를 계속 바꾸지 마세요.
포트 충돌 자주 묻는 질문
컴퓨터를 다시 시작하면 되다가 잠시 후 다시 충돌하는 이유는 무엇인가요?
다른 v2rayN이 시작 프로그램에 등록돼 있는지, 다른 프록시 서비스가 나중에 실행되는지 확인하세요. 충돌 전후의 포트 PID와 프로그램 경로를 각각 기록한 뒤, 중복 인스턴스의 자동 시작을 끄거나 동시에 실행해야 하는 인스턴스마다 서로 다른 포트를 지정하세요. 재부팅은 프로세스를 일시적으로 정리할 뿐 설정 충돌을 해결하지 않습니다.
10808을 바꿨는데 로그에는 왜 10809가 사용 중이라고 표시되나요?
현재 설정에 별도의 HTTP 입구가 남아 있거나 기본 포트에서 인접 포트가 자동으로 계산될 수 있습니다. “설정” → “매개변수 설정”으로 돌아가 활성화된 모든 수신 항목을 확인하고 새 로그에 표시된 전체 주소를 기준으로 판단하세요. 클라이언트에서 저장하지 않고 파일만 수정했다면 설정 파일이 다시 생성됐을 수도 있습니다.
로컬 포트를 노드의 443으로 변경해도 되나요?
로컬 입구와 원격 노드 포트는 같아야 할 이유가 없습니다. 충돌을 피하려고 로컬 수신을 443으로 바꿀 필요는 없으며, 다른 서비스와 충돌하거나 권한 제한에 걸릴 수 있습니다. 노드의 기존 서버 포트는 그대로 두고 매개변수 설정에서 로컬 입구만 변경한 다음 앱 설정도 업데이트하세요.
포트를 바꾼 뒤 브라우저는 되는데 터미널은 계속 이전 포트에 연결하는 이유가 무엇인가요?
브라우저는 시스템 프록시를 사용하지만 터미널 도구는 환경 변수를 읽을 수 있습니다. PowerShell에서 Get-ChildItem Env:*PROXY*를 실행해 현재 세션을 확인한 다음 터미널 시작 스크립트와 도구 자체의 프록시 설정도 점검하세요. 환경 변수를 영구적으로 변경했다면 이미 열려 있는 터미널을 다시 열어야 새 값을 읽는 경우가 많습니다.