먼저 한 기기에서 Xray 아웃바운드 연결을 확인한 뒤, 바이패스 라우터의 게이트웨이와 DNS, 투명 트래픽 가로채기를 설정하고 다른 기기로 범위를 넓히세요. OpenWrt와 Linux 네트워크 스택을 기준으로 하드웨어 예산, 코어 설정, 방화벽 규칙을 구분해 설명합니다. 사용 가능한 노드가 있고 단일 기기의 프록시를 LAN 전체로 확장하려는 독자에게 적합합니다. 예시 주소와 포트는 네트워크 구성을 설명하기 위한 것으로, 펌웨어의 기본값을 뜻하지 않습니다.
1. 하드웨어 선택: CPU 아키텍처와 가용 메모리 확인
Xray는 연결, 프로토콜, 라우팅을 처리하는 코어이지 라우터 펌웨어가 아니며 범용 라우터 관리 화면도 제공하지 않습니다. Linux를 실행할 수 있다고 해서 모든 Xray 바이너리가 동작하는 것은 아닙니다. CPU 아키텍처와 명령어 집합, 시스템 환경, 쓰기 가능한 저장 공간이 모두 맞아야 합니다. 다운로드하기 전에 uname -m으로 아키텍처를 확인하고, free -m과 df -h로 메모리와 저장 공간의 여유를 확인하세요.
아래 내용은 배포 시 참고할 예산 기준이며, 최소 실행 사양이나 처리량을 보장하지 않습니다. 동시 연결 수, 규칙 규모, 암호화 부하, 로그 양에 따라 필요한 자원이 달라집니다. 제품 포장에 표시된 무선 속도를 프록시 처리 성능으로 간주해서도 안 됩니다.
기존 메인 라우터
먼저 펌웨어에서 아키텍처에 맞는 패키지를 설치할 수 있는지 확인하세요. 메모리가 128 MB뿐인 기기에서 무선, 인터넷 연결, 기타 서비스까지 함께 처리한다면 남은 자원을 먼저 살펴봐야 합니다. 규칙을 불러오거나 업데이트할 때는 유휴 상태보다 순간적으로 더 많은 자원이 필요할 수 있습니다.
적합한 환경: 연결 기기가 많지 않고 지원되는 펌웨어를 사용하며, 유지보수 중 전체 네트워크가 잠시 끊겨도 괜찮은 경우
독립형 바이패스 라우터
권장처음 구축한다면 64비트 듀얼 코어, 메모리 1 GB, 쓰기 가능한 저장 공간 1 GB 이상인 기기부터 시작할 수 있습니다. 별도 기기를 사용하면 되돌리기가 쉽고, 프록시 서비스를 조정할 때 메인 라우터의 무선이나 인터넷 연결 서비스를 함께 재시작하지 않아도 됩니다.
적합한 환경: 가정 네트워크에서 한 기기로 먼저 테스트한 뒤 트래픽 가로채기 범위를 단계적으로 넓히려는 경우
상시 가동 Linux 호스트
미니 PC나 가상 머신이 이미 있다면 코어를 독립적으로 실행해 볼 수 있습니다. 가상 머신을 사용하는 경우 가상 네트워크 카드의 브리지 방식, 호스트 방화벽, 부팅 순서를 확인해야 합니다. 가상 머신 내부 설정만 살펴서는 충분하지 않습니다.
적합한 사용자: Linux 서비스 관리에 익숙하고 로그를 보존하면서 네트워크 경로를 단계별로 점검하려는 경우
결론: 독립적인 복구 경로를 우선 확보하세요
처음 구축할 때는 바이패스 라우터를 선택하고, 테스트 기기를 메인 라우터에 직접 연결하는 방법도 마련해 두세요. 장애가 나면 테스트 기기의 게이트웨이와 DNS를 메인 라우터로 되돌리는 편이 전체 네트워크가 끊긴 뒤 방화벽을 복구하는 것보다 통제하기 쉽습니다.
2. 메인 라우터와 바이패스 라우터: 데이터 경로부터 정리
메인 라우터는 보통 인터넷 연결, NAT, DHCP, 기본 게이트웨이를 담당합니다. 바이패스 라우터는 LAN에 추가로 연결하는 트래픽 전달 장치로, 케이블만 연결한다고 집 안의 트래픽을 자동으로 가져오지는 않습니다. 단말이 해당 트래픽을 바이패스 라우터로 보내거나 메인 라우터가 정책 라우팅으로 전달해야 Xray가 연결을 처리할 수 있습니다.
- 메인 라우터에 설치: 단말 트래픽이 원래 메인 라우터를 지나므로 가로채기 지점을 한곳에 모을 수 있습니다. 다만 코어, 방화벽 또는 라우팅 설정을 잘못 수정하면 네트워크 전체에 영향을 줄 수 있습니다.
- 같은 서브넷의 바이패스 라우터: 예를 들어 메인 라우터 주소가
192.168.10.1, 바이패스 라우터 주소가192.168.10.2, 테스트 단말 주소가192.168.10.100이고 서브넷 마스크는 모두255.255.255.0인 구성입니다. 단말의 기본 게이트웨이는 바이패스 라우터로 바꾸고, 바이패스 라우터의 상위 게이트웨이는 메인 라우터로 설정합니다. - 별도 하위 서브넷: 바이패스 라우터의 인터페이스 두 개 또는 VLAN을 사용해 테스트 단말을 별도의 서브넷에 둡니다. 경로를 파악하기는 더 쉽지만 포워딩, 방화벽, 반환 경로 또는 소스 주소 변환을 함께 설정해야 합니다.
같은 서브넷 방식에서는 직접 연결 트래픽의 반환 경로가 바이패스 라우터를 우회하는지, ICMP 리디렉션으로 단말의 경로가 바뀌는지도 고려해야 합니다. 소스 주소 변환 사용 여부는 실제 네트워크 구성과 연결 추적 요구사항에 따라 결정하세요. ‘바이패스 라우터에는 반드시 NAT가 필요하다’고 일반화할 수는 없습니다. 먼저 단말 하나만 설정하고 ip route나 시스템 라우팅 도구로 기본 게이트웨이를 확인하세요.
3. 투명 프록시: 트래픽 가로채기 방식과 프록시 프로토콜은 다릅니다
투명 프록시는 트래픽을 가로채는 방식을 뜻하며 VLESS나 VMess를 대체하는 프로토콜이 아닙니다. 단말의 앱에 프록시 주소를 입력하지 않아도 게이트웨이가 리디렉션하거나 정책 라우팅으로 트래픽을 코어에 전달합니다. TCP, UDP, IPv6를 가로챌 수 있는지는 Linux 네트워크 설정, 인바운드 설정, 프록시 아웃바운드와 서버가 모두 지원하는지에 달려 있습니다.
| 방식 | 가로채기 지점 | 주요 제약 |
|---|---|---|
| 명시적 SOCKS 프록시 | 앱이 로컬 프록시 포트에 직접 연결 | 코어 동작을 확인하기 쉽지만 집 안의 모든 앱에 자동 적용되지는 않음 |
| REDIRECT | 방화벽에서 연결을 로컬 인바운드로 리디렉션 | 주로 TCP에 사용하며 TCP 규칙을 그대로 적용해 UDP를 가로챌 수는 없음 |
| TPROXY | 투명 소켓과 정책 라우팅을 함께 사용 | 커널 모듈, 트래픽 마크, 로컬 라우팅이 함께 작동해야 함 |
| TUN 방식 | 가상 네트워크 인터페이스가 IP 패킷을 수신 | 구현 방식과 라우팅 설정에 따라 달라지며 데스크톱의 토글 이름을 그대로 적용할 수 없음 |
Xray에서 흔히 쓰는 Linux 투명 프록시 구성은 dokodemo-door 인바운드와 followRedirect를 사용해 원래 목적지를 확인합니다. TPROXY 방식에는 streamSettings.sockopt.tproxy 설정도 필요합니다. JSON 필드를 추가하는 것만으로 방화벽 규칙이나 정책 라우팅이 생성되거나 시스템 포워딩이 활성화되지는 않습니다.
OpenWrt 22.03 이상에서는 보통 firewall4와 nftables를 사용합니다. firewall3 기반의 오래된 iptables 안내를 그대로 적용하지 말고 실제 펌웨어와 모듈, 호환 계층을 확인하세요. 데스크톱 v2rayN의 TUN 토글도 라우터의 Xray 설정에 그대로 복사할 수 있는 단일 필드가 아닙니다. 자세한 내용은 TUN 설정 안내를 참고하세요.
4. 설정 파일과 서비스: 명시적 프록시부터 확인
설정 파일의 경로는 파일 이름이 아니라 실행 명령으로 결정됩니다. /etc/xray/config.json은 흔히 사용되는 경로 중 하나입니다. 패키지나 관리 화면에 따라 다른 디렉터리를 사용하거나 /var 아래에 실행 중인 파일을 생성할 수도 있습니다. 자동 생성된 파일을 직접 수정하면 다음 저장이나 재시작 때 덮어써질 수 있으므로 먼저 설정의 원본을 확인하세요.
-
네트워크 정보 기록
OpenWrt LuCI의 ‘네트워크’ → ‘인터페이스’에서 LAN 주소와 상위 게이트웨이, 인터페이스 이름을 기록하세요. ‘시스템’ → ‘백업/업그레이드’에서 설정 백업을 내보내세요. 우선 DHCP로 네트워크 전체에 배포되는 설정은 변경하지 마세요.
-
시작 설정 확인
xray version을 실행해 코어가 동작하는지 확인하세요. systemd를 사용하는 시스템에서는systemctl cat xray의ExecStart를 확인하고, OpenWrt에서는/etc/init.d/xray와 이 파일이 읽는 설정을 살펴 실제 경로를 확인하세요. -
설정 검사
실제 설정 파일이 흔히 쓰이는 경로에 있다면
xray run -test -config /etc/xray/config.json을 실행하세요. 서비스를 시작하기 전에 문법 오류, 알 수 없는 필드, 규칙 파일 읽기 오류를 먼저 해결하세요. 설정 검사를 통과해도 원격 노드 연결이 보장되는 것은 아닙니다. -
로컬에서 연결 확인
먼저 SOCKS 인바운드가
127.0.0.1:10808에서만 수신하도록 설정하세요.curl --proxy socks5h://127.0.0.1:10808 https://example.com/으로 연결을 확인하는 동시에 로그에서 선택된 아웃바운드를 살펴보세요. 웹페이지가 열리는 것만으로 프록시를 통과했다고 판단해서는 안 됩니다. -
단말 한 대에서 트래픽 가로채기
명시적 프록시와 실제 노드 연결을 모두 확인한 뒤, 테스트 단말 한 대에 투명 프록시 규칙을 적용하세요. DNS, TCP, UDP, IPv6를 각각 테스트하고 관리 화면에 계속 접속할 수 있는지 확인한 다음에야 소스 주소 범위를 넓히세요.
아래는 설정 구조를 이해하기 위한 로컬 직접 연결 기본 예시이며, 실제로 접속 가능한 프록시 노드 설정이 아닙니다. 원격 서버 정보와 투명 인바운드가 없고, SOCKS가 받은 모든 연결은 freedom을 통해 직접 연결됩니다. 현재 서비스에서 사용 중인 설정이 있다면 그대로 덮어쓰지 마세요.
{
"log": {
"loglevel": "warning"
},
"inbounds": [
{
"tag": "local-socks",
"listen": "127.0.0.1",
"port": 10808,
"protocol": "socks",
"settings": {
"auth": "noauth",
"udp": true
}
}
],
"outbounds": [
{
"tag": "direct",
"protocol": "freedom",
"settings": {}
}
]
}
구독 주소도 Xray의 실행 인수가 아닙니다. 클라이언트 구독에는 Base64로 인코딩된 공유 링크가 포함되거나 특정 관리 프로그램 형식이 사용될 수 있습니다. Xray 설정 구조에 맞는 JSON만 설정 파일로 불러올 수 있습니다. 구독 관리 도구를 사용한다면 생성된 아웃바운드, 태그, 규칙 파일을 확인하세요. 수동으로 수정해도 업데이트 작업에서 덮어쓸 수 있습니다.
5. DNS와 라우팅 분기: 두 경로를 함께 확인
안정적으로 트래픽을 분기하려면 연결 목적지와 도메인 이름의 해석 결과를 모두 파악해야 합니다. Xray의 routing.rules는 위에서 아래 순서로 일치 여부를 확인하며, 규칙의 outboundTag는 실제로 존재하는 아웃바운드 태그를 가리켜야 합니다. 일치하는 규칙이 없으면 일반적으로 첫 번째 아웃바운드를 사용합니다. 도메인 규칙, IP 규칙, 기본 아웃바운드의 우선순위를 먼저 명확한 기대 결과로 정리한 뒤 설정으로 옮기세요.
각 포트는 용도가 다르므로 서로 대체할 수 없습니다. 12345는 구성을 설명하기 위한 예시일 뿐 시스템에서 자동으로 사용하는 기본 포트가 아닙니다. 방화벽의 전달 대상과 코어의 수신 포트는 일치해야 합니다. 인증되지 않은 SOCKS 포트를 공용 인터넷에 노출하지 마세요. 이후 LAN 접속을 허용하더라도 수신 주소와 방화벽으로 접속 출처를 제한해야 합니다.
- LAN 및 관리 주소: 먼저 직접 연결할 범위를 정해 라우터 관리 페이지, 네트워크 저장 장치, 프린터에 접속할 때 원격 아웃바운드로 우회하지 않도록 하세요.
- 도메인 규칙: 투명 연결에는 목적지 IP만 포함될 수 있습니다. 일부 프로토콜에서는 스니핑으로 도메인을 식별할 수 있지만 모든 도메인을 복원한다고 보장할 수 없으며 통신을 복호화하는 기능도 아닙니다.
- 이름 해석 정책:
routing.domainStrategy는 라우팅에서 도메인을 확인할 때의 이름 해석 방식을 제어합니다. 전역 DNS 서버를 설정하는 옵션은 아닙니다. 내장 DNS, 아웃바운드의 DNS 조회, 단말의 DNS는 서로 다른 단계입니다. - DNS 처리 경로: 단말은 먼저 라우터의 dnsmasq에 질의한 뒤 다른 DNS 서비스로 전달할 수 있습니다. Xray에
dns를 입력하는 것만으로 단말의 DNS 요청이 자동으로 Xray에 전달되지는 않습니다. - IPv6 경로: IPv4 투명 프록시 규칙만 설정하면 단말이 메인 라우터의 IPv6 기본 경로로 인터넷에 접속할 수 있습니다. AAAA 조회, IPv6 게이트웨이, 트래픽 가로채기 범위를 별도로 확인하세요.
결론: 같은 도메인으로 DNS 결과와 아웃바운드 로그를 비교하세요
테스트 도메인에 nslookup example.com 192.168.10.2를 실행하세요. 단, 바이패스 라우터에서 실제로 DNS 서비스를 제공해야 합니다. 그다음 해당 도메인에 접속해 선택된 아웃바운드를 확인하세요. 이름 해석에 성공하면 DNS 경로가 작동한다는 뜻일 뿐이며, 아웃바운드 로그가 일치해야 트래픽 분기 방향이 기대한 대로인지 확인할 수 있습니다.
VLESS 노드를 사용할 때는 원격 주소, 포트, 사용자 ID, 전송 방식, 보안 설정을 서버와 일치시켜야 합니다. 라우터에 설치해도 이 조건은 달라지지 않습니다. VMess와 VLESS는 프록시 프로토콜이고 TCP와 WebSocket 등은 전송 관련 옵션입니다. 프로토콜 이름만으로 기기의 처리 성능을 판단할 수는 없습니다. 각 필드의 의미는 라우팅 설정 참고 자료와 용어집에서 확인하세요.
6. 자주 발생하는 문제: 증상에 따라 점검 범위 좁히기
문제를 확인하는 동안 바이패스 라우터를 거치지 않는 관리용 단말 한 대를 남겨 두세요. 기존 게이트웨이와 바이패스 라우터 게이트웨이에서 결과를 비교한 다음 DNS, 코어 로그, 방화벽 카운터를 확인하세요. MTU, 프로토콜, DNS, 라우팅 규칙을 한꺼번에 바꾸면 원인을 파악하기 어렵습니다.
게이트웨이를 바이패스 라우터로 바꾸자 모든 웹사이트가 열리지 않나요?
포워딩과 상위 경로 확인
먼저 단말에서 바이패스 라우터의 관리 주소에 접속한 뒤, 바이패스 라우터에서 ip route를 실행해 기본 경로를 확인하세요. sysctl net.ipv4.ip_forward로 IPv4 포워딩이 활성화됐는지 확인하고 방화벽의 포워딩 체인도 살펴보세요. 기본 경로나 포워딩이 잘못됐다면 노드를 바꿔도 해결되지 않습니다. 먼저 단말의 게이트웨이를 메인 라우터로 되돌려 연결을 복구하세요.
웹페이지는 열리지만 음성 통화나 게임 연결에 실패하나요?
UDP 경로를 단계별로 확인
트래픽 가로채기 규칙이 TCP만 처리하는지 확인한 뒤, 투명 인바운드와 프록시 아웃바운드, 서버가 필요한 UDP 전달을 지원하는지 점검하세요. HTTP 요청에 성공해도 UDP가 정상이라는 뜻은 아닙니다. REDIRECT로 TCP를 가로채는 경우 같은 규칙이 UDP까지 처리한다고 생각해서는 안 됩니다. 맞는 가로채기 방식을 선택해 직접 테스트하세요.
서비스는 실행 중인데 트래픽 가로채기 기록이 없는 이유는 무엇인가요?
수신 포트와 규칙 적용 여부 확인
ss -lnptu로 실제 수신 포트를 확인한 다음 nft list ruleset으로 소스 서브넷, 인터페이스, 포트가 일치하는지 살펴보세요. 규칙에 카운터가 있다면 테스트 연결 후 수치가 증가하는지 확인하세요. 서비스 실행은 프로세스가 존재한다는 뜻일 뿐, 단말이 해당 기기를 경유하거나 정책 라우팅이 패킷을 투명 인바운드로 전달한다는 뜻은 아닙니다.
재시작하면 설정이 사라지거나 속도 측정을 할수록 로그가 커지나요?
영구 설정과 로그 경로 확인
서비스가 부팅 시 자동 시작되는지, 방화벽과 정책 라우팅이 임시 명령이 아닌 펌웨어에서 지원하는 방식으로 저장되는지 확인하세요. 문제를 해결한 뒤에는 상세 로그를 적절한 수준으로 낮추고 로그 순환을 설정하세요. 용량이 작은 플래시 저장 장치에 요청 로그를 장기간 기록하지 않는 편이 좋습니다. 규칙 업데이트에 실패하면 기존의 정상 데이터를 보존하고, 먼저 삭제한 뒤 다시 내려받지 마세요.
7. 운영 전 점검: 단말 한 대에서 네트워크 전체로 확장
집 안의 기기에 클라이언트를 설치하지 않아도 되려면 해당 기기의 트래픽이 설정한 게이트웨이를 실제로 지나야 하며 DNS, IPv4, IPv6 정책도 일관되어야 합니다. 별도 네트워크나 수동 라우팅, 사용자 지정 암호화 DNS를 사용하는 단말은 같은 경로를 따르지 않을 수 있으므로 기기 유형별로 확인하세요.
- 기본 연결: LAN 관리 페이지, 직접 연결할 주요 사이트, 프록시를 거쳐야 하는 대상을 테스트하고 로그의 아웃바운드 방향을 확인하세요.
- 프로토콜 범위: 브라우저에서 속도를 한 번 측정하는 데 그치지 말고 TCP, 실제로 사용하는 UDP 앱, IPv6를 각각 테스트하세요.
- 성능 확인: 같은 시간대에 같은 대상을 기준으로 직접 연결과 프록시 연결을 비교하고 CPU 사용률, 메모리 여유, 연결 수를 기록하세요. 한 번 측정한 최고 속도를 지속 처리량으로 간주하지 마세요.
- 재시작 후 복구: 바이패스 라우터를 재시작한 뒤 서비스, DNS, 정책 라우팅, 방화벽 규칙을 다시 확인해 임시 명령에 의존하지 않는지 점검하세요.
- 장애 시 복구: Xray 서비스를 중지한 상태를 가정해 관리 단말에서 메인 라우터에 계속 접속할 수 있는지 확인하고, 다른 단말의 게이트웨이와 DNS를 원래대로 되돌리는 방법도 정해 두세요.
사용 가능한 노드를 아직 확인하지 않았다면 먼저 데스크톱 v2rayN이나 Android용 v2rayNG에서 단일 기기 연결을 테스트하세요. 이렇게 하면 노드 문제와 게이트웨이 문제를 구분하기 쉽습니다. v2rayNG는 Xray 코어를 사용하고 v2flyNG는 V2Fly 코어를 사용하므로 코어별 기능과 설정 형식을 따로 확인해야 합니다. 단일 기기 테스트를 통과한 뒤 연결 매개변수와 라우팅 의도를 라우터 환경에 옮기세요. 클라이언트 데이터 디렉터리 전체를 그대로 복사하지 마세요.