서버 시스템에서 VPN에 로그인 한 후 SSH 연결 손실 방지


14

처리 할 수없는 문제가 발생했습니다. SSH를 통해 VPS에 로그온하고 해당 VPS에서 VPN 연결을 설정하려고하면 VPS와 컴퓨터 간의 SSH 연결이 끊어집니다. VPN 설정에 의해 라우팅이 변경 되었기 때문이라고 생각합니다. 그것을 막는 방법?


VP 설정 후 SSH에 연결하는 것은 어떻습니까? : p VPN이 라우팅 경로를 덮어 쓰기 때문에 발생하는 것이 맞습니다. 할 수있는 일은 원래 경로를 그대로 유지하고 추가 VPN 경로를 추가하는 것입니다 (VPS를 프록시로 사용하지 않는 한 다른 이야기입니다). 어떤 클라이언트를 사용하십니까?
Nikolaidis Fotis

"해당 VPS에서 VPN 연결을 설정하려고합니다"는 무슨 의미입니까? 컴퓨터에서 VPS의 Openvpn 서버에 연결하고 있습니까? VPS가 세 번째 호스트에서 실행되는 Openvpn 서버에 연결하고 있습니까? 이 마지막 VPN 연결이 일부 경로를 다시 밀고 있습니까? 또한 VPS에 도달하기위한 NAT 변환이 없는지 확인하십시오 (인터페이스에 구성된 IP 주소가 SSH 연결에서 지정한 것과 동일합니까?
Damiano Verzulli

@NikolaidisFotis VPN이 실행 중이므로 연결할 수 없습니다. openvpn 클라이언트를 사용합니다. --route-noexec서버가 푸시 한 경로를 무시 하는 옵션이 있지만 언급 한 바와 같이 VPN을 프록시로 사용하고 싶을 때는 도움이되지 않습니다 ...
mic22

@DamianoVerzulli 두 번째 옵션, 예 경로가 푸시됩니다 (그러나 VPN이 컴퓨터의 원래 IP 주소를
클로킹

답변:


6

VPS의 OpenVPN 클라이언트 구성 파일에 route-nopull옵션 을 추가 redirect-gateway하고 존재 하는 경우 제거 해야합니다.

이렇게하면 VPN 서버에 연결해도 VPS의 경로가 수정되지 않으므로 필요한 경로를 직접 설정할 수 있습니다.


이 조언에 감사하지만 지금은 tun0을 통해 인터넷에 연결할 수 없습니다. 게이트웨이가 누락되었다고 가정합니다. tun0에 대한 게이트웨이를 추가하는 방법에 대한 아이디어가 있습니까? ifconfig의 관련 부분 :inet addr:10.56.10.6 P-t-P:10.56.10.5 Mask:255.255.255.255
Housemd

기본 ISP 게이트웨이를 통해 VPN 서버 자체에 경로를 수동으로 추가 한 다음 다른 모든 트래픽에 대해 10.56.10.5를 통해 기본 게이트웨이를 추가해야합니다.
Anubioz

미안 해요 당신이 무슨 말을했는지 모르겠습니다. 예를 들어 주시겠습니까?
Housemd

tun0을 통해 기본 경로를 사용하고 싶지 않지만 인터넷에 액세스하려면 tun0이 필요합니다.
Housemd

@Housemd hm tun0을 통해 인터넷에 접속해야합니까, 아니면 인터넷에 접속하려면 다른 곳에서 tun0을 통해 연결된 클라이언트가 필요하십니까?
아누 비즈

4

다음 시나리오를 고려하십시오.

  1. VPS에는 단일 이더넷 인터페이스가 있으며 IP 주소 4.3.2.1/24로 구성되어 있습니다.
  2. VPS는 기본 게이트웨이 4.3.2.254를 통해 인터넷에 액세스 할 수 있습니다
  3. VPS가 아직 OpenVPN 연결을 활성화 하지 않았습니다. 따라서 활성화 된 tun 인터페이스 가 없습니다

이러한 시나리오에서 머신 (def-gw 9.8.7.254를 사용하는 머신이 9.8.7.6/24라고 가정)에서 4.3.2.1에 대한 SSH 연결을 성공적으로 설정할 수 있습니다. 따라서 호스트 4.3.2.1과 9.8.7.6이 서로 성공적으로 도달 할 수 있습니다.

이제 SSH 연결이 설정되면 다음과 같이 가정하십시오.

  1. VPS 4.3.2.1에서 OpenVPN 연결을 시작합니다.
  2. 따라서 새로운 tun0 인터페이스는 동적으로 구성됩니다 (10.10.10.2 PTP와 함께 10.10.10.2 IP가 할당된다고 가정).

이 단계에서 :

  • 경우 에는 경로가 해당 지역의 VPS에 원격 OpenVPN을 서버에서 밀어되지 않습니다, 아무 것도 라우팅의 관점에서 변경됩니다, 그리고 당신의 SSH 연결은 전혀 문제없이 살아남을 것입니다. 이 경우 VPN을 통과하는 유일한 트래픽은 원격 OpenVPN 서버 (10.10.10.1)를 향한 트래픽입니다.

  • 경우 원격 OpenVPN을 서버가 어떤 경로를 다시 밀어되며, VPS 기본 게이트웨이가 10.10.10.1 (원격 OpenVPN의 엔드 포인트)로 대체됩니다 expecially에 있다면, 그때 당신은 문제가 있습니다. 이 경우 VPN 내에서 나가는 모든 IP 트래픽 (OpenVPN 자체 제외)을 터널링 합니다.

이 두 번째 경우 (VPN 연결을 설정 한 직후 def-gw 교체) 이전 비대칭 라우팅으로 인해 이전 SSH 연결이 "중지됩니다".

  • 머신 (9.8.7.6)에서 VPS (4.3.2.1) 로의 트래픽은 이전의 변경되지 않은 경로를 통해 흐릅니다.
  • VPS (4.3.2.1)에서 시스템 (9.8.7.6)으로의 트래픽 :
    • VPN이없는 (따라서 처음에는) 4.3.2.254 게이트웨이를 통해 라우팅되었습니다.
    • VPN 링크를 설정 한 후 관련 def-gw 교체와 함께 VPN (10.10.10.1)을 통해 라우팅됩니다.

즉, VPN 링크가 설정 되 자마자 VPS에서 시스템으로의 반송 경로가 변경 될 것입니다. 이것은 좋지 않습니다 (반환 경로를 따라 여러 네트워크 장치가 이러한 비대칭을 인식 할 수 있음) 경로와 단순히 패킷을 삭제).

또한 원격 OpenVPN 서버가 NAT 상자 역할을 할 가능성이 높습니다. VPN에서 들어오는 모든 트래픽은 원격 OpenVPN 서버의 공개 IP 주소로 NAT됩니다. 이것이 사실이라면 SSH 연결의 경우와 같이 더 이상 "좋지 않은"것이지만 확실히 "나쁜"것보다 다른 경로를 따라 돌아 오는 것 외에도 트래픽을 반환하면 시스템 으로 돌아옵니다. 다른 소스 IP (VPN 서버의 공용 인터페이스 중 하나)

이 문제를 해결하는 방법?

실제로 아주 쉽게.

VPS 서버 에 VPN을 따라 시스템으로 트래픽을 라우팅하지 말고 대신 이전 경로를 사용하도록 지시하십시오 . OpenVPN을 시작하기 전에 추가하는 것만 큼 쉬워야합니다.

     route add -host 9.8.7.6 gw 4.3.2.254

어디:

  • 9.8.7.6은 시스템 공용 IP 주소입니다
  • 4.3.2.254는 VPS의 원래 기본 게이트웨이입니다.

추신 : 훨씬 자세한 질문을 제공하면 훨씬 빠른 답변을 얻을 수 있습니다 :-)


귀하의 답변에 감사드립니다 @DamianoVerzulli! 기본 게이트웨이가 지정되지 않았습니다. route add0.0.0.0 gw가 포함 된 명령은 다음을 반환합니다.SIOCADDRT: Invalid argument
mic22

이것이 바로 openvpn이 연결된 직후에 얻는 것입니다[server] Peer Connection Initiated with [AF_INET]64.251.27.139:443; 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 10.200.1.251/22 broadcast 10.200.3.255; ERROR: Linux route add command failed: external program exited with error status: 2
mic22

@ mic22 :이 경우 VPS가 로컬 서브넷 외부에 도달 할 수 없으므로 VPS의 def-gw를 지정하지 않는 방법이 궁금합니다 (따라서 시스템-SSH를 통해 연결할 수 있음) 및 OpenVpn 서버 VPN을 구축 할 수 있으려면 "로컬"이어야하며, 따라서 매우 쓸모가 없습니다!) BTW : SSH를 통해 연결되면 "netstat -rn"(0.0.0.0, 두 번째 열로 시작하는 줄)을 사용하여 def-gw를 쉽게 얻을 수 있습니다.
Damiano Verzulli

netstat -rn결과 0.0.0.0 0.0.0.0 0.0.0.0 U 0 0 0 venet0내가 사용하는 VPS는 Ubuntu 14.04 서버가 탑재 된 OVH 기본 옵션입니다.
mic22

ifconfignetstat -rn출력 : goo.gl/TEZ61q
mic22

0

도움이 될 수 있습니다.

넣어 TCPKeepAlive=yes/etc/ssh/sshd_config

에서

man sshd_config | less +/'^ *TCPKeepAlive'

TCPKeepAlive

시스템이 다른쪽에 TCP keepalive 메시지를 보내야하는지 여부를 지정합니다. 전송 된 경우 연결이 끊어 지거나 시스템 중 하나의 충돌이 올바르게 감지됩니다. 그러나 이것은 경로가 일시적으로 다운되면 연결이 끊어지고 일부 사람들은 성가신 것을 알게됩니다. 반면, TCP 연결이 전송되지 않으면 세션이 서버에서 무기한 중단되어``고스트 ''사용자가 남고 서버 리소스를 소비 할 수 있습니다.

기본값은 yes'' (to send TCP keepalive messages), and the server will notice if the network goes down or the client host crashes. This avoids infinitely hanging sessions. To disable TCP keepalive messages, the value should be set tono ''입니다.


이미 올바른 TCPKeepAlive옵션 yes이 아닌 옵션을 설정했습니다
mic22

0

나는이 문제가 있었고 모든 권장 해결책을 시도했지만 여전히 내 문제는 해결되지 않았습니다!

많은 시도 시도 후, 나는 screen명령을 사용했다 . 내 VPN 클라이언트는 cisco-any-connect입니다.

$ screen -R VPN
$ openconnect -b "your server"

자격 증명을 제공 한 후에는 즉시 Ctrl + a + d를 눌러 세션으로 돌아갑니다.


0

개인적으로 저는 SSH를 통한 모든 연결이 VPN을 통해 라우팅되는 것을 선호합니다. VPN이 설정되기 전에 활성 ssh 연결의 경우 경로가 변경되어 다시 연결해야합니다.

autossh ssh 클라이언트 구성에서 다음을 추가 하는 것이 좋습니다..ssh/config

Host *
   ServerAliveInterval 300
   ServerAliveCountMax 2
   BatchMode yes
  • BatchMode 는 자동 재 연결을 나타냅니다
  • ServerAliveKeep Alive의 약자

-1

VPN 연결 후 ssh는 VPN 서버를 통해 이동하는 서버의 ssh 트래픽 때문에 연결이 끊어집니다. 이를 피하려면 VPN을 연결하기 전에 다음 명령을 실행하십시오.

경로 추가 -host your-machine-public-ip gw 서버 -gatway-ip dev eth0

your-machine-public-ip : SSH를 수행하는 컴퓨터의 IP입니다. Server-gatway-ip : 해당 서버의 Gatway / router IP

위 명령은 VPN 서버가 아닌 지정된 게이트웨이를 통해 트래픽을 리디렉션합니다.


이것은 혼란스럽고 언어는 거꾸로 나타납니다. SSH 대상의 IP 주소와 로컬 워크 스테이션의 기본 게이트웨이로 경로를 추가하지 않겠습니까?
rmalayter
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.