VPN 서비스에 연결된 서버로 ssh


22

가상 사설 서버가 있는데 서버가 VPN 서비스에 연결되어있는 동안 웹 서버를 실행하고 싶습니다

내 공급자에 대한 VPN 연결이 작동하지 않으면이 서버, ssh, scp, http 등으로 원하는 작업을 수행 할 수 있습니다.

일단 openvpn이 실행되고 공급자의 VPN 서비스에 연결되면 어떠한 방법으로도 물론 서버를 액세스 할 수 없습니다.

사진은 다음과 같습니다.

           My VPS                             ------------
         +----------------+                  /            \
         |                |                 /   Internet  /       101.11.12.13
         |        50.1.2.3|-----------------\   cloud    /----<--- me@myhome
         |                |                  /           \
         |     10.80.70.60|                 /             \
         +----------------+                 \              \
                        :                    \_____________/
                        :                           :
                        :                           :
                        :                           :
                        :                           :
                  +------------------+              :
                  |     10.80.70.61  |              :
                  |               \  |              :
                  |                \ |              :
                  | 175.41.42.43:1197|..............:
                  |   175.41.42.43:yy|   
                  |       .....      |
                  |   175.41.42.43:xx|
                  +------------------+



Legend                  
------ Line No VPN connection present
...... Line VPN connection established

명확히 할 것 :

  • 위와 아래의 모든 IP 주소와 포트 번호는 허구입니다.
  • 포트 번호 xx, yy 및 그 사이의 모든 항목이있는 사실은 내가 아는 것이 아니라 내 가정입니다.
  • 매분마다 다른 VPS를 ping하고 apache2를 실행하는 cron 작업을 설정했습니다. apache2 로그에서 VPN이 활성 상태 일 때 원래 IP 주소가 50.1.2.3에서 175.41.42.43으로 변경되어 VPN이 제대로 작동하는 것을 볼 수 있습니다.

OpenVPN 로그는 다음을 보여줍니다.

UDPv4 link remote: [AF_INET]175.41.42.43:1197
[ProviderName] Peer Connection Initiated with [AF_INET]175.41.42.43:1197
TUN/TAP device tun0 opened
do_ifconfig, tt->ipv6=0, tt->did_ifconfig_ipv6_setup=0
sbin/ip link set dev tun0 up mtu 1500
/sbin/ip addr add dev tun0 local 10.80.70.60 peer 10.80.70.61

이 시점에서, 나는에서 ssh를 할 수 있도록하고 싶습니다 myhomeMy VPSVPN을 위로하고 퍼티를 사용하는 동안, 사진에.

과거에는 직장 중 하나 @에서 문자열에 세 개의 표시가있는 매우 안전한 서버 하나에 ssh하는 매우 이상한 순서가 주어졌습니다 . 그래서 상상했던 것처럼 상자에서 상자로 점프했지만 점프 상자에서 일부 버전의 Windows OS 및 독점 앱을 실행했기 때문에 랩에서 무슨 일이 있었는지 알 수 없었습니다. 그래서 나는 많은 관심을 기울이지 않았다. 이제 나는 같은 상황이나 비슷한 상황에 처해 있음을 깨닫기 시작했습니다.

다이어그램 및 / 또는 로그 스 니펫의 IP 주소 및 포트를 사용하여 누군가이 터널을 통과하고 서버에 액세스하는 방법을 알려줄 수 있습니까?

답변:


10

VPN 서비스가 가동되면 ssh 패킷이 VPS의 공용 IP 50.2.1.3이 아닌 VPN을 통해 라우팅되므로 VPS가 잠 깁니다.

서버가 다음과 같이 가정합니다.

  • 퍼블릭 IP는 50.1.2.3입니다 (예제 설정에 따라)
  • 퍼블릭 IP 서브넷은 50.1.2.0/24입니다.
  • 기본 게이트웨이는 xxx1입니다.
  • eth0은 장치 대 게이트웨이

iproute2를 사용하여 다음을 수행하십시오.

ip rule add table 128 from 50.1.2.3
ip route add table 128 to 50.1.2.0/24 dev eth0
ip route add table 128 default via x.x.x.1

그런 다음 OpenVPN 클라이언트 구성을 실행하십시오. openvpn --config youropenvpn-configfile.ovpn &

그러면 서버가 VPN 서비스에 연결되어있는 동안 서버로 ssh 할 수 있습니다.

비 SSH 세션에서 공개 IP에 대한 액세스를 제한하려면 적절한 iptable 필터를 추가해야합니다.


이것은 아름답게 작동했습니다.
Anthony Giorgio

3
그것은 나를 위해 일했다. 아직도, 이것이 정확히 무엇을하는지 이해하는데 어려움이 있습니다. 어떤 종류의 연결이 허용 / 허용되지 않는지 설명해 주시겠습니까?
코딩 스님

그래, 좀 더 설명하고 싶다. "iproute2를 사용하여 다음을 수행하십시오"는 iproute2가 무엇인지 또는이 조치를 수행 할 시스템에 대해 명시 적으로 설명하지 않습니다.
deanresin

퍼블릭 IP 서브넷은 어떻게 얻습니까? 웹을 잠시 동안 검색했지만 찾을 수 없습니다. 정확히 무엇입니까?
토니 프리즈

2

조금 늦을 수도 있지만 ...

문제는 기본 게이트웨이가 OpenVPN에 의해 ​​변경되고 OpenVPN을 시작하기 전에 적절한 경로를 설정하지 않으면 현재 SSH 연결이 끊어진다는 것입니다.

다음은 저에게 효과적입니다. iptables와 ip (iproute2)를 사용합니다. 아래에서는 OpenVPN이 시작되기 전의 기본 게이트웨이 인터페이스가 "eth0"이라고 가정합니다. eth0이 더 이상 기본 게이트웨이 인터페이스가 아니더라도 eth0에 연결할 때 연결에 대한 응답 패킷이 eth0에서 다시 되돌아 오도록하는 것입니다.

연결 표시, 방화벽 표시 및 라우팅 테이블에 동일한 번호를 사용할 수 있습니다. 나는 그들 사이의 차이점을 더 분명하게하기 위해 별개의 숫자를 사용했습니다.

# set "connection" mark of connection from eth0 when first packet of connection arrives
sudo iptables -t mangle -A PREROUTING -i eth0 -m conntrack --ctstate NEW -j CONNMARK --set-mark 1234

# set "firewall" mark for response packets in connection with our connection mark
sudo iptables -t mangle -A OUTPUT -m connmark --mark 1234 -j MARK --set-mark 4321

# our routing table with eth0 as gateway interface
sudo ip route add default dev eth0 table 3412

# route packets with our firewall mark using our routing table
sudo ip rule add fwmark 4321 table 3412

===

최신 정보:

위의 내용은 데비안 제시에서 잘 작동합니다. 그러나 이전 Wheezy 시스템에서는 라우팅 테이블 항목에 "via"를 추가해야한다는 것을 알았습니다.

# our routing table with eth0 as gateway interface
sudo ip route add default dev eth0 via 12.345.67.89 table 3412

"12.345.67.89"는 원래 비 VPN 게이트웨이 여야합니다.


ExpressVPN에서도 작동해야합니까? 명령 줄 도구 "expressvpn"과 함께 제공되는 설치 관리자가 있으며 "connect"또는 "disconnect"를 호출 할 수 있습니다. 게시 한 내용을 시도했지만 작동하지 않습니다. OpenVPN이어야합니까?
Tony Friz

나는 이것을 작동시킬 수 없다. @hcb의 위의 답변이 작동합니다. 그러나 왜 당신의 대답이 저에게 효과가 없는지 궁금합니다! 내가 누락 된 것으로
MANGLE
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.