Windows에서 v2rayN을 실행한 뒤 bind, address already in use 또는 포트 액세스 거부 오류가 발생할 때 적용할 수 있습니다. 먼저 로그에서 로컬 포트를 확인한 다음 PowerShell로 수신 프로세스를 찾습니다. 중복 실행된 인스턴스라면 정상 종료하고, 다른 프로그램이라면 사용 가능한 포트로 변경하세요. 마지막으로 시스템 프록시와 수동 프록시 주소를 함께 바꾸고 코어의 포트 수신, 프록시 연결, 웹 요청을 차례로 확인합니다.
1. 로그에서 충돌한 포트가 로컬 포트인지 확인
먼저 v2rayN 메인 화면의 로그 영역을 열고 코어를 다시 시작한 뒤 listen, bind, 주소와 포트가 포함된 오류 내용을 확인합니다. 여기서는 127.0.0.1:10808을 예로 듭니다. 로그에 다른 포트가 표시되면 아래 명령의 포트도 그 값으로 바꾸세요. 안내에 나온 기본값만 보고 판단하지 마세요.
bind: Only one usage of each socket address (protocol/network address/port) is normally permitted.
원인 및 해결: 동일하거나 겹치는 수신 주소, 프로토콜, 포트를 이미 다른 프로세스가 사용 중입니다. 수신 프로세스를 조회해 어떤 프로그램인지 확인한 뒤 중복 인스턴스를 종료하거나 로컬 인바운드 포트를 변경하세요.
bind: An attempt was made to access a socket in a way forbidden by its access permissions.
원인 및 해결: 포트가 Windows에서 예약되어 있거나 보안 정책의 제한을 받는 경우일 수 있습니다. 일반적인 수신 프로세스가 없을 수도 있습니다. 먼저 수신 상태를 확인하고 제외 포트 범위도 조회하세요. 방화벽을 바로 끄지는 마세요.
이 오류는 로컬에서 프록시 요청을 받는 단계에서 발생하며 원격 노드 연결 단계에는 아직 도달하지 않았습니다. 구독을 수정하거나 VMess 또는 VLESS로 전환하거나 원격 서버 포트를 변경해도 이미 사용 중인 로컬 10808 포트는 해제되지 않습니다. 로컬 포트와 노드 서버 포트가 같아야 하는 것도 아닙니다.
판단 기준: 먼저 수신 문제를 해결한 뒤 노드를 테스트하세요
로그에 로컬 bind 실패가 계속 표시되면 노드 지연 시간 테스트는 잠시 미루세요. 지정한 포트가 먼저 수신 상태가 되어야 이후 노드 테스트 결과를 유의미하게 진단할 수 있습니다.
2. PowerShell로 10808 포트를 사용하는 프로세스 찾기
Windows PowerShell을 열고 TCP 수신 기록을 조회합니다. 아래 명령은 로컬 포트만 검색하므로 원격 10808 포트에 연결된 일반 연결을 수신 충돌로 잘못 판단하지 않습니다. 결과가 없으면 출력이 비어 있습니다. 이는 조회 시점에 일치하는 TCP 수신 기록이 없다는 뜻일 뿐입니다.
Get-NetTCPConnection -State Listen -LocalPort 10808 -ErrorAction SilentlyContinue |
Select-Object LocalAddress, LocalPort, State, OwningProcess
LocalAddress와 OwningProcess를 확인하세요. 0.0.0.0은 모든 IPv4 주소에서 수신한다는 뜻이므로 루프백 주소의 같은 포트와 충돌할 수 있습니다. ::는 IPv6 와일드카드 주소로, 듀얼 스택 동작도 고려해야 합니다. 주소가 127.0.0.1이 아니라는 이유만으로 해당 기록을 무시하지 마세요.
# 앞 단계에서 OwningProcess가 6240으로 나온 경우를 가정합니다. 실제 결과에 맞게 바꾸세요
Get-Process -Id 6240 |
Select-Object Id, ProcessName, Path
Get-CimInstance Win32_Process -Filter "ProcessId = 6240" |
Select-Object ProcessId, ParentProcessId, ExecutablePath, CommandLine
6240은 예시 PID일 뿐 고정된 프로세스 번호가 아닙니다. 경로나 명령줄이 비어 있으면 관리자 권한으로 다시 조회하세요. 코어 프로세스로 보인다면 부모 프로세스도 확인해야 합니다. 실행 중인 v2rayN이 프록시 포트를 사용하는 것은 정상이며, 프로세스 이름만 보고 비정상이라고 단정할 수 없습니다.
- 같은 v2rayN의 정상 코어: 로그가 이전 기록인지 확인하고 현재 요청이 정상적으로 처리되는지도 살펴보세요. 정상 연결을 잘못 종료하지 않도록 주의해야 합니다.
- 다른 폴더에서 실행된 중복 인스턴스: 해당 인스턴스의 시스템 트레이 아이콘을 찾아 정상적으로 종료하세요. 메인 창만 닫으면 트레이로 최소화될 수 있습니다.
- 다른 프로그램: 해당 프로그램의 수신은 유지하고, 기존 서비스에 영향을 주지 않도록 v2rayN의 로컬 포트를 변경하는 편이 좋습니다.
- 경로나 용도를 알 수 없는 경우: 작업 관리자에서 파일 위치와 관련 서비스를 확인하세요. PID만 보고 무작정 종료하지 마세요.
3. 수신 기록이 없을 때 UDP와 시스템 예약 포트 확인
TCP와 UDP는 서로 다른 전송 프로토콜입니다. 같은 번호의 포트를 TCP와 UDP가 각각 사용할 수 있으므로 UDP 기록만으로 TCP 수신 충돌을 단정할 수 없습니다. 로그에 UDP 인바운드 바인딩 실패가 명확히 표시되면 UDP 엔드포인트를 조회하고 결과에 나온 PID로 프로세스를 확인하세요.
Get-NetUDPEndpoint -LocalPort 10808 -ErrorAction SilentlyContinue |
Select-Object LocalAddress, LocalPort, OwningProcess
액세스 거부 오류가 발생하고 TCP와 UDP 모두에서 해당 기록이 없다면 Windows의 제외 포트 범위를 확인하세요. 가상화, 컨테이너, 시스템 네트워크 구성 요소가 이 범위에 영향을 줄 수 있습니다. 아래 명령은 조회만 하며 설정을 바꾸지 않습니다. 필요한 경우 관리자 터미널에서 실행하세요.
netsh interface ipv4 show excludedportrange protocol=tcp
netsh interface ipv6 show excludedportrange protocol=tcp
10808이 출력된 시작 포트와 끝 포트 사이에 포함되는지 확인하세요. 완전히 같은 한 줄만 찾으면 안 됩니다.- 제외 범위에 포함된다면 범위 밖의 새 포트를 선택하고, 이미 수신 중인 프로세스가 있는지도 다시 확인하세요.
- 로그에서 UDP가 문제로 표시되면 조회할 때
protocol=tcp를protocol=udp로 바꾸세요. - 시스템 예약 범위를 임의로 삭제하지 말고, 로컬 프록시 문제를 해결하려고 보안 기능 전체를 비활성화하지도 마세요. 계속 거부된다면 보안 소프트웨어의 이벤트 기록과 조직의 장치 정책을 확인하세요.
프로그램이 시작 직후 종료되어 조회 시점에는 수신 기록이 사라지는 경우도 있습니다. 이때는 코어를 다시 시작하고 최신 로그와 포트 기록을 바로 확인하세요. 한 번 조회한 결과가 비어 있다고 해서 포트가 계속 사용 가능하다고 볼 수 없으며, 노드를 사용할 수 없다는 뜻도 아닙니다.
4. 설정에서 로컬 수신 포트 변경
여기서는 10808을 10818로 바꾸는 방법을 예로 듭니다. 새 포트는 예시이므로 사용 전에 앞서 설명한 수신 조회와 제외 범위 확인을 다시 진행하세요. v2rayN 버전에 따라 항목 이름이 '로컬 혼합 수신 포트'로 표시되거나 SOCKS와 HTTP 포트가 따로 나뉠 수 있습니다. 실제 항목의 기능을 확인해 설정하세요.
-
기존 설정 기록
현재 로컬 포트, 수신 주소, 시스템 프록시 상태를 적어 두세요. 브라우저 확장 프로그램, 터미널 환경 변수, 개발 도구에서 기존 포트를 직접 사용하는 경우도 함께 기록합니다.
-
새 포트 사용 가능 여부 확인
조회 명령에서
10808을10818로 바꾸고, 충돌하는 수신 프로세스가 없는지 확인하세요. 새 포트가 관련 제외 범위에 포함되지 않는지도 확인합니다. -
인바운드 포트 변경
'설정' → '매개변수 설정' → '기본 설정'으로 이동해 로컬 수신 포트 항목을 찾습니다. 혼합 인바운드라면
10818을 입력하세요. SOCKS와 HTTP를 따로 설정하는 화면에서는 각 항목에 서로 다른 포트를 지정해야 합니다. 서로 독립된 두 인바운드가 같은 TCP 주소와 포트에 바인딩되지 않도록 하세요. -
저장 후 재시작
'확인'을 눌러 저장하고 코어가 설정을 다시 불러오도록 하세요. 자동으로 재시작되지 않으면 v2rayN을 정상 종료한 뒤 다시 실행합니다. 이번 시작 로그에 새로운 bind 오류가 없는지 확인하세요.
-
프록시 주소 동기화
메인 화면 아래쪽의 '시스템 프록시'에서 먼저 '시스템 프록시 해제'를 선택한 다음 '시스템 프록시 자동 설정'을 선택하세요. 수동 프록시 도구에서 사용 중인 기존 포트도 새 포트로 바꾸세요.
일부 오래된 설정에서는 SOCKS와 HTTP가 각각 10808과 10809를 사용합니다. 혼합 인바운드는 한 포트에서 두 종류의 프록시 요청을 모두 받을 수 있습니다. 'HTTP 포트는 항상 SOCKS 포트보다 1 크다'는 규칙을 그대로 적용하지 마세요. 사용자 지정 설정을 사용하는 경우 화면의 항목이 해당 설정 파일의 인바운드를 제어하지 않을 수 있으므로 실제로 불러온 설정 파일과 로그를 확인하세요.
5. 포트 변경 후 프록시 복구 여부를 세 단계로 확인
먼저 새 포트에서 현재 코어가 실제로 수신 중인지 확인하고, 명령줄에서 프록시를 명시해 테스트한 다음, 앱이 기존 포트를 계속 참조하는지 확인하세요. 이렇게 하면 코어 시작 실패, 노드 연결 실패, 앱 설정 미갱신을 구분해 해결할 수 있습니다.
Get-NetTCPConnection -State Listen -LocalPort 10818 -ErrorAction SilentlyContinue |
Select-Object LocalAddress, LocalPort, State, OwningProcess
# 10818이 HTTP 또는 혼합 인바운드로 설정된 경우에만 적용
curl.exe --proxy http://127.0.0.1:10818 --connect-timeout 10 --max-time 20 -I https://www.microsoft.com/
일부 PowerShell 환경에서는 curl이 다른 명령으로 해석될 수 있으므로 여기서는 curl.exe를 명시적으로 실행합니다. 공개 HTTPS 페이지를 대상으로 테스트합니다. 해당 페이지에 접속할 수 없다면 접속 여부를 확인한 다른 HTTPS 주소를 사용하세요. 화면 캡처나 로그에 구독 링크와 노드 인증 정보가 노출되지 않도록 주의하세요.
| 확인 결과 | 의미 | 다음 단계 |
|---|---|---|
| 10818에서 수신하지 않음 | 설정이 적용되지 않았거나 코어 시작에 실패했습니다 | 최신 시작 로그를 확인하고 설정 항목과 실제로 불러온 설정을 대조하세요 |
| 로컬 프록시에 연결할 수 없다는 오류 | 주소, 포트 또는 인바운드 프로토콜이 일치하지 않습니다 | 수신 주소를 확인하고 SOCKS 포트를 HTTP 포트로 잘못 사용하지 않았는지 살펴보세요 |
| CONNECT 성공 후 요청 실패 | 로컬 프록시 연결은 성립했지만 이후 연결 경로에 문제가 있습니다 | 노드, DNS, TLS, 대상 사이트의 응답을 확인하세요 |
| 최종 HTTP 응답 수신 | 이번 요청은 지정한 로컬 프록시를 통해 완료됐습니다 | 브라우저와 다른 앱의 프록시 설정을 확인하세요 |
해당 포트가 SOCKS 서비스만 제공한다면 아래 명령을 사용하세요. socks5h는 대상 도메인 조회를 프록시 측에 맡깁니다. HTTP 테스트와 SOCKS 테스트는 인바운드 유형에 맞춰 선택하는 것이며, 모든 설정이 두 유형을 동시에 지원해야 하는 것은 아닙니다.
curl.exe --proxy socks5h://127.0.0.1:10818 --connect-timeout 10 --max-time 20 -I https://www.microsoft.com/
정리: 로컬 요청이 성공한 뒤 앱별 차이를 확인하세요
프록시를 명시한 테스트는 성공하지만 브라우저에서 실패한다면 브라우저의 별도 프록시 설정, 이전 포트 캐시, 시스템 프록시 상태부터 확인하세요. 포트를 계속 바꿀 필요는 없습니다. 요청이 로컬 프록시에 도달했다고 해서 반드시 원격 노드를 통과하는 것은 아닙니다. 최종 출구는 라우팅 분기 규칙에 따라 달라집니다.
6. 포트 충돌 및 변경 관련 자주 묻는 질문
점유 프로세스가 코어로 확인되면 바로 종료해도 되나요?
경로와 부모 프로세스를 확인해 어느 프로그램에 속하는지 먼저 파악하세요. 현재 정상 작동 중인 코어일 수도 있고 다른 v2rayN 인스턴스의 코어일 수도 있습니다. 해당 관리 프로그램을 먼저 종료하세요. 잔류 프로세스임을 확인한 경우에만 작업 관리자에서 종료한 뒤 포트를 다시 조회하세요.
10818로 바꿨는데 터미널에서 계속 10808 연결 실패가 뜨는 이유는 무엇인가요?
HTTP_PROXY, HTTPS_PROXY, ALL_PROXY 환경 변수와 개발 도구 자체의 프록시 설정을 확인하세요. 올바른 새 포트로 바꾸고 터미널을 다시 여세요. 이미 실행 중인 프로세스는 이후에 변경한 환경 변수를 자동으로 다시 읽지 않는 경우가 많습니다.
컴퓨터를 재시작하면 해결되지만 잠시 후 다시 포트가 점유되면 어떻게 하나요?
충돌이 발생했을 때 PID, 경로, 부모 프로세스를 다시 기록하고 v2rayN 인스턴스 두 개 또는 다른 프록시 서비스가 동시에 자동 시작되는지 확인하세요. 필요한 시작 항목만 남기세요. 여러 프로그램을 함께 실행해야 한다면 서로 겹치지 않는 수신 포트를 각각 지정해야 합니다.
TUN을 켠 뒤에도 포트 오류가 발생하면 이 문서의 방법으로 확인해야 하나요?
로그에 로컬 인바운드 bind 실패가 명확히 표시되면 이 문서의 방법으로 해당 포트를 확인하세요. 가상 네트워크 어댑터 생성, 드라이버, 라우팅 권한과 관련된 로그라면 다른 유형의 문제입니다. 먼저 TUN을 끄고 로컬 HTTP 또는 SOCKS 인바운드로 기본 동작을 확인한 다음 TUN 문제를 따로 해결하세요.
아주 큰 포트 번호로 바로 바꿔도 되나요?
사용 중이 아니고 제외 범위에도 포함되지 않는 포트를 선택하면 됩니다. 유효한 포트 번호 범위는 1~65535입니다. 숫자가 크다고 반드시 비어 있는 것은 아니므로 변경 전에 조회하고, 변경 후에는 모든 수동 프록시 설정도 새 포트로 바꾸세요.
문제 해결 후에는 충돌한 포트, 점유 프로그램 경로, 변경한 인바운드 유형과 포트, 테스트 결과를 간단히 기록해 두세요. 다음에 클라이언트를 업데이트하거나 설정을 복원할 때 이 값을 먼저 확인하면 노드를 반복해서 바꾸는 것보다 원인을 쉽게 찾을 수 있습니다.