VPN 클라이언트로 포트 전달을 하시겠습니까?

VPN 클라이언트로 포트 전달을 하시겠습니까?

몇 가지 어려움을 겪었지만 해결책을 찾지 못했습니다. 이제 (불행하게도) Verizon 3G를 통해 네트워크에 연결되었습니다. 들어오는 모든 트래픽을 필터링하므로 연결을 수락하기 위해 포트를 여는 것이 불가능합니다.

현재 linode.com에 Linux 가상 머신이 있는데 이를 설치 하고 포트 전달을 pptpd시도해보고 싶은 생각이 들었습니다. iptables나는 그것을 pptpd설치했고 내 집 컴퓨터는 잘 연결됩니다. 즉, 몇 가지 일반적인 정보는 다음과 같습니다.

서버(Debian) WAN IP: eth0의 xxxx - pptpd IP: ppp0의 yyy1 - 클라이언트 VPN IP: yyy100

내가 미친 게 아닌지 확인하기 위해 서버에서 클라이언트의 열린 포트로 연결을 시도했고 클라이언트는 VPN IP를 통한 연결을 수락했습니다.

내가 성취하고 싶은 것은 이것이다:

인터넷 -> WAN IP:포트 -> 클라이언트 VPN IP로 전달:포트

예를 들어, 클라이언트에서 포트 6000을 열면 누군가 xxxx:6000으로 텔넷을 연결할 수 있으며 서버는 해당 포트를 캡처하여 192.168.3.100:6000으로 전달합니다.

저는 적어도 20가지의 다양한 Google 검색 iptables구성을 시도했지만 아직까지 작동하지 않았습니다. 누구든지 내가 알지 못하는 아이디어나 완전히 다른 접근 방식을 가지고 있습니까? 여기서의 목표는 방화벽이 강화된 연결, 바람직하게는 TCP 및 UDP 트래픽을 통해 수신하는 것입니다.

답변1

VPN 서버(Linode)가 작동하려면 다음 세 가지 작업을 수행해야 합니다.

  1. IP 전달을 활성화해야 합니다.

    sysctl -w net.ipv4.ip_forward=1
    
  2. 포트를 전달하기 위해 대상 NAT(DNAT)를 설정합니다. 표준 포트 전달 기능이므로 이미 알고 계실 것입니다. 그러나 완전성을 위해 다음을 수행하십시오.

    iptables -t nat -A PREROUTING -d x.x.x.x -p tcp --dport 6000 -j DNAT --to-dest y.y.y.100:6000
    
  3. VPN 클라이언트의 관점에서 연결이 VPN 서버에서 나오도록 원본 NAT(SNAT)를 설정합니다.

    iptables -t nat -A POSTROUTING -d y.y.y.100 -p tcp --dport 6000 -j SNAT --to-source y.y.y.1
    

SNAT가 필요한 이유는 그렇지 않으면 VPN 클라이언트가 VPN이 아닌 기본 게이트웨이(Verizon 3G)를 통해 연결을 시작한 호스트(zzzz)에 직접 반환 패킷을 보내기 때문입니다. 따라서 반환 패킷의 소스 IP 주소는 xxxx가 아닌 Verizon 3G 주소가 됩니다. zzzz가 xxxx에 대한 연결을 시작했기 때문에 모든 종류의 문제가 발생합니다.

대부분의 포트 전달 설정에서는 포트 전달을 수행하는 호스트가 대상 호스트(예: 홈 라우터)의 기본 게이트웨이이기도 하므로 SNAT가 필요하지 않습니다.

또한 포트 6000을 다른 포트(예: 7000)로 전달하려는 경우 SNAT 규칙은 6000이 아닌 7000과 일치해야 합니다.

답변2

나 역시 이 문제에 직면해 몇 시간 동안 해결하려고 노력했다. 이것이 내 해결책입니다.

  • VPNClient같은 것이 하나 이상 있습니다 IPAddress. 그래서 나는 그들 각각에게 정적을 주었다.IPAddress

클라이언트 스크립트를 저장해야 하는 디렉터리(예: /etc/openvpn/staticclients)를 정의하고 해당 디렉터리를 생성합니다.

mkdir /etc/openvpn/staticclients

이 디렉터리를 서버의 openvpn 구성 파일에 옵션으로 추가합니다.

client-config-dir /etc/openvpn/staticclients

각 클라이언트에 대해 파일을 생성해야 합니다. 파일 이름은 common name클라이언트 인증서에 지정된 속성과 일치해야 합니다. 이 명령은 컴퓨터 인증서에서 CN을 가져옵니다.

이 예에서는 다음 명령을 사용하여 IPAddress10.1.134.110/10.1.134.109를 클라이언트에 푸시합니다.common name 테스트 클라이언트또한 서브넷 10.1.135.0에 대한 추가 경로를 푸시합니다.

cat /etc/openvpn/staticclients/TESTCLIENT

ifconfig-push 10.1.134.110 10.1.134.109
push "route 10.1.135.0 255.255.255.0 10.1.134.62"
  • http://www.yougetsignal.com/tools/open-ports/그리고http://canyouseeme.org/포트가 올바르게 감지되지 않았습니다. 또한 웹사이트에서 이러한 포트를 볼 수 있도록 클라이언트에서 애플리케이션을 시작해야 합니다.

  • 추가 SNAT규칙은 필요하지 않습니다. 다음 규칙이 필요합니다.

sysctl -w net.ipv4.ip_forward=1

iptables -t nat -A PREROUTING -p tcp --dport 28006 -j DNAT --to 10.1.134.110

답변3

대부분의 서버에는 기본 구성에서 IP 전달이 비활성화되어 있습니다. VPN을 통해 들어오는 연결을 리디렉션하려면 VPN을 활성화해야 합니다.

이 시도:

sysctl -w net.ipv4.ip_forward = 1

iptables 구성 외에도 의미합니다.

답변4

달성하려는 것은 pptpdOpenVPN 및 iptables를 사용하여 가능하지만 이 사용 사례에는 Tinc가 더 적합하다는 것을 알 수 있습니다. 난 방금 읽었어이것이 사용 사례에 맞게 Tinc를 설정하는 방법을 설명합니다. OpenVPN을 부분적으로 대체합니다(아마도 더 간단함) pptdp. 그런 다음 iptables에 대해서도 정확히 동일한 규칙이 필요합니다.

관련 정보