VPN 서버는 VPN 클라이언트로부터 수신된 패킷을 어떻게 처리합니까?

VPN 서버는 VPN 클라이언트로부터 수신된 패킷을 어떻게 처리합니까?

우선, 네트워킹에 대한 저의 지식은 매우 제한되어 있으므로 잘못된 용어를 사용하고 있다면 미리 사과드립니다.

상황

클라이언트가 다른 네트워크에 있는 로컬 웹 서버와 통신할 수 있도록 하는 프로토타입을 만들려고 합니다. 웹 서버는 VPN 서버와 동일한 네트워크에서 호스팅됩니다. 지금까지는 클라이언트 패킷(예: SYN)을 가상 인터페이스(tun)로 라우팅하고 전체 패킷을 VPN 서버로 보낼 수 있습니다. 서버 측에서는 이러한 패킷을 수신하고 소스 및 대상 IP를 변경하고 헤더 내부의 체크섬을 다시 계산합니다.

다시 말하면 흐름은 다음과 같습니다.

  1. 사용자가 특정 IP 주소로 웹 서버에 액세스하려고 합니다.
  2. SYN 패킷은 라우팅 테이블의 경로와 일치하므로 가상 인터페이스로 전송됩니다.
  3. VPN 클라이언트 애플리케이션은 설정된 웹소켓 연결을 통해 VPN 서버에 SYN 패킷을 보냅니다(어떤 연결인지는 중요하지 않음).
  4. VPN 서버는 패킷을 수신하고 동일한 네트워크에서 호스팅되는 실제 웹 서버를 가리키도록 소스/대상 IP 주소를 수정합니다.
  5. 이 패킷을 웹 서버로 보내고 웹 서버로부터 응답을 받으려면 어떻게 해야 합니까? 클라이언트가 VPN 서버/설정된 웹 소켓 연결을 통해 웹 서버와 통신하기를 원합니다. 어떤 옵션이 있나요?

질문

어떻게 이러한 패킷을 웹 서버로 보내고, 웹 서버로부터 패킷을 다시 받아 클라이언트로 다시 보낼 수 있습니까? 올바른 인터페이스에 패킷을 "주입"하고 애플리케이션이 클라이언트에 응답을 다시 보내는지 확인합니까? 클라이언트가 VPN 서버/설정된 웹 소켓 연결을 통해 웹 서버와 통신하기를 원합니다. 내가 가지고 있는 옵션은 무엇이며 일반적으로 현재 VPN 서버는 이를 어떻게 수행합니까?

내가 시도한 것

서버 측에서 시도한 것은 가상 인터페이스(tun)를 만들고 클라이언트로부터 받은 패킷을 인터페이스에 쓰는 것입니다. 그러나 이러한 패킷은 웹 서버로 전송되지 않습니다. 클라이언트와 서버는 네트워크 확장을 사용하여 macOS에서 실행됩니다. 웹 서버는 에서 실행 중이며 인터페이스 에 쓰기 전에 192.168.1.95패킷의 소스 IP를 수정했습니다 .100.64.0.77tun

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서버도 동일한 작업을 수행할 수 있습니다.

관련 정보