v2rayN 포트 사용 중으로 시작 실패: 충돌 프로세스 확인 및 로컬 수신 포트 변경

시작할 때 포트 사용 중 오류가 나타나는 경우 대부분 로컬 10808/10809 포트를 다른 프로그램이 사용 중인 상태입니다. 시스템 명령으로 점유 프로세스를 확인하고 v2rayN에서 로컬 수신 포트를 안전하게 변경하는 방법을 단계별로 안내합니다.

이 글의 핵심

이 글은 v2rayN 코어 시작 실패나 로그에 bind 또는 address already in use가 표시되는 Windows 사용자를 위한 안내입니다. 충돌한 포트를 확인하고 PID로 점유 프로그램을 찾은 뒤, 기존 프로세스를 종료하거나 v2rayN 수신 포트를 변경합니다. 마지막으로 시스템 프록시와 브라우저 등 외부 앱의 포트 설정도 맞춥니다.

10808, 10809와 코어 수신 실패를 먼저 구분하기

v2rayN은 V2Ray 또는 Xray 코어를 시작한 뒤 로컬 컴퓨터에 인바운드 수신 포트를 만듭니다. 일반적인 설정에서는 10808을 SOCKS 진입점으로, 인접한 10809를 HTTP 진입점으로 사용합니다. 최신 설정 일부는 혼합 수신 방식을 사용해 화면에 주요 로컬 포트 하나만 표시할 수 있습니다. 따라서 실제 포트는 「설정」→「매개변수 설정」의 로컬 수신 설정과 현재 코어 로그를 기준으로 확인해야 하며, 기본값만 보고 판단해서는 안 됩니다.

수신 포트는 로컬 앱이 프록시 코어로 들어가는 입구입니다. 브라우저, 명령줄 도구 또는 시스템 프록시는 먼저 127.0.0.1의 이 포트에 연결하고, 코어는 노드와 라우팅 규칙에 따라 외부 연결을 만듭니다. 같은 주소, 같은 프로토콜, 같은 포트를 다른 프로세스가 이미 수신 중이면 새로 시작한 코어는 다시 바인딩할 수 없습니다.

프로그램 시작설정 읽기로컬 포트 바인딩프록시 요청 수신규칙에 따라 외부 연결
확인 항목 일반적인 값 충돌 발생 시 증상
SOCKS 수신 127.0.0.1:10808 코어가 SOCKS 인바운드를 만들지 못하고 해당 포트를 사용하는 앱의 연결이 실패합니다
HTTP 수신 127.0.0.1:10809 시스템 프록시 또는 수동 HTTP 프록시에 연결할 수 없습니다
변경된 수신 포트 127.0.0.1:20808、20809 코어는 시작되지만 외부 앱의 포트도 함께 변경해야 합니다

로그로 포트 사용 중인지 권한 제한인지 확인하기

작업 표시줄 아이콘 색상만으로 판단하지 마세요. 먼저 v2rayN의 로그 창을 열고 코어 시작 또는 서비스 재시작을 한 번 실행한 뒤 오류에 표시된 IP, 포트와 프로토콜을 기록합니다. bind, listen, address already in use, Only one usage 등의 문구를 중점적으로 찾으세요. 로그에 127.0.0.1:10808이 명확히 표시되면 이후 명령에서는 이 포트만 확인하면 되며 모든 연결을 검색할 필요가 없습니다.

시작 실패라도 원인은 서로 완전히 다를 수 있습니다. 설정 파일 문법 오류에는 보통 failed to load config, invalid field 등이 표시됩니다. 원격 노드에 연결할 수 없는 문제는 대개 로컬 수신이 성공한 뒤 발생합니다. 로컬 주소에 bind하지 못한 경우에만 포트 사용 여부를 우선 확인해야 합니다.

오류:listen tcp 127.0.0.1:10808: bind: Only one usage of each socket address is normally permitted

원인 및 해결:10808을 다른 프로세스가 수신 중입니다. netstat 또는 PowerShell로 PID를 확인한 뒤 중복 실행된 코어를 종료하거나 v2rayN을 사용하지 않는 포트로 변경하세요.

오류:failed to listen on address 127.0.0.1:10809

원인 및 해결:HTTP 인바운드 바인딩에 실패했습니다. 10809를 수신 중인 프로세스를 확인하고, 이전 버전의 v2rayN 또는 남아 있는 코어가 백그라운드에서 실행 중인지 점검하세요.

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

원인 및 해결:해당 포트가 Windows 제외 포트 범위에 포함되었거나 보안 정책의 제한을 받을 수 있습니다. 먼저 제외 범위를 조회하고, 포트가 그 안에 있다면 20808, 20809 같은 일반적인 높은 포트로 바로 변경하세요.

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

제외 포트 범위 문제는 일반 프로세스 점유와 다릅니다. 일반적인 점유라면 LISTENING과 PID를 확인할 수 있지만, 제외 범위는 해당 사용자 프로세스가 없어도 시스템이 바인딩을 거부할 수 있습니다. 10808 또는 새로 선택한 포트가 출력된 범위에 포함된다면 시스템 서비스를 강제로 종료하지 말고 범위 밖의 포트로 변경하는 편이 안전합니다.

netstat과 PowerShell로 충돌 프로세스 찾기

Windows 터미널 또는 명령 프롬프트에서 먼저 netstat을 실행하세요. -a는 연결과 수신 포트를 표시하고, -n은 주소를 숫자로 표시하며, -o는 프로세스 PID를 표시합니다. 10808과 10809를 각각 조회하면 원격 연결에 우연히 같은 숫자가 나타난 것을 로컬 수신으로 잘못 판단하는 일을 피할 수 있습니다.

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

결과에서는 「로컬 주소」와 「상태」 열을 중점적으로 확인해야 합니다. 예를 들어 로컬 주소가 127.0.0.1:10808이고 상태가 LISTENING이며 마지막 열이 4321이라면 PID 4321이 해당 포트를 수신 중이라는 뜻입니다. 로컬 주소가 다른 포트이고 외부 주소에 10808이 포함되어 있다면 찾으려는 로컬 수신 프로세스가 아닙니다.

  1. LISTENING 행의 마지막 열에 표시된 PID를 기록하세요. 예: 4321
  2. tasklist /FI "PID eq 4321"을 실행해 프로세스 이름을 확인하세요.
  3. 이름이 xray.exe 또는 v2ray.exe라면 다른 v2rayN 인스턴스가 이미 실행 중인지 먼저 확인하세요.
  4. 다른 프로그램이라면 작업 관리자의 「세부 정보」 탭에서 PID와 파일 경로를 대조하세요.
  5. 프로세스 용도를 확인한 뒤 프로그램을 종료할지, 서비스를 중지할지, 포트를 변경할지 결정하세요.
tasklist /FI "PID eq 4321"

Get-NetTCPConnection -State Listen |
  Where-Object { $_.LocalPort -in 10808,10809 } |
  Select-Object LocalAddress,LocalPort,OwningProcess

Get-CimInstance Win32_Process -Filter "ProcessId=4321" |
  Select-Object ProcessId,Name,ExecutablePath,CommandLine

PowerShell의 OwningProcess가 PID입니다. ExecutablePath와 CommandLine을 확인하면 현재 v2rayN이 시작한 코어인지, 이전 디렉터리의 코어인지, 다른 로컬 프록시 프로그램인지 구분하는 데 도움이 됩니다. 일부 프로세스 경로는 관리자 권한이 있어야 읽을 수 있지만, 실행 파일 이름만 보고 프로세스를 종료해서는 안 됩니다.

결론: PID와 경로를 함께 확인해야 합니다

xray.exe 또는 v2ray.exe가 보인다고 바로 종료해도 되는 것은 아닙니다. 명령줄 인수와 위치한 디렉터리를 먼저 확인해 화면을 닫은 이전 인스턴스인지 판단하세요. 그래야 정상 작동 중인 다른 설정을 중단하는 일을 피할 수 있습니다.

남은 프로세스 종료 또는 v2rayN 로컬 포트 변경

점유 프로세스가 중복 실행된 v2rayN이라면 해당 창으로 돌아가 정상적으로 종료하는 것이 우선입니다. 창은 사라졌지만 코어가 계속 실행 중이라면 작업 관리자에서 PID에 해당하는 프로세스를 종료할 수 있습니다. 경로, PID와 용도를 모두 정확히 확인한 경우에만 명령으로 강제 종료하세요. 일반 프록시 포트 하나를 비우기 위해 시스템 서비스, 가상화 서비스 또는 보안 프로그램을 함부로 종료해서는 안 됩니다.

Stop-Process -Id 4321

taskkill /PID 4321 /F

포트를 점유한 프로그램을 계속 사용해야 한다면 v2rayN의 포트를 변경하는 편이 적절합니다. 일반적인 한국어 인터페이스에서는 「설정」→「매개변수 설정」으로 이동해 「기본 설정」 영역의 로컬 수신 포트를 찾습니다. 버전에 따라 「로컬 수신 포트」, 「로컬 SOCKS 포트」 또는 비슷한 이름으로 표시될 수 있습니다. 10808을 20808로 변경해 설정을 저장한 다음 「서비스 재시작」을 실행하거나 v2rayN을 완전히 종료했다가 다시 시작하세요.

  1. 기존 포트 10808을 나중에 복원할 수 있도록 먼저 기록하거나 화면을 캡처하세요.
  2. 「설정」→「매개변수 설정」에서 주요 로컬 포트를 20808로 변경하세요.
  3. 화면에 HTTP 포트가 별도로 표시된다면 10809를 20809로 변경하세요.
  4. 매개변수를 저장하고 현재 코어를 재시작한 뒤 로그에 수신 성공 메시지가 나타나는지 확인하세요.
  5. netstat을 다시 실행해 새 PID가 127.0.0.1:20808을 수신 중인지 확인하세요.
방법 적용 상황 후속 조치
이전 인스턴스 종료 같은 클라이언트가 두 번 시작된 경우 인스턴스 하나만 남기고 코어 재시작
남은 코어 종료 화면을 닫은 뒤에도 코어 프로세스가 포트를 수신 중인 경우 PID와 경로를 확인한 뒤 프로세스 종료
20808, 20809로 변경 포트를 점유한 프로그램을 계속 실행해야 하는 경우 시스템 프록시와 외부 앱 설정도 함께 변경
제외 범위 피하기 수신 PID는 없지만 시스템이 바인딩을 거부하는 경우 제외 구간 밖의 높은 포트 선택

포트 변경 후 시스템 프록시와 외부 앱도 함께 변경하기

코어가 시작된다는 것은 수신 단계가 복구되었다는 뜻일 뿐, 모든 앱이 새 포트를 사용한다는 의미는 아닙니다. Windows 시스템 프록시가 여전히 127.0.0.1:10809를 가리키는데 v2rayN은 20809로 변경했다면 브라우저는 계속 이전 포트로 요청해 코어는 정상인데 웹페이지가 열리지 않는 증상이 나타납니다. 시스템 프록시를 다시 설정하거나 v2rayN에서 시스템 프록시 자동 구성을 다시 실행하세요.

v2rayN 메인 화면의 시스템 프록시 메뉴에서 「시스템 프록시 자동 구성」을 다시 선택한 다음 Windows의 「설정」→「네트워크 및 인터넷」→「프록시」에서 주소와 포트를 확인하세요. 프록시를 수동으로 설정한 브라우저, 다운로드 도구, 터미널과 개발 도구는 시스템 설정을 자동으로 따라가지 않으므로 각각 10808 또는 10809를 새 값으로 변경해야 합니다.

Get-NetTCPConnection -State Listen |
  Where-Object { $_.LocalPort -in 20808,20809 } |
  Select-Object LocalAddress,LocalPort,OwningProcess

Test-NetConnection 127.0.0.1 -Port 20808

Test-NetConnection 결과에서 TcpTestSucceeded가 True이면 로컬 컴퓨터가 해당 TCP 수신 포트에 연결할 수 있다는 뜻이지만, 노드 자체의 사용 가능 여부를 검증하지는 않습니다. 완전한 확인을 위해 코어 로그에서 외부 연결이 완료되었는지 확인하고 테스트 트래픽이 예상한 출구로 전달되는지 라우팅 규칙도 점검해야 합니다.

결론: 새 포트는 전체 설정 체인을 완성해야 합니다

수신 포트, 시스템 프록시 포트와 앱 내부 프록시 포트는 서로 일치해야 합니다. v2rayN의 입력란 하나만 변경하면 대개 “시작 실패”가 “코어는 시작되었지만 앱이 연결되지 않음”으로 바뀔 뿐입니다.

자주 묻는 문제와 대응 범위

작업 관리자에서 netstat에 표시된 PID를 찾을 수 없나요?

netstat을 다시 한 번 실행하세요. 짧게 실행되는 프로세스는 이미 종료되어 새 PID로 바뀌었을 수 있습니다. 관리자 권한으로 PowerShell을 실행해 Get-NetTCPConnection을 사용한 뒤 OwningProcess로 프로세스를 조회할 수도 있습니다.

20808로 변경했는데도 포트 사용 중 오류가 계속 표시되나요?

netstat으로 20808만 따로 조회하고 Windows TCP 제외 포트 범위도 확인하세요. 새 포트에 LISTENING 기록이 있다면 사용 중이 아니면서 제외 구간에도 포함되지 않는 포트로 다시 변경하세요. 예: 21808

10809만 충돌하고 10808은 충돌하지 않는다면 어떻게 해야 하나요?

먼저 매개변수 설정에서 SOCKS와 HTTP가 각각 설정되어 있는지 확인하세요. 독립적으로 설정할 수 있다면 HTTP 포트만 변경하고, 인접 포트 규칙으로 자동 생성된다면 주요 로컬 포트를 변경한 뒤 모든 앱의 설정도 맞추세요.

코어를 종료했는데 포트가 바로 해제되지 않는 이유는 무엇인가요?

몇 초 기다린 뒤 LISTENING 상태를 다시 조회하세요. TIME_WAIT 연결은 일반적으로 수신 포트 점유와 다릅니다. LISTENING 행이 계속 남아 있다면 아직 포트를 보유한 프로세스가 있는 것이므로 최신 PID를 기준으로 계속 확인하세요.

컴퓨터를 켤 때마다 충돌이 다시 발생하나요?

v2rayN과 포트를 점유하는 프로그램이 모두 시작 프로그램으로 등록되어 있는지 확인하고, v2rayN 디렉터리나 중복 바로 가기가 두 개 존재하는지도 점검하세요. 시작 항목은 하나만 남기거나 두 프로그램에 서로 다른 수신 포트를 할당하세요.

문제 해결이 끝난 뒤 최종 포트, 점유 프로세스 이름, PID에 해당하는 경로와 변경한 앱을 간단히 기록해 두는 것이 좋습니다. 이후 v2rayN을 업데이트하거나 설정을 다시 가져올 때 수신 포트가 기본값으로 돌아가도 모든 프로세스를 다시 검색하지 않고 기록과 빠르게 대조할 수 있습니다.