포트 사용으로 시작 실패: 점유 프로세스 확인 및 V2Ray 로컬 수신 포트 변경

클라이언트에서 포트 충돌이 표시되면 시스템 명령으로 10808 같은 기본 포트를 점유한 프로세스를 찾은 뒤, v2rayN과 v2rayNG에서 로컬 포트를 변경하는 위치와 변경 후 함께 조정할 설정을 확인하세요.

이 글의 핵심

“address already in use”가 표시되거나 커널이 시작 직후 종료되고, 시스템 프록시는 켜졌지만 로컬 포트가 열리지 않는 경우에 유용합니다. 오류 포트와 프로토콜 확인, 점유 프로세스 파악, 프로세스 종료 또는 포트 변경 결정, 시스템 프록시·브라우저·관련 설정 동기화 순서로 진행하세요.

먼저 충돌한 로컬 포트 확인하기

V2Ray 또는 Xray 커널은 시작할 때 로컬 주소에 수신 포트를 엽니다. 브라우저와 다른 앱은 이 입구로 요청을 보내고, 클라이언트가 노드 설정과 라우팅 규칙에 따라 처리합니다. v2rayN 7.x에서는 로컬 혼합 프록시 포트를 사용하는 경우가 많으며, 기존 설정에서는 127.0.0.1:10808을 자주 사용합니다. 오래된 설정은 SOCKS와 HTTP를 10808, 10809로 나누기도 합니다. 이 포트는 프로토콜 서버 포트가 아니라 현재 기기에서 앱과 클라이언트 사이의 진입점 역할을 합니다.

동일한 네트워크 프로토콜·수신 주소·포트 조합은 일반적으로 하나의 프로세스만 사용할 수 있습니다. 예를 들어 이미 TCP 127.0.0.1:10808을 수신 중인 프로세스가 있는데 Xray 커널이 같은 조합을 다시 요청하면 바인딩 실패가 반환됩니다. “시작 실패”만으로는 부족하므로 v2rayN 로그 창이나 커널 로그를 열어 listen, bind, 10808이 포함된 원문 로그를 확인하세요.

10808
자주 사용하는 로컬 프록시 포트
10809
오래된 설정에서 자주 쓰는 인접 포트
10818
이 글의 변경 예시 포트
2가지
TCP와 UDP를 각각 확인

Windows에서 10808 포트를 점유한 프로세스 찾기

Windows에서는 먼저 “터미널” 또는 “명령 프롬프트”를 엽니다. 일반 권한으로도 연결과 PID를 확인할 수 있지만, 프로세스 상세 정보를 조회하거나 시스템 프로세스를 종료할 때 권한이 거부되면 관리자 권한으로 터미널을 다시 여세요. 첫 단계에서는 위치만 확인하고, PID가 보인다고 바로 강제 종료하지 마세요.

netstat -ano | findstr :10808

출력에서 LISTENING은 프로세스가 포트를 수신 중이라는 뜻입니다. 마지막 열은 PID입니다. 예를 들어 아래 기록은 PID 6420이 로컬 TCP 10808을 점유하고 있음을 나타냅니다. TIME_WAIT만 보인다면 일반적으로 연결 종료 후 잠시 유지되는 상태이며, 수신 서비스가 있다는 뜻은 아닙니다.

TCP    127.0.0.1:10808    0.0.0.0:0    LISTENING    6420

PID를 확인했다면 작업 목록으로 실행 파일을 조회하세요. 한 명령에서 여러 기록이 반환되면 PID를 정확히 대조해야 합니다. 프로세스 이름만으로 판단하지 마세요. 같은 프로그램이 여러 인스턴스로 실행될 수 있습니다.

tasklist /FI "PID eq 6420"
조회 결과 일반적인 의미 권장 조치
다른 v2rayN 또는 Xray 프로세스 이전 인스턴스가 종료되지 않았거나 클라이언트가 중복 실행됨 먼저 트레이에서 이전 인스턴스를 종료한 뒤 수신 기록을 다시 확인
다른 로컬 프록시 프로그램 두 프로그램이 같은 진입 포트를 사용함 자주 쓰는 프로그램의 포트는 유지하고 다른 프로그램을 사용하지 않는 포트로 변경
개발용 서비스 개발 도구가 우연히 10808을 사용함 프로젝트 의존성에 따라 개발 서비스 또는 클라이언트 포트를 변경
PID가 이미 존재하지 않음 조회 중 프로세스가 종료됨 netstat을 다시 실행해 수신 포트가 해제되었는지 확인

PowerShell에서는 수신 기록과 프로세스 정보도 바로 연결할 수 있습니다. 다음 명령은 TCP 10808만 조회하고 해당 포트의 PID를 프로세스 조회에 전달합니다. 출력이 없다면 조건에 맞는 TCP 수신 기록이 현재 없다는 뜻입니다.

$listener = Get-NetTCPConnection -LocalPort 10808 -State Listen -ErrorAction SilentlyContinue
$listener | Select-Object LocalAddress, LocalPort, OwningProcess
$listener | ForEach-Object { Get-Process -Id $_.OwningProcess }

v2rayN에서 로컬 수신 포트 변경하기

점유 프로세스를 유지해야 한다면 v2rayN의 로컬 포트를 변경하는 편이 반복해서 프로세스를 종료하는 것보다 안정적입니다. v2rayN 7.x 중국어 UI를 기준으로 먼저 현재 시스템 프록시 상태를 기록한 다음, 「설정」→「매개변수 설정」→「기본 설정」으로 이동해 로컬 혼합 프록시 포트 또는 로컬 수신 포트를 찾으세요. 7.x의 세부 버전에 따라 항목 이름은 조금 다를 수 있지만, 노드의 서버 포트가 아닌 인바운드 수신 항목을 변경해야 합니다.

  1. 트레이 메뉴에서 시스템 프록시를 잠시 끄고 이전 주소를 앱이 계속 사용하지 않도록 합니다.
  2. 「설정」→「매개변수 설정」→「기본 설정」을 열고 로컬 포트를 10808에서 예시 값인 10818로 변경합니다.
  3. 설정을 저장하고 커널을 다시 시작합니다. UI에서 클라이언트 재시작을 요구하면 트레이 인스턴스를 완전히 종료한 뒤 다시 실행하세요.
  4. 로그를 열어 127.0.0.1:10818 수신 기록이 나타나고 bind 또는 address already in use가 더 이상 표시되지 않는지 확인하세요.
  5. 시스템 프록시를 다시 활성화한 뒤 주소가 127.0.0.1이고 새 포트로 동기화되었는지 확인하세요.

새 포트는 1024~65535 범위에서 사용하지 않는 값을 선택할 수 있지만, 숫자가 크다는 이유만으로 사용 가능하다고 판단하지 마세요. 변경 전에 netstat -ano | findstr :10818을 실행하세요. LISTENING 기록이 없을 때 10818을 클라이언트에 입력합니다. SOCKS, HTTP, API, DNS 인바운드가 함께 있다면 각 항목의 포트는 서로 달라야 하며 모든 진입점에 같은 값을 입력하면 안 됩니다.

수신 설정 읽기커널 포트 요청시스템 프록시 기록앱 연결 진입점라우팅 규칙에 따른 아웃바운드

포트를 변경한 뒤 “커널 시작 성공”은 수신 충돌이 해결되었다는 뜻일 뿐, 브라우저가 반드시 새 포트를 사용한다는 의미는 아닙니다. 시스템 프록시 모드는 보통 v2rayN이 자동으로 기록하지만, 수동 프록시·브라우저별 프록시·터미널 환경 변수·개발 도구는 자동으로 따라 바뀌지 않을 수 있습니다. 관련 설정을 하나씩 확인하세요.

v2rayNG 및 v2flyNG 포트 변경 핵심

Android에서도 로컬 포트 충돌이 발생할 수 있습니다. 다른 네트워크 도구가 같은 포트를 사용하거나, 이전 서비스가 정상적으로 중지되지 않았거나, 가져온 사용자 지정 설정에 인바운드가 직접 지정된 경우가 흔합니다. v2rayNG는 Xray 커널을, v2flyNG는 v2fly 커널을 사용합니다. 설정 이름은 버전에 따라 달라질 수 있지만 원칙은 같습니다. 현재 연결을 중지하고 로컬 프록시 진입점을 변경한 다음 서비스를 다시 시작하세요.

v2rayNG 1.10.x의 일반적인 중국어 UI를 기준으로 「설정」→「로컬 프록시 설정」에서 로컬 SOCKS 포트, HTTP 포트 또는 관련 수신 항목을 확인할 수 있습니다. 현재 값이 10808이라면 사용되지 않는 것으로 확인한 10818로 먼저 변경해 보세요. 메인 화면으로 돌아가 연결을 중지한 후 다시 시작해 커널이 인바운드 설정을 새로 불러오게 합니다. v2flyNG도 설정의 로컬 프록시 또는 수신 포트 항목에서 변경하며, 구독 노드에 있는 원격 서버 포트는 수정하지 마세요.

오류:listen tcp 127.0.0.1:10808: bind: address already in use

원인 및 해결:다른 프로세스가 TCP 10808을 이미 수신 중입니다. 충돌 프로그램을 중지하거나 현재 클라이언트의 로컬 수신 포트를 10818로 변경한 뒤 커널을 다시 시작하세요.

오류:bind: Only one usage of each socket address is normally permitted

원인 및 해결:Windows가 두 번째 프로세스의 동일 주소·포트 바인딩을 거부했습니다. netstat으로 PID를 찾은 뒤 이전 인스턴스를 종료할지 포트를 변경할지 결정하세요.

오류:failed to start app/proxyman/inbound

원인 및 해결:인바운드 모듈 초기화에 실패했습니다. 포트 충돌이 흔한 원인 중 하나이므로 이어지는 listen 또는 bind 로그를 확인하고 실제 로그에 표시된 포트를 기준으로 점검하세요.

사용자 지정 JSON 설정을 사용하는 경우 UI의 전역 포트가 설정 파일의 inbounds를 덮어쓰지 않을 수 있습니다. 이때 각 인바운드 객체의 listenport를 확인하세요. 같은 설정에서 10808을 중복 선언해도 하나의 커널 내부에서 충돌이 발생합니다.

{
  "inbounds": [
    {
      "listen": "127.0.0.1",
      "port": 10818,
      "protocol": "socks"
    }
  ]
}

포트를 해제했는데도 시작에 실패하는 이유

포트 충돌을 해결한 뒤에도 실패한다면 이전 PID를 계속 조작하지 말고 최신 로그를 다시 확인하세요. 한 번의 시작 과정에서 혼합 프록시, API, DNS, TUN 관련 수신 포트를 차례로 만들 수 있습니다. 10808이 성공했다고 다른 포트까지 성공한 것은 아닙니다. 로그에서 다음 failed, listen 또는 bind를 찾고 실제 포트를 기준으로 다시 조회하세요.

netstat에 10808이 나오지 않는데 클라이언트는 사용 중이라고 표시하나요?

먼저 로그에 TCP와 UDP 중 무엇이 기록되었는지 확인하고 수신 주소가 IPv6인지 살펴보세요. TCP는 netstat -ano -p tcp, UDP는 netstat -ano -p udp를 사용할 수 있습니다. 그런 다음 클라이언트를 완전히 종료하고 최신 로그를 다시 확인하세요.

10818로 바꾼 뒤 브라우저에서 오히려 웹페이지가 열리지 않나요?

Windows 시스템 프록시와 브라우저 수동 프록시가 여전히 10808을 가리키는지 확인하세요. 주소는 클라이언트의 수신 주소와 같아야 하고 포트는 10818로 변경해야 합니다. 그 후 브라우저를 닫았다가 다시 열어 연결하세요.

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

작업 관리자의 시작 앱에서 두 클라이언트가 동시에 자동 시작되도록 설정되어 있지 않은지 확인하고, 트레이에 중복 인스턴스가 없는지도 살펴보세요. 자동 시작 항목은 하나만 남기고, 함께 사용해야 하는 프로그램에는 서로 다른 포트를 할당하세요.

프로세스를 종료했는데 PID가 왜 바로 다시 나타나나요?

해당 프로그램이 백그라운드 서비스나 예약 작업에 의해 자동으로 다시 실행될 수 있습니다. 먼저 해당 프로그램에서 자동 시작을 끈 뒤 정상적으로 종료하세요. 강제 종료 명령과 자동 복구 기능을 반복해서 맞서게 하지 마세요.

시스템 프록시는 새 포트로 표시되는데 터미널 명령은 계속 연결에 실패하나요?

터미널이 별도의 프록시 환경 변수를 사용할 수 있습니다. 현재 셸에 맞는 환경 변수 조회 명령을 실행해 127.0.0.1:10808이 남아 있지 않은지 확인하고, 변경 후 터미널 창을 새로 여세요.

“포트 사용”과 “포트 예약”도 구분해야 합니다. 일부 Windows 네트워크 구성 요소나 가상화 기능은 TCP 포트 범위를 예약할 수 있어 netstat에 수신 프로세스가 보이지 않아도 바인딩이 거부될 수 있습니다. 아래 명령으로 제외 범위를 확인할 수 있습니다. 10808이 범위에 포함된다면 10818, 20808처럼 사용 중이 아니면서 예약되지 않은 포트를 선택하는 편이 시스템 예약 정책을 조정하는 것보다 일반적으로 간단합니다.

netsh interface ipv4 show excludedportrange protocol=tcp

변경 후 전체 점검 순서

문제 해결을 마치기 전에 전체 흐름을 다시 확인하세요. 목표는 오류를 없애는 데 그치지 않고 커널 수신, 시스템 프록시, 앱 연결, 노드 아웃바운드가 같은 설정을 사용하는지 확인하는 것입니다. 다음 순서를 따르면 “클라이언트는 실행 중이지만 트래픽은 여전히 이전 포트로 전송되는” 상황을 피할 수 있습니다.

  1. 이전 클라이언트 인스턴스를 완전히 종료하고 트레이 아이콘과 관련 커널 프로세스가 사라질 때까지 기다리세요.
  2. netstat -ano | findstr :10818을 실행해 변경 전에 다른 프로세스가 새 포트를 수신하고 있지 않은지 확인하세요.
  3. v2rayN, v2rayNG 또는 v2flyNG를 시작하고 로그에서 새 포트의 수신이 성공했는지 확인하세요.
  4. 포트를 다시 조회해 수신 PID가 현재 클라이언트가 시작한 커널 프로세스인지 대조하세요.
  5. 시스템 프록시, 브라우저 수동 프록시, 터미널 환경 변수, 개발 도구의 프록시 설정을 확인하세요.
  6. 사용 가능한 노드를 하나 선택해 연결을 테스트하세요. 포트가 정상적으로 수신 중인데 연결에 실패한다면 노드 상태, DNS, 라우팅 규칙, 시스템 시간을 점검하세요.

단순히 중복 실행으로 충돌이 발생했다면 기본값 10808을 유지하고 이전 인스턴스만 정리하면 됩니다. 두 로컬 서비스가 장기간 함께 실행되어야 한다면 서로 다른 포트를 고정 배정하고 각 포트가 어느 프로그램에 해당하는지 기록하세요. 포트 계획이 안정되면 구독 업데이트, VMess 또는 VLESS 노드 선택, 직접 연결과 프록시 라우팅을 로컬 포트 변경 때문에 다시 구성할 필요가 없습니다. 로컬 진입점에 의존하는 앱 설정만 동기화하면 됩니다.

그래픽 클라이언트 받기 플랫폼에 맞는 v2rayN 또는 v2rayNG 선택