v2rayN 로컬 포트 사용 중일 때: 점유 프로세스 확인 및 10808 포트 변경

시스템 명령으로 로컬 포트를 사용 중인 프로세스를 찾고, v2rayN 설정에서 SOCKS·HTTP 포트를 바꾼 뒤 시스템 프록시와 브라우저도 함께 변경하는 방법을 안내합니다.

핵심 내용

10808 바인딩 실패는 로컬 인바운드 리스너 문제이며, 원격 노드가 작동하지 않는다는 뜻은 아닙니다. 먼저 로그에서 프로토콜, 주소, 포트를 확인한 뒤 점유 프로세스를 찾으세요. 중복 실행이 확인되면 불필요한 인스턴스를 종료하고, 그렇지 않으면 사용 가능한 포트로 변경한 다음 시스템 프록시, 브라우저, 명령줄 설정도 함께 바꾸세요. 이 글에서는 Windows와 macOS에서 확인하는 방법과 포트 변경 후 점검 순서를 안내합니다.

1. 10808 바인딩 실패: 리스닝 포트와 노드 포트 구분하기

v2rayN은 클라이언트 인터페이스이며, 로컬 프록시 리스닝은 보통 v2rayN이 실행한 프록시 코어가 담당합니다. 애플리케이션은 먼저 127.0.0.1:10808 같은 로컬 주소에 연결하고, 코어는 설정에 따라 아웃바운드 연결을 처리합니다. 로그에 나타나는 로컬 바인딩 실패는 이 진입 지점에서 발생하므로 구독에 등록된 원격 서버 포트부터 변경할 필요는 없습니다.

10808은 흔히 사용하는 로컬 리스닝 포트지만, 모든 버전의 인바운드 유형이 같다고 볼 수는 없습니다. 일부 인터페이스에서는 SOCKS와 HTTP 포트를 따로 설정하며, 구형 설정에서는 HTTP 포트로 10809를 사용하는 경우도 많습니다. 다른 인터페이스에서는 혼합 리스너 하나가 두 프록시 프로토콜을 모두 받습니다. 「설정」→「매개변수 설정」에 표시된 실제 항목과 시작 로그를 기준으로 확인하세요.

10808
이 글에서 확인할 로컬 포트
10809
일부 구형 설정에서 사용하는 HTTP 포트
127.0.0.1
로컬에서만 접속할 수 있는 IPv4 루프백 주소

TCP와 UDP는 서로 다른 리스닝 리소스이며, IPv4와 IPv6의 바인딩 방식도 다를 수 있습니다. 0.0.0.0:10808 또는 [::]:10808이 보이면 와일드카드 리스닝이 루프백 주소의 리스너와 충돌할 수 있다는 점에 유의하세요. 127.0.0.1로 표시된 항목만 검색해서는 안 됩니다.

2. 오류 메시지로 포트 점유·권한 문제·연결 거부 구분하기

먼저 클라이언트 로그를 열고 실패 전후의 몇 줄을 저장하세요. listen, bind, 주소와 포트를 중점적으로 확인합니다. 코어마다 로그 접두어가 다를 수 있으므로, 아래는 운영체제 오류에서 흔히 보이는 문구이며 로그 전체가 정확히 일치할 필요는 없습니다.

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

원인 및 해결: Windows에서는 보통 해당 리스닝 주소와 포트가 이미 사용 중이라는 뜻입니다. PID와 프로세스 경로를 확인한 다음, 중복 실행을 종료할지 로컬 포트를 변경할지 결정하세요.

bind: address already in use

원인 및 해결: macOS 등에서 흔히 볼 수 있는 주소 사용 중 오류입니다. lsof로 TCP 리스너를 확인하고, 다른 클라이언트나 종료되지 않은 코어 프로세스가 실행 중인지 살펴보세요.

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

원인 및 해결: 포트 제외 범위나 보안 정책이 원인일 수 있으며, 일반 프로세스가 포트를 점유한 경우만 있는 것은 아닙니다. 리스너를 찾지 못했다면 시스템 예약 범위를 추가로 확인하세요. 보호 기능을 바로 끄지는 마세요.

Failed to connect to 127.0.0.1 port 10808

원인 및 해결: 애플리케이션이 해당 로컬 포트에 연결하지 못한 상태입니다. 코어가 실행되지 않았거나 포트가 변경되었거나 리스닝 주소가 맞지 않을 수 있습니다. 실제 리스닝 상태부터 확인하고, 이 메시지를 원격 노드 연결 시간 초과로 단정하지 마세요.

3. Windows: PID로 10808 점유 프로세스 찾기

PowerShell에서 TCP 리스너를 조회한 다음 프로세스 정보를 확인하세요. 아래 명령은 정보만 조회하며 프로그램을 종료하지 않습니다. 결과가 비어 있으면 조회 시점에 해당 포트의 TCP 리스너를 찾지 못했다는 뜻입니다. 모든 프로토콜과 시스템 예약 여부까지 확인된 것은 아닙니다.

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

명령 프롬프트에서 아래 명령을 실행해도 됩니다. 두 번째 줄의 1234는 예시 PID이므로 첫 번째 명령에서 실제로 확인한 PID로 바꿔야 합니다. 포트 번호 10808을 프로세스 ID로 입력하지 마세요. 결과를 필터링할 때는 원격 연결 기록을 잘못 읽지 않도록 로컬 주소 열도 확인하세요.

netstat -ano -p tcp | findstr ":10808"
tasklist /FI "PID eq 1234"
  1. 리스닝 상태 확인: LISTENING을 우선 확인하세요. TIME_WAIT 기록만으로는 프로그램이 리스닝 중이라고 볼 수 없습니다.
  2. 경로와 출처 확인: 작업 관리자의 「세부 정보」에서 PID를 대조하고, 필요하면 파일 위치도 확인하세요. 프로세스 경로를 조회하려면 관리자 권한이 필요한 경우가 있습니다.
  3. 정상 종료 우선: 다른 v2rayN 인스턴스라면 해당 인스턴스의 트레이 메뉴에서 종료하세요. 창을 닫아도 트레이로 최소화되기만 할 수 있습니다.
  4. 필요한 서비스 유지: 포트를 계속 사용해야 하는 프로그램이라면 v2rayN의 포트를 변경하세요. 프로세스 이름만 보고 시스템 서비스를 강제 종료하지 마세요.

TCP 조회 결과가 비어 있는데 오류가 UDP와 관련되어 있다면 Get-NetUDPEndpoint -LocalPort 10808 -ErrorAction SilentlyContinue로 추가 확인할 수 있습니다. 중복 인스턴스를 종료한 뒤에는 조회를 다시 실행하고, 사용할 클라이언트만 시작하세요. 두 인스턴스가 번갈아 포트를 점유하는 일을 막을 수 있습니다.

4. macOS와 Windows의 예약 포트: 점유 프로세스가 검색되지 않을 때

macOS: 리스너와 전체 명령 확인

터미널에서 다음 명령을 실행하세요. -nP는 숫자 주소와 포트를 그대로 표시해 이름 확인으로 인한 혼동을 줄입니다. 권한이 부족하면 sudo lsof로 다시 조회하세요. 두 번째 줄의 예시 PID도 실제 값으로 바꿔야 합니다.

lsof -nP -iTCP:10808 -sTCP:LISTEN
ps -p 1234 -o pid=,ppid=,command=

해당 앱 메뉴에서 먼저 종료한 다음 리스너 기록이 사라졌는지 확인하세요. 클라이언트를 종료했는데도 코어 프로세스가 남아 있다면 전체 명령과 부모 프로세스를 확인한 뒤, 이미 종료한 인스턴스에 속하는 것이 확실할 때만 조치하세요. 이름으로 여러 프로세스를 한꺼번에 종료하지 마세요. 현재 사용 중인 다른 설정도 같은 코어를 실행할 수 있습니다.

Windows: 포트 제외 범위 확인

액세스 권한 거부 오류가 발생하고 리스너도 검색되지 않는다면 터미널에서 TCP 제외 범위를 확인하세요. 10808이 출력된 시작·끝 범위에 포함된다면 시스템 예약 규칙을 변경하기보다 범위 밖의 사용 가능한 포트를 선택하는 편이 좋습니다.

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

5. SOCKS·HTTP 또는 혼합 리스닝 포트 변경

아래에서는 포트 변경 예시로 11808과 11809를 사용하지만, 이 포트가 항상 비어 있다는 뜻은 아닙니다. 앞서 사용한 조회 명령에서 10808을 대상 포트로 바꿔 먼저 확인하세요. 시스템에 관련 제외 범위가 있다면 대상 포트가 범위에 포함되지 않는지도 확인해야 합니다.

  1. 되돌릴 수 있도록 기존 포트와 리스닝 주소, 현재 시스템 프록시 모드를 기록해 두세요.
  2. v2rayN에서 「설정」→「매개변수 설정」을 열고 로컬 리스닝, SOCKS, HTTP 또는 혼합 포트 항목을 찾으세요. 메뉴 그룹 이름은 인터페이스 버전에 따라 다를 수 있습니다.
  3. SOCKS와 HTTP 항목이 따로 있다면 각각 11808과 11809로 설정할 수 있습니다. 혼합 리스닝 항목만 있다면 해당 값을 11808로 변경하세요. 11809 항목이 있다고 임의로 가정하지 마세요.
  4. 설정을 저장하고 인터페이스의 안내에 따라 코어나 클라이언트를 다시 시작한 뒤, 로그에 바인딩 실패가 계속 표시되는지 확인하세요.
  5. 새 포트의 리스너를 다시 조회해 해당 PID가 이번에 시작한 코어의 것인지 확인한 다음, 애플리케이션 측 프록시 설정을 변경하세요.
실제 인바운드 유형변경 예시애플리케이션 설정
개별 SOCKS10808에서 11808로 변경SOCKS5를 127.0.0.1:11808로 지정
개별 HTTP10809에서 11809로 변경HTTP 프록시를 127.0.0.1:11809로 지정
혼합 리스닝10808에서 11808로 변경HTTP와 SOCKS5 모두 11808 사용. 프로토콜은 올바르게 선택해야 합니다

판단 기준: 혼합 리스닝일 때만 하나의 포트를 함께 사용할 수 있습니다

인터페이스에 인바운드 항목이 두 개로 나뉘어 있다면 SOCKS와 HTTP에 모두 11808을 입력하지 마세요. 먼저 인바운드 유형을 확인한 뒤 애플리케이션 프록시 프로토콜을 선택하세요. 포트 번호가 같아도 프로토콜을 서로 바꿔 쓸 수 있는 것은 아닙니다.

로컬에서만 사용할 경우 루프백 주소로 리스닝하도록 유지하세요. 리스닝 주소를 0.0.0.0으로 변경하는 것은 포트 점유를 해결하는 일반적인 방법이 아니며, 접근 가능 범위가 넓어질 수도 있습니다. 사용자 지정 JSON 설정을 사용한다면 실제 적용 중인 inbounds를 확인하세요. 인터페이스 설정이 가져온 구성의 고정 포트를 덮어쓰지 못할 수 있습니다. 항목의 의미는 JSON 설정 안내서를 참고하세요.

6. 시스템 프록시·브라우저·명령줄 설정 함께 변경하기

코어가 새 포트에서 시작되어도 기존 프록시 설정이 모든 애플리케이션에서 자동으로 해제되거나 갱신되지는 않습니다. 시스템 프록시, 브라우저의 수동 프록시, 터미널 환경 변수는 서로 다른 설정이므로 각 애플리케이션이 실제로 사용하는 연결 경로를 하나씩 확인하세요.

애플리케이션 프록시 진입점 로컬 리스닝 라우팅 규칙 원격 아웃바운드

HTTPS 웹사이트에 로컬 HTTP 프록시로 접속할 때 프록시 주소는 보통 http://127.0.0.1:11809로 지정합니다. 웹사이트가 HTTPS라고 해서 로컬 프록시 진입점도 반드시 https://를 사용해야 하는 것은 아닙니다. 일반 시스템 HTTP 프록시를 SOCKS만 지원하는 리스닝 포트에 직접 연결할 수도 없습니다.

7. 포트 변경 후 확인 순서와 되돌리기 점검

먼저 로컬 리스닝을 확인하고, 다음으로 프록시 프로토콜을 점검한 뒤, 마지막으로 원격 연결을 확인하세요. 아래 두 명령은 개별 HTTP 인바운드와 SOCKS 인바운드의 예시입니다. 혼합 포트를 사용한다면 첫 번째 명령의 11809를 11808로 바꾸세요. 요청 예시는 이 사이트의 홈을 대상으로 하며, 응답 시간이나 상태 코드를 고정값으로 가정하지 않습니다.

curl --proxy http://127.0.0.1:11809 --connect-timeout 5 --max-time 20 -I https://v2rayindex.com/
curl --proxy socks5h://127.0.0.1:11808 --connect-timeout 5 --max-time 20 -I https://v2rayindex.com/

Windows PowerShell에서는 일부 환경에서 같은 이름의 별칭이 인수를 바꾸지 않도록 curl 대신 curl.exe를 사용할 수 있습니다. socks5h는 대상 도메인 이름을 프록시 서버에서 확인한다는 뜻입니다. 로컬에서 이름을 확인하는 socks5와 다르므로 테스트에 사용한 방식을 기록하세요.

마무리: 한 번에 한 항목씩 변경하세요

먼저 포트를 변경하고 리스닝을 확인한 뒤 애플리케이션의 연결 경로를 갱신하고, 마지막으로 원격 요청을 확인하세요. 기존 포트와 새 포트의 대응 관계를 기록해 두세요. 문제를 해결하는 동안 노드, 라우팅, DNS를 한꺼번에 변경하면 어떤 변경이 효과가 있었는지 파악하기 어렵습니다.

v2rayN 다운로드플랫폼에 맞는 클라이언트 선택