v2rayN 포트 충돌 해결: 충돌 프로세스 찾기 및 로컬 수신 포트 변경

v2rayN 시작 오류로 로컬 포트 충돌을 확인하고, 시스템 명령으로 10808/10809를 사용 중인 프로세스를 찾은 뒤 설정에서 빈 포트로 변경하세요.

핵심 내용

Windows에서 v2rayN의 코어가 시작되지 않고 로그에 bind 또는 address already in use가 표시될 때 참고하세요. 먼저 포트 충돌과 권한 제한을 구분한 다음 netstat 또는 PowerShell로 수신 프로세스를 찾습니다. 프로세스 용도를 확인한 후 중복 실행을 종료하거나 로컬 수신 포트를 변경하고, 시스템 프록시와 앱 설정을 새 포트에 맞춘 뒤 연결을 확인하세요.

로그부터 확인: 로컬 수신에 실패했나요?

v2rayN 창이 열려도 프록시 코어가 정상적으로 시작되었다는 뜻은 아닙니다. 화면은 설정을 관리하고, 코어는 로컬 연결을 받아 원격 서버에 연결합니다. 로그에 127.0.0.1:10808 수신에 실패했다고 표시된다면 문제는 로컬 진입점에 있습니다. 이때 구독을 반복해서 업데이트하거나 VMess 또는 VLESS 노드를 바꿔도 수신 실패는 대개 해결되지 않습니다.

먼저 메인 창의 로그 영역에서 오류가 적힌 전체 행을 확인하고 주소, 포트, 끝부분의 시스템 오류를 기록하세요. 코어와 시스템 언어, 버전에 따라 문구는 다를 수 있습니다. 아래는 실제 오류에서 자주 보이는 핵심 문구이며, 전체 행이 똑같이 표시될 필요는 없습니다.

bind: Only one usage of each socket address (protocol/network address/port) is normally permitted.

원인 및 해결: 같은 수신 주소와 포트를 다른 프로세스가 사용 중입니다. 해당 PID를 찾고 다른 v2rayN 인스턴스인지 로컬 서비스인지 확인한 뒤, 프로세스를 종료할지 포트를 변경할지 결정하세요.

bind: address already in use

원인 및 해결: 대상 소켓이 이미 사용 중입니다. 로그에 표시된 실제 포트를 조회하세요. 평소 사용하던 10808만 확인해서는 안 됩니다.

bind: An attempt was made to access a socket in a way forbidden by its access permissions.

원인 및 해결: 시스템이 바인딩을 거부했습니다. 포트 제외 범위나 보안 정책이 원인일 수 있으며, 이미 다른 프로세스가 수신 중인 상황과는 다릅니다. PID가 확인되지 않으면 시스템 예약 포트를 추가로 확인하세요.

포트 확인: 10808과 10809를 항상 함께 사용하는 것은 아닙니다

일부 구버전이나 이전 설정에서는 10808을 SOCKS 진입점, 10809를 HTTP 진입점으로 사용합니다. 다른 버전은 하나의 혼합 수신 포트에서 HTTP와 SOCKS 요청을 모두 처리합니다. 현재 「설정」→「매개변수 설정」에 표시된 항목과 시작 로그를 기준으로 판단하세요. 안내 글을 그대로 따라 원래 없던 진입점을 추가하지 마세요.

10808
일반적인 로컬 진입점: 현재 설정을 기준으로 확인
10809
일부 이전 설정에서 사용하는 HTTP 진입점
11808
이 문서에서 예시로 드는 후보 포트: 사용 전 점유 여부 확인

로컬 수신 포트와 서버 포트는 서로 다른 설정입니다. 노드 편집 창의 「포트」는 원격 서버 연결에 사용하는 값이므로, 이를 바꿔도 로컬 10808 충돌은 해결되지 않습니다. 구독에서 제공한 서버 주소, 사용자 ID, 전송 방식, TLS 설정도 그대로 유지하세요.

판단 기준: 충돌이 발생한 로컬 진입점만 변경

로그에 10808이 표시되면 먼저 10808의 수신 프로세스를 찾으세요. 현재 설정에서 독립 HTTP 진입점을 실제로 사용 중일 때만 10809도 확인하면 됩니다. 노드의 원격 포트를 바꾸면 다른 연결 문제가 생길 수 있습니다.

프로세스 찾기: PID로 수신 프로세스 확인

Windows에서 「터미널」 또는 「명령 프롬프트」를 열고 아래 명령 두 개를 실행하세요. 일반적으로 조회에 관리자 권한은 필요하지 않습니다. 프로세스 경로를 확인할 수 없는 경우에만 관리자 권한으로 터미널을 열어 조회하세요. 명령은 네트워크 상태를 읽기만 하며 프로세스를 종료하지 않습니다.

netstat -ano -p tcp | findstr ":10808"
netstat -ano -p tcp | findstr ":10809"

로컬 주소 열의 끝에 대상 포트가 있는지, 상태가 LISTENING인지 확인하세요. 예를 들면 127.0.0.1:10808, 0.0.0.0:10808 또는 [::]:10808입니다. 원격 주소에 포함된 10808이나 상태가 TIME_WAIT인 이전 연결을 현재 수신 프로세스로 착각하지 마세요.

마지막 열에 PID가 표시됩니다. 아래는 형식 예시이며 실제 기기에서 확인한 결과가 아닙니다. 6420은 프로세스 이름을 추가로 조회하는 방법을 설명하기 위한 값일 뿐입니다. 실제 작업에서는 화면에 표시된 PID로 바꿔 입력하세요.

TCP    127.0.0.1:10808    0.0.0.0:0    LISTENING    6420

tasklist /FI "PID eq 6420"

PowerShell로 포트 정확히 필터링

행마다 직접 살펴보기 어렵다면 PowerShell에서 로컬 포트와 수신 상태를 기준으로 필터링할 수 있습니다. 결과가 없으면 조회 시점에 일치하는 TCP 수신 항목이 없다는 뜻입니다. 포트 바인딩이 반드시 성공한다는 뜻은 아니며, 프로세스가 반복적으로 시작되는 상황도 배제할 수 없습니다.

Get-NetTCPConnection -State Listen -LocalPort 10808,10809 -ErrorAction SilentlyContinue |
  Select-Object LocalAddress,LocalPort,OwningProcess

Get-Process -Id 6420 | Select-Object Id,ProcessName,Path

충돌 해결: 중복 실행 종료 또는 로컬 포트 변경

점유 프로세스가 중복 실행된 클라이언트라면 시스템 트레이 아이콘을 마우스 오른쪽 버튼으로 클릭하고 「종료」를 선택하세요. 창 오른쪽 위의 닫기 버튼은 창만 숨길 수 있어 수신 포트가 계속 열려 있을 수 있습니다. 종료한 뒤 다시 조회해 기존 수신 항목이 사라졌는지 확인하고, 사용할 v2rayN 인스턴스만 실행하세요.

  1. 현재 값 기록: 「설정」→「매개변수 설정」을 열고 로컬 수신 관련 설정을 찾으세요. 버전에 따라 「로컬 수신 포트」 또는 「로컬 혼합 수신 포트」 등으로 표시될 수 있습니다. 포트와 수신 주소, 독립 HTTP 진입점이 있는지 기록하세요.
  2. 후보 포트 확인: 아래 명령으로 11808을 확인하세요. 두 번째 독립 진입점이 필요한 경우에만 11809도 확인하면 됩니다. 수신 항목이 없는지 확인하는 것은 첫 단계일 뿐이며, 설정을 저장한 뒤 시작이 성공하는지도 확인해야 합니다.
  3. 로컬 진입점 변경: 충돌이 발생한 로컬 수신 포트를 11808로 변경하세요. 화면에 독립 HTTP 포트가 명시되어 있고 이 진입점도 충돌한다면 11809처럼 비어 있는 다른 포트로 설정할 수 있습니다. 혼합 포트 설정이라면 두 번째 항목을 그대로 추가할 필요가 없습니다.
  4. 저장 후 재시작: 설정을 저장해 다시 불러오세요. 로그에 새로운 시작 기록이 나타나지 않으면 v2rayN을 종료하고 다시 실행한 뒤 새 포트의 수신 상태를 확인하세요.
  5. 수신 범위 유지: 이 기기에서만 사용할 경우 루프백 주소를 유지하세요. 포트 점유 문제를 해결하려고 「LAN 연결 허용」을 켜지 마세요. 수신 범위를 넓혀도 포트 충돌은 해결되지 않습니다.
Get-NetTCPConnection -State Listen -LocalPort 11808,11809 -ErrorAction SilentlyContinue |
  Select-Object LocalAddress,LocalPort,OwningProcess

11808과 11809는 이해를 돕기 위한 후보 값일 뿐, 고정된 안전 포트가 아닙니다. 이미 다른 서비스가 사용 중이라면 점유되지 않았고 시스템 제외 범위에도 포함되지 않은 다른 높은 포트 번호를 선택하세요. 포트 충돌과 라우팅 분기는 서로 다른 문제입니다. 해결 과정에서 변수를 늘리지 않도록 GeoSite 규칙, DNS, TUN 모드는 함께 변경할 필요가 없습니다.

수신 프로세스가 없을 때: Windows 포트 제외 범위 확인

netstat에서 수신 프로세스가 확인되지 않는데 권한 관련 bind 오류가 계속 로그에 표시되면 관리자 터미널에서 Windows TCP 제외 범위를 확인할 수 있습니다. 가상화, 컨테이너, 시스템 네트워크 구성 요소가 포트를 예약할 수 있으며, 예약 포트가 눈에 보이는 수신 PID와 연결되지 않을 수도 있습니다.

netsh interface ipv4 show excludedportrange protocol=tcp
netsh interface ipv6 show excludedportrange protocol=tcp

결과에는 시작 포트와 끝 포트가 표시되며 양 끝을 모두 포함합니다. 예를 들어 한 행에 11700부터 11799까지라고 표시되면 11750도 범위에 포함됩니다. 이는 표를 읽는 방법을 보여주는 예시이며, 시스템이 실제로 이 범위를 예약한다는 뜻은 아닙니다. 로그에 표시된 실제 수신 주소를 기준으로 해당 주소 계열의 결과를 확인하세요.

수정 확인: 시스템 프록시와 수동 프록시 설정 동기화

새 포트에서 수신이 성공한 뒤에는 프록시를 사용하는 앱도 새 진입점을 가리키도록 설정해야 합니다. 코어가 복구되어도 브라우저가 이전 10808에 연결하면 페이지가 열리지 않을 수 있습니다. 먼저 v2rayN 하단의 「시스템 프록시」 메뉴에서 「시스템 프록시 해제」를 선택한 다음 「시스템 프록시 자동 설정」을 선택하세요. 그러면 클라이언트가 현재 설정에 맞는 프록시 주소를 다시 기록합니다.

혼합 진입점 127.0.0.1:11808을 예로 들어 Windows 터미널에서 HTTP 프록시 요청을 보낼 수 있습니다. 일부 PowerShell 환경에서는 curl이 다른 명령으로 해석될 수 있으므로 여기서는 curl.exe를 사용합니다. 독립 HTTP 진입점을 설정했다면 명령의 포트를 해당 진입점의 실제 값으로 바꾸세요.

curl.exe --proxy http://127.0.0.1:11808 --connect-timeout 10 --max-time 20 -I https://example.com/

명령에서 10초는 연결 시간 제한, 20초는 전체 요청 시간 제한입니다. 속도 측정 결과가 아닙니다. 최종 대상에서 HTTP 응답을 받으면 해당 요청의 로컬 프록시 진입점과 이후 연결 경로가 작동한다는 뜻입니다. 프록시 터널이 열렸다는 안내만으로는 대상 웹페이지의 응답까지 확인할 수 없습니다. 한 번 성공해도 모든 앱이 시스템 프록시를 사용한다고 볼 수는 없습니다.

  1. 수신 확인: 새 포트에 LISTENING 항목이 있는지, PID가 현재 사용하는 클라이언트 코어에 속하는지 확인하세요.
  2. 로그 확인: 기존 bind 오류가 더 이상 표시되지 않는지 확인하세요. 원격 연결 시간 초과가 나타나면 로컬 포트를 계속 바꾸지 말고 노드 연결 상태를 점검하세요.
  3. 앱 설정 확인: 브라우저 확장 프로그램, 개발 도구, 터미널 환경 변수, 기타 수동 프록시 설정은 시스템 프록시를 바꿔도 자동으로 업데이트되지 않을 수 있습니다. 각 항목을 새 주소로 변경하세요.
  4. 재시작 결과 확인: 종료 후 다시 시작해 포트 변경 사항이 저장되었는지 확인하고, 시스템 시작 항목이 다른 클라이언트 인스턴스를 실행하지 않는지도 살펴보세요.

자주 묻는 질문: 포트를 바꿔도 계속 실패하는 경우

창을 닫았는데도 10808이 계속 수신 중인 이유는 무엇인가요?

먼저 시스템 트레이에 v2rayN 아이콘이 남아 있는지 확인하세요. 창을 닫아도 트레이로 최소화되었을 수 있으니 아이콘을 마우스 오른쪽 버튼으로 클릭하고 「종료」를 선택하세요. 그런 다음 PID를 다시 조회하세요. 수신 항목이 남아 있다면 다른 디렉터리의 인스턴스나 잔류 코어가 있는지 확인하고, 소속을 확인한 프로세스만 처리하세요.

10809 조회 결과가 없는데 설정이 잘못된 건가요?

꼭 그렇지는 않습니다. 현재 버전에서 혼합 진입점 하나만 설정했다면 10809는 원래 수신하지 않을 수 있습니다. 「설정」→「매개변수 설정」에서 진입점 유형을 확인하세요. HTTP와 SOCKS 요청 모두 이전 안내의 기본값이 아니라 현재 실제로 사용하는 포트를 가리켜야 합니다.

11808로 바꾼 뒤 브라우저는 되는데 터미널은 안 되나요?

터미널의 HTTP_PROXY, HTTPS_PROXY, ALL_PROXY가 여전히 이전 포트를 가리키는지 확인하세요. 클라이언트에서 포트를 바꿔도 프록시 환경 변수는 자동으로 업데이트되지 않습니다. 변경한 뒤에는 보통 터미널을 새로 열어야 합니다. 환경 변수의 영향을 분리하려면 위에서 소개한 --proxy 옵션을 포함한 명령으로 진입점을 직접 지정할 수도 있습니다.

컴퓨터를 켤 때마다 충돌이 생기는데 계속 포트를 바꿔야 하나요?

그럴 필요 없습니다. 먼저 「작업 관리자」→「시작 앱」에서 시작 항목을 확인하고 클라이언트 자체의 시작 설정도 점검해 필요한 실행 항목 하나만 유지하세요. 다른 항목이 꼭 필요한 로컬 서비스라면 두 프로그램에 서로 다른 포트를 지정해 고정하고, 각 앱의 프록시 설정도 함께 업데이트하세요.

클라이언트 다운로드플랫폼에 맞는 설치 파일 선택