VPN 클라이언트로 포트 포워드 하시겠습니까?


21

나는 약간의 퍼즐에 부딪 쳤고 해결책을 찾는 데 많은 운이 없었습니다. 지금은 (슬프게도) 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 트래픽을 통해 수신 대기하는 것입니다.

답변:


25

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


안녕하세요 AGWA, 답변 주셔서 감사합니다. 나는 이미 ip_forwarding을 사용했으며 처음에는 아니지만 규칙이 완벽하게 작동했습니다. 문제는 (내 iptables noobness에서) iptables -F가 nat 항목을 플러시하지 않았고 iptables -L이 나열하지 않았다는 것을 깨닫지 못했습니다. 그것들을 올바르게 나열하는 방법을 알아 낸 후에 나는 시도에서 몇 가지 상충되는 항목을 발견했습니다. 규칙을 비우고 시도한 후에는 완벽하게 작동합니다. 그러나 한 가지 간단한 질문은 규칙에서 tcp를 지정하는 것입니다. TCP / UDP 트래픽 모두에서 이것을 "모두"로 변경 하시겠습니까?
Vile Brigandier

천만에요! (그런데, 나는 iptables-saveiptables 규칙을 보여주기 위해 사용 하는 것을 좋아한다 -출력은 사람이 소비하기위한 것이 아니지만 여전히 읽을 수 있고 모든 iptables 규칙을 보여줍니다 .) 아니요, 불행히도 거기에서 "all" --dport만 사용할 수는 없습니다. 실제로 포트가있는 프로토콜과 작동합니다 (예 : "모두"에는 포트 개념이없는 ICMP가 포함됨). TCP와 UDP에 대한 별도의 규칙이 필요합니다.
AGWA

iptables-save 팁에 감사드립니다. TCP와 UDP 모두 예상대로 작동합니다. 건배.
Vile Brigandier 5

2
이 답변에 대한 업데이트는 iproute2를 사용하면 실제로 2 개의 게이트웨이가 있고 VPN을 통해 DNAT 트래픽을 다시 라우팅하도록 VPN 클라이언트를 설정할 수 있다는 것입니다. 이것은 SNAT를 사용하지 않고 모든 트래픽이 VPN 서버에서 오는 것처럼 보이는 경우에 유용합니다. thomas-krenn.com/en/wiki/Two_Default_Gateways_on_One_System 에는이를 설정하는 방법에 대한 정보가 포함되어 있습니다.
PressingOnAlways

ufw에서 8080을 허용했지만 ufw가 비활성화되어있는 한 나를 위해 작동하지만 ufw를 활성화 하자마자이 전달 항목이 작동하지 않습니다.
Sudhir N

3

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

  • 나는 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

2

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

이 시도:

sysctl -w net.ipv4.ip_forward = 1

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


0

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.