우선, 네트워킹에 대한 저의 지식은 매우 제한되어 있으므로 잘못된 용어를 사용하고 있다면 미리 사과드립니다.
상황
클라이언트가 다른 네트워크에 있는 로컬 웹 서버와 통신할 수 있도록 하는 프로토타입을 만들려고 합니다. 웹 서버는 VPN 서버와 동일한 네트워크에서 호스팅됩니다. 지금까지는 클라이언트 패킷(예: SYN)을 가상 인터페이스(tun)로 라우팅하고 전체 패킷을 VPN 서버로 보낼 수 있습니다. 서버 측에서는 이러한 패킷을 수신하고 소스 및 대상 IP를 변경하고 헤더 내부의 체크섬을 다시 계산합니다.
다시 말하면 흐름은 다음과 같습니다.
- 사용자가 특정 IP 주소로 웹 서버에 액세스하려고 합니다.
- SYN 패킷은 라우팅 테이블의 경로와 일치하므로 가상 인터페이스로 전송됩니다.
- VPN 클라이언트 애플리케이션은 설정된 웹소켓 연결을 통해 VPN 서버에 SYN 패킷을 보냅니다(어떤 연결인지는 중요하지 않음).
- VPN 서버는 패킷을 수신하고 동일한 네트워크에서 호스팅되는 실제 웹 서버를 가리키도록 소스/대상 IP 주소를 수정합니다.
- 이 패킷을 웹 서버로 보내고 웹 서버로부터 응답을 받으려면 어떻게 해야 합니까? 클라이언트가 VPN 서버/설정된 웹 소켓 연결을 통해 웹 서버와 통신하기를 원합니다. 어떤 옵션이 있나요?
질문
어떻게 이러한 패킷을 웹 서버로 보내고, 웹 서버로부터 패킷을 다시 받아 클라이언트로 다시 보낼 수 있습니까? 올바른 인터페이스에 패킷을 "주입"하고 애플리케이션이 클라이언트에 응답을 다시 보내는지 확인합니까? 클라이언트가 VPN 서버/설정된 웹 소켓 연결을 통해 웹 서버와 통신하기를 원합니다. 내가 가지고 있는 옵션은 무엇이며 일반적으로 현재 VPN 서버는 이를 어떻게 수행합니까?
내가 시도한 것
서버 측에서 시도한 것은 가상 인터페이스(tun)를 만들고 클라이언트로부터 받은 패킷을 인터페이스에 쓰는 것입니다. 그러나 이러한 패킷은 웹 서버로 전송되지 않습니다. 클라이언트와 서버는 네트워크 확장을 사용하여 macOS에서 실행됩니다. 웹 서버는 에서 실행 중이며 인터페이스 에 쓰기 전에 192.168.1.95
패킷의 소스 IP를 수정했습니다 .100.64.0.77
tun
Routing tables
Internet:
Destination Gateway Flags Netif Expire
default 192.168.1.254 UGSc en0
default link#10 UCSI utun2
100.64.0.77 100.64.0.77 UH utun2
127 127.0.0.1 UCS lo0
127.0.0.1 127.0.0.1 UH lo0
169.254 link#7 UCS en0 !
192.168.1 link#7 UCS en0 !
192.168.1 link#10 UCSI utun2
192.168.1.92/32 link#7 UCS en0 !
192.168.1.99 8c:a9:82:2e:d6:2e UHLWI en0 986
192.168.1.254/32 link#7 UCS en0 !
192.168.1.254 70:f1:96:86:e6:a0 UHLWIir en0 1196
224.0.0/4 link#7 UmCS en0 !
224.0.0/4 link#10 UmCSI utun2
224.0.0.251 1:0:5e:0:0:fb UHmLWI en0
255.255.255.255/32 link#7 UCS en0 !
255.255.255.255/32 link#10 UCSI utun2
`
답변1
VPN 서버는 패킷을 수신하고 동일한 네트워크에서 호스팅되는 실제 웹 서버를 가리키도록 소스/대상 IP 주소를 수정합니다.
클라이언트가 원하는 대상 IP 주소를 이미 지정했기 때문에 이는 필요하지 않습니다. (VPN캡슐화하다원래 IP 헤더를 변경하지 않고 다른 IP 패킷 안에 원래 패킷을 넣기 때문에 서버는 다시 캡슐화를 해제하고 원래 패킷을 그대로 전달하기만 하면 됩니다.)
NAT는 수행될 수 있지만(때때로 수행됨) OS 방화벽의 작업과 시스템 관리자의 결정인 경우가 더 많습니다. VPN 소프트웨어 자체에 의해 수행되어서는 안 됩니다. 그리고 일반적으로 내부 네트워크 내의 통신은필요NAT; 이를 사용하는 것은 네트워크의 기본 라우팅이 올바르게 설정되지 않았음을 나타내는 경우가 많습니다.
이 패킷을 웹 서버로 보내고 웹 서버로부터 응답을 받으려면 어떻게 해야 합니까? 클라이언트가 VPN 서버/설정된 웹 소켓 연결을 통해 웹 서버와 통신하기를 원합니다. 어떤 옵션이 있나요?
일반적으로 VPN 서버는 VPN 클라이언트와 똑같은 가상 인터페이스를 가지며 정확히 동일한 메커니즘을 사용하여 패킷을 생성하고 수신합니다. (일부는 클라이언트당 전용 가상 인터페이스를 생성하고 다른 일부는 모든 클라이언트에 대해 단일 인터페이스를 갖습니다.) 클라이언트가 인터페이스를 사용하는 경우 tun
서버도 동일한 작업을 수행할 수 있습니다.