it-swarm-ko.tech

터널을 통해 특정 주소를 라우팅하는 방법은 무엇입니까?

내 서버가있는 서브넷에서만 액세스 할 수있는 특정 웹 사이트/서비스가 있습니다 (일반적인 인트라넷 시나리오를 생각해보십시오). SSH 터널을 통해 이러한 주소로 이동하는 트래픽을 투명하게 라우팅하는 방법이 있습니까?

다음 설정을 고려하십시오.

내 노트북이 홈 네트워크에 연결되어 있습니다. ips X 및 Y의 서비스에 직접 액세스 할 수 없습니다. 실제로 이러한 서비스에 액세스 할 수있는 서브넷에있는 서버에 대한 SSH 터널이 있습니다.

서버를 통해 모든 트래픽을 보내는 전체 VPN 솔루션을 실행하지 않고도이 터널을 통과하기 위해 X와 Y의 서브넷에 대한 모든 트래픽을 어떻게 든 자동으로 캡슐화 할 수 있습니까? 즉, 다른 서브넷으로 이동하는 모든 트래픽은 서버를 통과하지 않고 (터널 사용) 랩톱에서 직접 이동해야합니다.

14
Ruben Vermeersch

라우팅 테이블에서 트래픽을 라우팅 할 인터페이스를 지정할 수 있습니다.

Sudo route add <Host.com> -interface <ppp0>

여기서 Host.com은 인터페이스를 통해 액세스하려는 호스트 이름 또는 IP이고 ppp0은 ifconfig 명령으로 표시되는 VPN의 링크 식별자입니다.

6
Sam Coles

최신 버전의 OpenSSH는 진정한 VPN 지원을 위해 tun/tap 네트워크 장치를 지원합니다. 일부 기본 문서는 https://help.ubuntu.com/community/SSH_VPN 을 참조하십시오 (분명히 Ubuntu 용이지만 기본 원칙은 다른 곳에 적용됨).

3
durin42

면책 조항 : 제가 설명 할 내용을 실제로 테스트하지 않았으며 실제로 완전히 틀릴 수 있지만 귀하의 질문이 너무 흥미로워 서 답을 작성하려는 유혹에 저항 할 수 없습니다. :-) 또한 여기서 설정은 Linux에만 존재할 수있는 일부 iptables 기능에 따라 다릅니다.

랩톱에서 서버 X1의 특정 포트 P1, 서버 X2의 포트 P2 등으로 연결한다고 가정합니다.-TCP 트래픽을 이러한 특정 트래픽으로 라우팅하는 방법을 설명하겠습니다. SSH 터널을 통한 서버 + 포트 쌍 참고 : IP 주소 X1, X2 등은 게이트웨이 호스트 (SSH를 사용하는 호스트)에서 본 서버의 IP 주소입니다.

  1. 사용하지 않는 일부 로컬 포트 ​​L1 (예 : 10000), L2 (예 : 10001) 등을 선택합니다. 포트 L1, L2, ...는 모두 구별되어야하며 번호는 구별 (Xn, Pn) 서버의 수와 같아야합니다. 포트 쌍.

  2. iptables를 사용하여 Xn : Pn으로 향하는 패킷을 localhost : Ln으로 리디렉션합니다.

    iptables -t nat -A OUTPUT -p tcp -d X1 --dport P1 -j DNAT --to-destination localhost : L1 iptables -t nat -A OUTPUT -p tcp -d X2 --dport P2 -j DNAT- 목적지 localhost : L2

  3. 이제 -L 옵션을 사용하여 localhost : Ln에서 (Xn, Pn)으로 트래픽을 터널링하는 SSH를 게이트웨이에 연결합니다.

    ssh gateway.server -L localhost : L1 : X1 : P1 -L localhost : L2 : X2 : P2 ...

예:

# access webserver.intranet (port 80) through localhost:10080
iptables -t nat -A OUTPUT -p tcp -d webserver.intranet --dport 80 -j DNAT --to-destination localhost:10080
ssh gateway.server -L locahost:10080:webserver.intranet:80

주의 사항 :

  • tCP에서만 작동합니다. 작동한다면 ...

  • 둘 이상의 서버에 액세스하려면 VPN을 설정하는 것이 더 간단합니다.

  • sSH -D 옵션을 사용하여 SOCKS 프록시를 시뮬레이션하고이를 통해 모든 트래픽을 터널링하는 것이 여전히 더 쉬울 수 있습니다.

1
Riccardo Murri

서버를 통해 모든 트래픽을 보내는 전체 VPN 솔루션을 실행할 필요없이 X 및 Y의 서브넷이이 터널을 통과 할 수 있습니까?

원하는 것은 VPN의 정의입니다.

VPN은

모든 [귀하의] 트래픽을 서버를 통해 보내시겠습니까?

그렇다면 제대로 설정되지 않은 것입니다.

터널 또는 VPN을 통해 액세스하려는 모든 머신은 정의에 따라 인터넷을 통해 액세스 할 수 없다고 가정합니다. 따라서 인터넷에서 라우팅 할 수없는 필요한 주소 만 VPN을 통해 라우팅되어야합니다.

기계 X와 Y 만 있고 다른 것은없는 것처럼 더 복잡한 상황이있는 경우. IT 직원이이를 서브넷에 배치 할 수 있습니다. 그런 다음 클라이언트 컴퓨터에서 해당 서브넷 만 VPN으로 라우팅합니다.

1
Stephen Jazdzewski

서버를 통해 모든 트래픽을 보내는 전체 VPN 솔루션을 실행하지 않고도이 터널을 통과하기 위해 X와 Y의 서브넷에 대한 모든 트래픽을 어떻게 든 자동으로 캡슐화 할 수 있습니까?

VPN이 당신을 위해 할 일이기 때문에 이것은 언뜻보기에 약간 이상합니다. SSH는 지점 간 문제가되는 경향이 있습니다. 즉, 로컬 컴퓨터의 한 포트를 다른 원격 컴퓨터의 포트에 연결하는 것입니다. 실제로 당신이 구상하는 트래픽 유형에 맞게 설계되지 않았습니다.

즉, 다른 서브넷으로 이동하는 모든 트래픽은 서버를 통과하지 않고 (터널 사용) 랩톱에서 직접 이동해야합니다.

다시 말하지만 VPN이이를 처리합니다.

보안 VPN 트래픽을 얻기위한 "무거운"솔루션에 대해 우려하는 경우 (즉, 너무 복잡하기 때문에이를 사용하고 싶지 않음) 실제로 OpenVPN 을 살펴 봐야합니다. 정확히 무엇을 설명하고 있는지. 모든 트래픽을 캡슐화 할뿐만 아니라 해당 서브넷으로 향하는 트래픽 만 VPN 파이프를 통해 이동하는 방식으로 수행 할 수 있습니다. 로컬 및 원격 시스템에서 여전히 텍스트 파일을 편집해야하지만 실행하기가 매우 쉽습니다.

목적을 위해 중간에있는 당사자 (서버)가 트래픽을 보는 것을 원하지 않기 때문에 VPN을 설정하여 시스템에서 원격 시스템으로 직접 연결합니다. 라우팅 된 패킷은 랩톱을 떠나기 전에 암호화되므로 100 % 종단 간 서비스를받을 수 있습니다.

0
Avery Payne

다른 사람들이 말했듯이 "서브넷에 대한 모든 트래픽을 캡슐화"해야한다면 VPN을 사용하고 싶을 것입니다.

그러나 몇 가지 서비스에만 액세스하려면 SSH의 로컬 포트 ​​전달 기능을 사용하는 것이 좋습니다. 이것은 정말 간단합니다. 예를 들어 (노트북에서) 다음을 입력하면 :

ssh -N -L 3333:localhost:2222 jump_box

그런 다음 localhost:2222에 연결하면 localhost:2222에서 jump_box에 연결하는 것과 같습니다. 한 번에 여러 -L 옵션을 사용할 수 있으며 jump_box의 ssd_config에서 허용하는 경우 다른 호스트의 서비스에 연결할 수 있습니다.

autosshsystemd 등과 함께 사용하여 터널을 계속 가동 할 수 있습니다.

0
Jeff