VPN 클라이언트로 포트 포워드 하시겠습니까? 고향 기계 행복하게 연결합니다. 일반적인

나는 약간의 퍼즐에 부딪 쳤고 해결책을 찾는 데 많은 운이 없었습니다. 지금은 (슬프게도) Verizon 3G를 통해 인터넷에 연결되어 있습니다. 그들은 들어오는 모든 트래픽을 필터링하므로 연결을 허용하기 위해 포트를 열 수 없습니다.

나는 현재 linode.com에 Linux 가상 머신을 가지고 있으며, 포트 포워딩 을 설치 pptpd하고 시도하려고 생각했습니다 iptables. 나는 한 pptpd설치하고 내 고향 기계 행복하게 연결합니다. 일반적인 정보는 다음과 같습니다.

서버 (데비안) 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 가지 Googled iptables구성 을 시도했지만 아직 작동하지 않았습니다. 아무도 모르는 아이디어 나 전혀 다른 접근법을 가지고 있습니까? 여기서 목표는 방화벽과 연결이 끔찍한 TCP, UDP 트래픽을 통해 수신 대기하는 것입니다.



답변

이 작업을하려면 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에서 일치해야합니다.


답변

나는 또한이 문제가 있었고 몇 시간 동안 해결하려고했습니다. 여기 내 해결책은 다음과 같습니다.

  • 나는 VPNClient같은 하나 이상을 가졌다 IPAddress. 그래서 나는 그들에게 정적을 주었다IPAddress

클라이언트 스크립트를 저장해야하는 디렉토리를 정의하십시오 (예 : / etc / openvpn / staticclients).

mkdir /etc/openvpn/staticclients

서버의 openvpn 구성 파일에이 디렉토리를 옵션으로 추가하십시오.

client-config-dir /etc/openvpn/staticclients

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

이 예 IPAddresscommon name TESTCLIENT 를 사용 하여 10.1.134.110/10.1.134.109를 클라이언트에 푸시하고 서브넷 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

답변

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

이 시도:

sysctl -w net.ipv4.ip_forward = 1

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


답변

달성하고자하는 것은 pptpdOpenVPN 및 iptables 로 (아마도) 가능할 수도 있지만이 유스 케이스에 더 적합한 후보가 될 수 있습니다. 나는 이 유스 케이스를 위해 tinc를 설정하는 방법을 설명하는 이것을 읽었습니다 . pptdp또는 OpenVPN 부분에 대한 (잠재적으로 더 간단한) 대안 입니다. 그런 다음 iptables에 대해 정확히 동일한 규칙이 필요합니다.