v2rayN 실행 시 코어 시작에 실패하거나 로그에 bind 오류가 표시되는 경우, 또는 포트를 바꾼 뒤에도 브라우저가 연결되지 않는 경우에 참고하세요. 먼저 수신 주소와 포트를 확인하고, 점유 프로세스를 찾은 다음 중복 실행을 종료하거나 로컬 포트를 바꾸면 됩니다. Windows에서는 netstat와 PowerShell을, macOS와 Linux에서는 lsof를 사용하세요. 변경 후에는 시스템 프록시, 브라우저, 명령줄 환경도 함께 확인해야 합니다.
먼저 로컬 수신 실패인지 확인
v2rayN은 데스크톱 클라이언트이며, 실제로 로컬 포트를 열어 수신하는 것은 클라이언트가 실행한 프록시 코어입니다. 브라우저가 먼저 로컬 프록시 주소에 연결하면 코어가 라우팅 규칙에 따라 트래픽을 전달합니다. 포트 바인딩에 실패하면 요청은 원격 서버에 연결되기도 전 단계에서 멈춥니다. 이때 구독을 반복해서 업데이트하거나 VMess 또는 VLESS 설정을 바꿔도 보통 포트 충돌은 해결되지 않습니다.
v2rayN 메인 화면의 로그 영역을 열고 오류 행에 표시된 프로토콜, 수신 주소, 포트를 기록하세요. 아래 두 오류는 모두 바인딩 실패를 뜻하지만, 운영체제와 코어에 따라 표현이 다를 수 있습니다. 로그 앞부분에 시간, 인바운드 이름이나 다른 정보가 함께 표시될 수도 있습니다.
bind: Only one usage of each socket address (protocol/network address/port) is normally permitted.
원인: Windows에서 필요한 주소와 포트를 다른 프로그램이 이미 사용 중입니다. 해결: 로그에 표시된 포트로 PID를 조회하고, 프로세스를 확인한 뒤 중복 실행을 종료하거나 v2rayN의 로컬 수신 포트를 바꾸세요.
bind: address already in use
원인: macOS 또는 Linux에서 바인딩하려는 주소와 포트를 이미 사용 중입니다. 해결: lsof로 수신 프로세스를 확인하고 충돌하는 서비스를 중지하거나, v2rayN에 비어 있는 다른 포트를 할당하세요.
Windows: 수신 포트로 프로세스 찾기
PowerShell 또는 명령 프롬프트에서 다음 명령을 실행하세요. netstat 결과에는 로컬 주소와 원격 주소가 모두 포함될 수 있으므로 전체 행을 확인해야 합니다. 로컬 주소가 찾으려는 포트와 일치하고 상태가 LISTENING인 행에서 마지막 열이 수신 프로세스의 PID입니다. 원격 주소에 10808이 포함된 연결을 포트 점유 프로세스로 오인하지 마세요.
netstat -ano -p tcp | findstr ":10808"
netstat -ano -p tcp | findstr ":10809"
출력 결과가 많으면 PowerShell로 로컬 포트와 수신 상태를 기준으로 정확히 필터링하세요. 두 번째 명령은 조회한 PID를 Get-Process에 전달해 해당 프로세스 이름을 표시합니다.
Get-NetTCPConnection -State Listen -LocalPort 10808,10809 -ErrorAction SilentlyContinue |
Select-Object LocalAddress,LocalPort,State,OwningProcess
Get-NetTCPConnection -State Listen -LocalPort 10808,10809 -ErrorAction SilentlyContinue |
Select-Object -ExpandProperty OwningProcess -Unique |
ForEach-Object { Get-Process -Id $_ }
- 먼저 실행 중인 v2rayN을 종료하세요. 트레이 메뉴에서 종료를 선택해야 합니다. 메인 창을 닫아도 프로그램이 완전히 종료되지 않을 수 있습니다. 종료한 뒤 포트를 다시 조회하세요.
- 수신이 사라졌다면: 해당 포트를 열었던 프로세스는 현재 실행 중인 인스턴스일 가능성이 큽니다. v2rayN을 하나만 다시 실행해 문제가 재현되는지 확인하세요. 코어 프로세스를 바로 종료할 필요는 없습니다.
- 수신이 계속된다면: 작업 관리자의 ‘세부 정보’에서 PID로 프로세스를 찾고 실행 파일 경로와 명령줄을 확인하세요. 필요하면 열 선택 메뉴에서 해당 열을 표시하세요.
- 프로세스가 어떤 프로그램에 속하는지 확인한 뒤 조치하세요. 중복 실행된 v2rayN은 정상 종료해도 됩니다. 계속 실행해야 하는 다른 서비스라면 강제 종료하지 말고 현재 클라이언트의 포트를 바꾸는 편이 좋습니다.
코어 프로세스 이름이 보인다고 해서 남은 프로세스라고 단정할 수는 없습니다. 다른 인스턴스가 같은 코어를 실행 중일 수도 있습니다. 파일 경로, 부모 프로세스, 실행 중인 클라이언트를 먼저 확인하세요. 프로세스 경로를 조회할 때 권한 오류가 나면 관리자 권한으로 터미널을 다시 열어 조회할 수 있지만, 클라이언트를 관리자 권한으로 실행하는 것을 포트 충돌의 일반적인 해결책으로 삼지는 마세요.
macOS 및 Linux: lsof로 수신 프로세스 확인
터미널에서 다음 명령을 실행하세요. -nP는 주소와 포트를 숫자로 표시해 이름 변환을 방지하고, -sTCP:LISTEN은 TCP 수신만 표시합니다. 출력의 COMMAND, PID, NAME으로 각각 프로세스 이름, 프로세스 ID, 수신 주소를 확인할 수 있습니다.
lsof -nP -iTCP:10808 -sTCP:LISTEN
lsof -nP -iTCP:10809 -sTCP:LISTEN
- 일반 사용자 계정으로 예상한 프로세스가 보이지 않는다면, 권한이 있는 경우
sudo lsof로 다시 조회하세요. - Linux에서 lsof를 찾을 수 없다는 메시지가 나오면
sudo ss -ltnp 'sport = :10808'으로 수신 상태와 프로세스 정보를 확인하세요. - 먼저 해당 프로그램의 인터페이스에서 정상적으로 종료하세요. 백그라운드 서비스라면 서비스 관리 도구로 중지해야 합니다. 정체를 모르는 PID를 강제 종료하지 마세요.
- 조치한 뒤 같은 포트를 다시 조회하세요. 수신이 곧바로 다시 시작되면 시작 프로그램, 백그라운드 서비스 또는 다른 클라이언트 인스턴스를 확인하세요. 프로세스를 반복해서 강제 종료하지 마세요.
v2rayN 로컬 수신 포트 변경
점유 프로세스를 그대로 둬야 하는 경우에만 v2rayN 설정을 변경하세요. 되돌릴 수 있도록 기존 포트와 현재 시스템 프록시 상태를 먼저 기록합니다. 화면에 따라 ‘로컬 혼합 수신 포트’로 표시되거나 SOCKS와 HTTP 포트가 따로 나올 수 있습니다. 실제로 표시되는 항목을 수정하고, 오래된 안내를 따라 현재 화면에 없는 HTTP 입력란을 찾지 마세요.
-
새 포트 확인
앞에서 사용한 명령으로 11808을 확인하세요. 현재 설정에서 두 프로토콜을 각각 수신한다면 11809도 확인해야 합니다. 수신 프로세스가 보이지 않는다는 것은 현재 사용 중이 아니라는 뜻일 뿐, 나중에 다른 프로그램이 사용하지 않는다는 보장은 없습니다.
-
설정 열기
메인 화면에서 ‘설정’ → ‘매개변수 설정’ → ‘Core 기본 설정’으로 이동해 로컬 수신 포트 항목을 찾으세요. 메뉴 구성이 다르다면 로컬 포트나 수신 주소가 포함된 설정 화면을 확인하면 됩니다.
-
새 포트 입력
혼합 수신 설정은 11808로 바꾸세요. SOCKS와 HTTP를 따로 수신한다면 각각 11808과 11809로 변경할 수 있습니다. 로컬 인바운드 포트만 수정하고 서버 설정 창의 원격 포트는 바꾸지 마세요.
-
저장 후 재시작
설정을 저장하고 클라이언트가 적용할 때까지 기다리세요. 로그에 재시작이 표시되지 않으면 트레이 메뉴에서 정상 종료한 뒤 인스턴스 하나만 다시 실행하고, 새 로그에 bind 오류가 남아 있는지 확인하세요.
-
수신 상태 재확인
11808의 수신 PID를 조회해 이번에 시작한 코어의 프로세스인지 확인하세요. 기존 10808을 다른 서비스가 계속 사용해도 괜찮습니다. 중요한 점은 v2rayN이 새 포트를 정상적으로 열었는지입니다.
클라이언트가 자동 생성한 실행 설정 파일을 직접 수정해 포트 변경을 유지하려고 하지 마세요. 서버를 바꾸거나 설정을 저장하거나 코어를 재시작하면 파일이 다시 생성될 수 있습니다. 사용자 지정 설정을 사용한다면 사용자 지정 인바운드의 listen, port, protocol도 확인하세요. 화면의 설정만 바꾸고 이전 인바운드가 계속 로드되는 일을 방지할 수 있습니다.
시스템 프록시와 앱의 프록시 주소 함께 변경
포트 변경이 끝나도 브라우저가 이전 주소인 127.0.0.1:10809로 요청할 수 있습니다. 이 경우 코어는 정상적으로 시작했지만 앱이 올바른 프록시 주소에 연결하지 못하는 것입니다. 노드를 계속 바꾸지 말고 각 프록시 주소를 하나씩 업데이트하세요.
| 위치 | 확인할 항목 | 변경 예시 |
|---|---|---|
| v2rayN 시스템 프록시 | 트레이의 ‘시스템 프록시’에서 선택된 항목과 설정된 주소 | 먼저 ‘시스템 프록시 해제’를 선택한 뒤 ‘시스템 프록시 자동 설정’을 선택하고 실제 주소를 확인하세요. |
| 시스템 설정을 따르는 브라우저 | 별도의 수동 프록시 규칙이 아니라 실제로 시스템 프록시를 사용하는지 확인 | 시스템 HTTP 프록시가 HTTP 포트 또는 혼합 수신 포트를 가리키는지 확인 |
| 브라우저별 프록시 | 수동 설정에 지정된 프로토콜, 주소, 포트 | SOCKS5는 127.0.0.1:11808을 사용하고, HTTP는 실제 HTTP 또는 혼합 수신 포트를 사용하세요. |
| 명령줄 도구 | HTTP_PROXY, HTTPS_PROXY, ALL_PROXY 등의 환경 변수 | 이전 포트 설정을 지우세요. 영구 환경 변수를 변경했다면 터미널을 새로 여세요. |
| 기타 앱 | 다운로드 도구와 개발 도구에 별도로 저장된 프록시 주소 | 브라우저만 다시 연결되는 상황을 방지하려면 각 앱의 이전 포트를 바꾸세요. |
시스템 프록시 설정이 모든 앱의 개별 설정을 자동으로 덮어쓰는 것은 아니며, 이미 실행 중인 터미널의 환경 변수도 바뀌지 않습니다. Windows에서는 ‘설정’ → ‘네트워크 및 인터넷’ → ‘프록시’에서 실제로 적용된 프록시 주소를 확인할 수 있습니다. PAC 모드를 사용한다면 PAC가 반환하는 프록시 포트도 업데이트됐는지 확인하세요. 문제를 진단할 때는 먼저 명확한 수동 프록시 주소로 연결을 테스트해 변수를 줄이세요.
로컬 연결과 원격 요청을 단계별로 확인
테스트할 때는 로컬 TCP 연결 여부와 프록시 요청 성공 여부를 따로 확인하세요. Windows PowerShell에서 먼저 새 수신 포트를 확인합니다. TcpTestSucceeded가 True여도 누군가 TCP 연결을 받아들였다는 뜻일 뿐, 노드, DNS, TLS, 라우팅까지 모두 정상이라는 의미는 아닙니다. 수신 프로세스가 올바른지도 확인해야 합니다.
Test-NetConnection -ComputerName 127.0.0.1 -Port 11808
그다음 curl에서 프록시를 직접 지정해 시스템 프록시 적용 여부와 무관하게 테스트하세요. 아래 예시는 SOCKS5 또는 혼합 수신 설정에 적합합니다. socks5h는 대상 도메인의 DNS 조회를 프록시에 맡긴다는 뜻입니다. Windows PowerShell에서는 curl.exe를, macOS와 Linux에서는 curl을 사용해 같은 인수를 실행하세요.
curl.exe --proxy socks5h://127.0.0.1:11808 --connect-timeout 10 --max-time 30 -I https://v2rayopenwrt.com/
- 로컬 포트 연결이 거부되었다면: 수신 포트 조회로 돌아가 포트 입력이 잘못됐는지, 코어가 종료됐는지, 수신 주소가 127.0.0.1이 아닌지 확인하세요.
- 프록시 프로토콜 오류가 발생했다면: SOCKS 전용 주소에 HTTP 요청을 보내거나 그 반대 상황인지 확인하세요. 포트 번호만으로는 프로토콜을 알 수 없습니다.
- 로컬 연결은 성공했지만 핸드셰이크가 실패하거나 시간 초과가 발생했다면: 노드, DNS, TLS, 라우팅 로그를 확인하세요. 이 경우는 포트 점유 문제로 분류하지 않습니다.
- curl은 성공하지만 브라우저에서 실패한다면: 브라우저별 프록시, 시스템 프록시, PAC 설정을 확인하세요. 특히 이전 포트 10808과 10809가 남아 있는지 살펴보세요.
예시의 연결 시간 초과 10초와 전체 시간 초과 30초는 명령 인수이며 성능 측정 결과가 아닙니다. 한 웹사이트의 HTTP 상태만으로 모든 대상에 연결할 수 있다고 판단할 수도 없습니다. 여기서는 요청이 올바른 로컬 프록시 주소를 거치는지와 오류가 어느 단계에서 발생하는지를 확인합니다.
자주 묻는 질문과 재발 방지
점유 프로세스가 보이지 않는데 왜 오류가 발생하나요?
먼저 10808만 고정으로 확인하지 말고 오류 행에 표시된 포트를 조회했는지 확인하세요. 오류가 address already in use가 아니라 ‘소켓에 접근할 권한이 없습니다’라면 Windows에서 netsh interface ipv4 show excludedportrange protocol=tcp을 실행해 시스템에서 제외한 포트 범위를 확인할 수 있습니다. 시스템 예약 범위를 직접 삭제하지 말고, 해당 범위에 포함되지 않으면서 사용 중이지 않은 포트를 선택하세요.
11808로 바꾸면 구독을 다시 가져와야 하나요?
그럴 필요 없습니다. 로컬 수신 포트는 앱이 프록시에 접속하는 주소이고, 구독의 서버 주소와 원격 포트는 별도의 설정입니다. 로컬 설정을 저장하고 코어를 재시작한 뒤 앱의 프록시 주소를 업데이트하세요. 로컬 포트 충돌을 해결하려고 구독 내용을 수정하지 마세요.
컴퓨터를 재시작하면 충돌이 다시 발생합니다. 어떻게 해결하나요?
컴퓨터를 재시작한 뒤 v2rayN을 직접 실행하기 전에 포트를 조회해 시작 프로그램이나 서비스가 먼저 포트를 사용하고 있는지 확인하세요. v2rayN 자동 시작이 두 군데에서 설정되어 두 인스턴스가 동시에 실행되는지도 확인합니다. 인스턴스 하나만 남기거나 함께 실행해야 하는 서비스에 서로 다른 포트를 할당한 다음 전체 시작 과정을 다시 점검하세요.
UDP 포트도 바꾸거나 방화벽을 꺼야 하나요?
로그에 표시된 tcp 또는 udp에 따라 각각 확인하세요. TCP와 UDP 포트는 별개의 공간이므로 하나로 취급하면 안 됩니다. 이 글의 명령은 주로 TCP 수신을 확인합니다. UDP 바인딩 실패가 명확하다면 Windows에서는 Get-NetUDPEndpoint를, macOS와 Linux에서는 lsof의 UDP 조회를 사용할 수 있습니다. 바인딩 충돌을 해결하려고 방화벽 전체를 끄지 마세요.