VPN을 통해 특정 트래픽만 라우팅

VPN을 통해 특정 트래픽만 라우팅

VPN 서버를 실행하는 중앙 개발 서버와 이에 연결해야 하는 여러 클라이언트가 있습니다. 서버가 Apache를 실행 중이지만 로컬 요청만 수락합니다(127.0.0.1:80에서만 수신 대기).

기본적으로 VPN에 연결된 모든 클라이언트가 VPN을 통해 특정 호스트 이름과 로컬 Apache 인스턴스로 트래픽을 라우팅하도록 강제해야 합니다.

예를 들어:

Client requests google.com -> google.com
Client requests server -> vpn -> server:80

클라이언트가 VPN에 연결되어 있을 때 클라이언트에 라우팅 명령을 푸시할 수 있다는 것을 알고 있습니다. 이제 이를 달성하기 위해 어떤 경로를 푸시해야 하는지 알아내면 됩니다. 적어도 route클라이언트가 이 경로를 자체적으로 추가하는 구문/명령은 무엇입니까?

답변1

우선, 로컬 컴퓨터가 아닌 다른 127.xyz로 트래픽을 라우팅할 수 없습니다(글쎄, 가능할 수도 있지만 그 과정에서 분명히 다른 문제가 발생할 수 있습니다...). VPN IP(예: 10.8.0.1)를 수신하도록 Apache 구성을 업데이트하는 것이 좋습니다. 이것이 옵션이 아닌 경우 내 답변 끝에 있는 옵션 중 하나를 시도해 볼 수 있습니다.

OpenVPN 클라이언트는 서버에 대한 경로를 얻어야 합니다. 제 경우에는 다음과 같습니다.

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.8.0.1        10.8.0.53       255.255.255.255 UGH   0      0        0 tun0
10.8.0.53       0.0.0.0         255.255.255.255 UH    0      0        0 tun0

클라이언트에 추가 경로를 푸시하려면 다음을 사용하세요.

push "route 192.168.10.0 255.255.255.0"

(IP/넷마스크를 적절히 변경하십시오).

Apache 인스턴스를 호스트 이름(뿐만 아니라)으로 액세스할 수 있게 하려면 이를 http://10.8.0.1/각 클라이언트의 /etc/hosts파일에 넣으십시오.

10.8.0.1    servername.domain.example

또는 DNS 서버(예: dnsmasq <-dhcp 서버를 비활성화해야 함)를 설정하고 이를 클라이언트(ovpn-conf에서)에 푸시합니다.

push "dhcp-option DNS 10.8.0.1"

이 정도면 충분합니다.

다른 옵션

Apache가 수신 대기하는 IP를 변경할 수 없는 경우 다음 방법을 생각해 볼 수 있습니다(그러나 최후의 수단으로만 사용하십시오).

  • SSH 포트 전달: OpenVPN(또는 다른 VPN 서버)을 사용하는 대신 SSH를 사용하여 서버에 연결합니다.

    ssh -L1234:localhost:80 user@servername
    

    이렇게 하면 서버의 Apache 인스턴스(수신 전용 127.0.0.1:80)를 클라이언트에서 사용할 수 있습니다 http://localhost:1234/. 클라이언트별로 이 작업을 수행해야 하므로 클라이언트가 많으면 적합하지 않을 수 있습니다.
    그러나 ~/.ssh/authorized_keys클라이언트가 이를 인터넷의 프록시로 사용하거나 귀하가 원하지 않는 다른 작업을 수행할 수도 있다는 점을 염두에 두십시오. 따라서 sshd를 올바르게 구성하는 것이 중요합니다.

  • 일부 iptables 마법(트래픽을 NAT해야 함)
  • 다른 사용자 공간 포트 전달 또는 역방향 프록시

관련 정보