v2rayN을 시작할 때 10808 바인딩 실패가 표시되거나 브라우저가 이전 포트를 계속 사용하는 경우에 적용할 수 있습니다. 먼저 오류가 로컬 수신과 관련된 것인지 확인한 다음 PID로 포트를 점유한 프로세스를 찾으세요. 중복 실행된 인스턴스를 종료할 수 있으면 기존 포트를 유지하고, 종료할 수 없다면 사용 가능 여부를 확인한 10818로 변경하세요. 마지막으로 시스템 프록시, 브라우저, 명령줄 도구를 함께 업데이트하고 로컬 수신과 원격 접속을 각각 확인하세요.
먼저 구분하기: 로컬 수신 실패인가, 노드 연결 실패인가
127.0.0.1:10808은 로컬 프록시 진입점이지 구독 서버 주소나 노드의 원격 포트가 아닙니다. v2rayN 관리 화면이 열려도 Xray가 정상적으로 시작됐다는 뜻은 아닙니다. 커널이 진입점에 바인딩하지 못하면 화면에 노드 목록이 표시되더라도 브라우저가 연결할 로컬 프록시는 동작하지 않을 수 있습니다.
왼쪽 단계부터 차례로 점검하세요. 먼저 v2rayN의 로그 창을 열고 시작 시각에 해당하는 listen, bind, 10808 항목을 찾습니다. 오류가 수신 주소를 명확히 가리킬 때만 이 문서의 방법을 적용하세요. 원격 연결 시간 초과, 인증서 오류, 구독 업데이트 실패는 로컬 포트를 임의로 바꿔도 해결되지 않습니다.
bind: address already in use
원인 및 해결 방법: 대상 주소와 포트를 이미 다른 프로세스가 사용 중입니다. 점유 프로세스를 확인해 중복 실행된 인스턴스를 종료하거나, v2rayN의 수신 포트를 사용 가능한 것으로 확인된 값으로 변경하세요.
Only one usage of each socket address (protocol/network address/port) is normally permitted.
원인 및 해결 방법: Windows에서 동일한 소켓 주소에 중복으로 바인딩할 수 없습니다. 로그에 표시된 IP, TCP 또는 UDP 구분, 포트를 함께 확인하세요. 숫자만 보고 충돌 대상을 판단하면 안 됩니다.
An attempt was made to access a socket in a way forbidden by its access permissions.
원인 및 해결 방법: 시스템 포트 제외 범위나 보안 정책이 원인일 수 있어 일반 프로세스가 포트를 점유한 것이 아닐 수도 있습니다. 수신 중인 프로세스를 찾지 못했다면 포트 예약 여부를 추가로 확인하세요.
Windows: netstat로 포트 점유 프로세스 찾기
PowerShell 또는 명령 프롬프트를 열고 아래 명령을 실행하세요. 이 명령은 상태만 조회하며 프로그램을 종료하지 않습니다. 프로세스 경로를 확인할 수 없다면 터미널을 관리자 권한으로 다시 실행하세요.
netstat -ano -p tcp | findstr ":10808"
netstat -ano -p udp | findstr ":10808"
TCP 결과에서는 '로컬 주소' 열과 LISTENING 상태를 중점적으로 확인하세요. 필터 문자열이 원격 주소나 같은 숫자로 시작하는 더 긴 포트까지 찾아낼 수도 있으므로, 모든 행을 충돌로 간주하면 안 됩니다. UDP에는 이에 해당하는 수신 상태 열이 없습니다. 로그에서 UDP 바인딩이 확인된 경우에만 해당 결과를 중점적으로 살펴보세요.
TCP 127.0.0.1:10808 0.0.0.0:0 LISTENING 6420
아래는 설명을 위한 예시이며 실제 컴퓨터에서 측정한 결과가 아닙니다. 끝의 6420은 예시 PID이므로 실제 작업에서는 조회 결과에 나온 값으로 바꿔야 합니다. PowerShell에서 TCP 로컬 수신 포트를 정확히 필터링하려면 다음 명령을 사용하세요:
Get-NetTCPConnection -LocalPort 10808 -State Listen -ErrorAction SilentlyContinue |
Select-Object LocalAddress, LocalPort, State, OwningProcess
tasklist /FI "PID eq 6420"
Get-CimInstance Win32_Process -Filter "ProcessId=6420" |
Select-Object ProcessId, Name, ExecutablePath, CommandLine
- 같은 폴더에 남아 있는 커널: 먼저 트레이 메뉴에서 v2rayN을 종료하고 몇 초 기다린 뒤 포트가 해제됐는지 다시 확인하세요.
- 다른 폴더에서 실행한 복사본: 프로세스 경로를 확인해 해당 창이나 트레이 아이콘을 찾고, 불필요한 복사본을 종료하세요. 자동 시작 항목 두 개가 같은 포트를 놓고 충돌하지 않도록 합니다.
- 정상적으로 작동 중인 다른 앱: 해당 앱은 종료하지 말고 v2rayN의 포트를 변경하세요. 프록시 진입점을 확보하려고 업무용 프로세스를 강제로 종료하지 마세요.
- 시스템 프로세스 또는 용도를 알 수 없는 프로세스: 프로세스 출처와 서비스 소속을 먼저 확인하세요. 강제 종료 명령을 바로 실행하면 안 됩니다.
macOS 및 Linux: lsof로 수신 프로세스 확인
데스크톱용 v2rayN의 화면은 운영체제에 따라 조금 다를 수 있지만 수신 충돌을 확인하는 방법은 같습니다. macOS에서는 lsof를 사용할 수 있으며, Linux에 해당 도구가 설치되어 있다면 같은 명령을 사용할 수 있습니다. TCP와 UDP는 각각 조회하세요:
lsof -nP -iTCP:10808 -sTCP:LISTEN
lsof -nP -iUDP:10808
결과의 COMMAND는 프로세스 이름, PID는 프로세스 번호, NAME은 수신 주소를 나타냅니다. Linux에서는 아래 명령으로 TCP 수신 상태와 프로세스 정보도 확인할 수 있습니다. 프로세스 정보가 권한 문제로 표시되지 않는다면 시스템 관리 규정에 따라 권한을 높인 터미널에서 조회하세요.
ss -ltnp 'sport = :10808'
ps -p 6420 -o pid,comm,args
- 먼저 앱 메뉴에서 해당 프로그램을 정상적으로 종료한 뒤 다시 조회하세요. 처음부터 강제 종료하지 마세요.
- 그래픽 창을 닫아도 백그라운드 서비스가 종료되지 않을 수 있습니다. 트레이, 메뉴 막대 또는 서비스 관리자도 함께 확인하세요.
- 서비스 관리자가 프로세스를 자동으로 다시 실행한다면 해당 서비스 설정을 조정하거나 v2rayN의 포트를 변경하세요. 프로세스를 반복해서 종료하지 마세요.
v2rayN 로컬 수신 포트 변경
여기서는 10808을 10818로 바꾸는 방법을 설명합니다. 10818은 구분하기 편하도록 든 예시일 뿐, 반드시 비어 있는 전용 포트는 아닙니다. 먼저 앞서 사용한 조회 명령으로 10818을 확인하세요. 관련 수신이 없는 것을 확인한 다음 설정을 변경합니다. 변경 전에 현재 포트, 수신 주소, LAN 연결 허용 여부를 기록해 두세요.
-
현재 설정 기록
「설정」→「매개변수 설정」을 열고 기본 설정에 표시된 현재 로컬 포트를 기록하세요. 버전에 따라 항목 이름이 조금씩 다릅니다. 7.x에서는 「Core: 기본 설정」 그룹과 「로컬 혼합 수신 포트」 항목이 흔히 보이지만, 실제 화면을 기준으로 확인하세요.
-
사용 가능한 포트 입력
「로컬 혼합 수신 포트」를
10818로 변경하세요. 현재 버전에서 로컬 SOCKS와 HTTP 포트가 따로 표시된다면 각각 기록하고 해당 항목을 수정하세요. 별도로 수신하는 두 항목에 같은 포트를 지정하면 안 됩니다. -
루프백 수신 유지
로컬에서만 사용할 경우 루프백 주소 수신을 유지하세요. 포트 충돌을 해결하려고 「LAN 연결 허용」을 켜지 마세요. 수신 범위를 넓혀도 점유된 포트가 해제되지는 않으며, 진입점에 접근할 수 있는 범위만 달라집니다.
-
저장 후 재시작
「확인」을 눌러 저장하세요. 화면에서 커널이 자동으로 재시작되지 않는다면 트레이 메뉴에서 v2rayN을 정상 종료한 뒤 다시 시작하세요. 이후 10818을 조회해 새 수신 프로세스가 이번에 시작한 커널인지 확인합니다.
-
시스템 프록시 재설정
트레이 메뉴의 「시스템 프록시」에서 먼저 「시스템 프록시 지우기」를 선택한 다음 「시스템 프록시 자동 설정」을 선택하세요. 현재 프록시 주소를 다시 적용하는 과정이며 라우팅 규칙의 직접 연결 또는 프록시 모드와는 별개입니다.
초기 6.x 화면은 이후 버전과 독립 HTTP 진입점, 혼합 진입점, 항목 이름이 다를 수 있습니다. 'HTTP 포트는 항상 10809' 같은 경험적 값을 그대로 적용하지 마세요. 혼합 진입점은 같은 포트에서 HTTP와 SOCKS 요청을 모두 받을 수 있지만, 독립 진입점은 실제 설정에 맞춰 각각 입력해야 합니다. 자동 생성되는 임시 커널 설정 파일도 수정하지 마세요. 화면에서 저장하거나 노드를 전환할 때 변경 사항이 덮어써질 수 있습니다.
브라우저, 시스템 프록시, 명령줄 설정 동기화
커널은 10818에서 수신 중인데 앱이 계속 10808에 연결하는 경우가 포트 변경 후 가장 흔히 놓치는 문제입니다. 시스템 프록시 설정은 해당 설정을 따르는 프로그램에만 적용됩니다. 프록시를 직접 지정한 앱, 환경 변수, 개별 명령줄 옵션은 각각 확인해야 합니다.
| 사용하는 진입점 | 확인할 위치 | 이 예시의 목표 값 |
|---|---|---|
| Windows 시스템 프록시 | 「설정」→「네트워크 및 인터넷」→「프록시」에서 수동 프록시 주소와 포트 확인 | 주소 127.0.0.1, 포트 10818 |
| 브라우저 수동 프록시 | 브라우저 연결 설정 또는 프록시 확장 프로그램에서 활성화된 구성 | 진입점 유형에 맞춰 HTTP 또는 SOCKS5를 선택하고 포트는 10818로 설정 |
| 명령줄 도구 | HTTP_PROXY, HTTPS_PROXY, ALL_PROXY 및 명령줄 옵션 | 10808을 가리키는 값을 새 값으로 변경 |
| 기타 앱 | 앱 내부의 「네트워크」 또는 「프록시」 설정 | 저장한 뒤 연결 다시 설정 |
PAC 스크립트를 사용한다면 스크립트 주소가 바뀌었는지만 확인하지 말고 스크립트가 실제로 반환하는 프록시 포트도 확인하세요. 브라우저가 이전 스크립트를 캐시하거나 기존 연결을 재사용할 수 있습니다. 설정을 업데이트한 뒤 스크립트를 다시 불러오거나 관련 앱을 재시작하세요. 앱의 수동 프록시와 시스템 프록시가 서로 다른 포트를 가리키게 두고, 웹페이지가 간혹 열린다는 이유만으로 정상이라고 판단하지 마세요.
# Windows PowerShell: 현재 터미널의 프록시 환경 변수 확인
Get-ChildItem Env: | Where-Object Name -Match '^(HTTP|HTTPS|ALL|NO)_PROXY$'
# macOS / Linux: 현재 터미널의 프록시 환경 변수 확인
env | grep -iE '^(http|https|all|no)_proxy='
환경 변수를 변경해도 일반적으로 이후에 시작하는 프로세스에만 적용됩니다. 이미 실행 중인 터미널, 편집기, 다운로드 작업에는 이전 값이 남아 있을 수 있습니다. 변수를 발견하면 터미널 설정 파일이나 시스템 환경 변수 화면 등 실제로 설정된 위치에서 값을 업데이트한 뒤 해당 프로그램을 다시 여세요. 임시 터미널 하나만 수정하고 점검을 끝내면 안 됩니다.
결과 확인: 로컬 연결 성공이 원격 접속 성공을 의미하지는 않습니다
두 단계로 확인하세요. 첫째, 로컬 진입점이 열려 있는지 확인하고, 둘째, 프록시 요청을 테스트합니다. Windows PowerShell에서는 먼저 아래 명령을 실행하세요. TcpTestSucceeded가 True여도 TCP 포트에 연결할 수 있다는 뜻일 뿐, 구독, 노드, DNS가 모두 정상이라는 의미는 아닙니다.
Test-NetConnection 127.0.0.1 -Port 10818
10818이 혼합 진입점이라면 HTTP와 SOCKS를 각각 테스트할 수 있습니다. 아래 요청은 문서 예시용 도메인을 사용하며 노드 속도 측정이나 지속적인 사용 가능 여부를 의미하지 않습니다. Windows PowerShell에서는 curl이 다른 명령으로 해석되는 구버전 환경을 피하기 위해 curl.exe를 명시하세요. macOS와 Linux에서는 curl을 사용합니다.
curl.exe --noproxy "" --proxy http://127.0.0.1:10818 --connect-timeout 10 --max-time 20 -I https://example.com/
curl.exe --noproxy "" --proxy socks5h://127.0.0.1:10818 --connect-timeout 10 --max-time 20 -I https://example.com/
- 즉시 연결 거부 오류가 발생함: 먼저 포트와 주소, 커널이 계속 실행 중인지 확인하세요. 노드는 아직 변경하지 마세요.
- 진입점에는 연결되지만 요청 시간이 초과됨: 커널의 DNS, 라우팅, 아웃바운드 로그를 추가로 확인하세요. 로컬 바인딩 문제는 이미 해결됐을 수 있습니다.
- 명령은 성공하지만 브라우저에서는 실패함: 브라우저의 프록시 설정, PAC 캐시, 기존 연결을 확인하세요.
- HTTP 또는 SOCKS 중 하나만 실패함: 해당 포트가 혼합 진입점인지 독립 프로토콜 진입점인지 확인하세요. 프로토콜 불일치를 포트 점유로 오해하면 안 됩니다.
자주 묻는 질문: 프로세스를 찾을 수 없거나 재부팅 후 문제가 반복되는 경우
netstat에 결과가 없는데도 포트를 사용할 수 없다고 표시되는 이유는 무엇인가요?
먼저 로그가 이번 시작 과정에서 나온 것인지 확인한 다음 IPv4와 IPv6, TCP와 UDP 유형을 확인하세요. Windows에서는 아래 명령으로 TCP 제외 범위를 확인할 수 있습니다. 10808이 범위에 포함되어 있다면 시스템 예약 항목을 직접 삭제하지 말고, 해당 범위에 없고 수신 중이지도 않은 포트로 변경하세요.
컴퓨터를 재부팅할 때마다 10808이 다시 사용 중으로 표시되나요?
Windows의 「설정」→「앱」→「시작 프로그램」과 작업 스케줄러에서 서로 다른 폴더의 v2rayN이 함께 시작되는지 확인하세요. 실제로 사용하는 복사본만 남기고 점유 프로세스의 전체 경로를 확인하세요. 프로세스 이름이 같다는 이유만으로 판단하면 안 됩니다.
10818로 바꾸면 VMess 또는 VLESS 노드에 영향을 주나요?
로컬 수신 포트와 노드의 원격 포트는 별개의 설정입니다. 로컬 진입점을 변경해도 구독에 있는 VMess 또는 VLESS 서버 포트를 바꾸거나 사용자 ID를 다시 생성할 필요는 없습니다. 업데이트해야 할 항목은 로컬 프록시에 연결하는 앱입니다.
TUN을 켜거나 관리자 권한으로 실행하면 충돌을 피할 수 있나요?
TUN의 트래픽 처리 방식은 다를 수 있지만 커널이 로컬 인바운드를 시작할 수 있으므로 중복 바인딩을 피한다고 보장할 수 없습니다. 관리자 권한으로 실행해도 다른 프로세스의 소켓이 자동으로 해제되지는 않습니다. 먼저 로그에 표시된 수신 실패를 해결한 뒤 TUN 라우팅과 DNS를 별도로 확인하세요.
netsh interface ipv4 show excludedportrange protocol=tcp
netsh interface ipv6 show excludedportrange protocol=tcp