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

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

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

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

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

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

답변1

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

sudo route add <host.com> -interface <ppp0>

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

답변2

최신 버전의 OpenSSH는 진정한 VPN 지원을 위해 네트워크 장치 조정/탭을 지원합니다. 바라보다https://help.ubuntu.com/community/SSH_VPN일부 기본 문서(분명히 Ubuntu에만 해당되지만 기본 원칙은 다른 곳에서도 적용됩니다.)

답변3

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

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

  1. 사용하지 않는 로컬 포트 ​​L1(예: 10000), L2(예: 10001) 등을 선택합니다. 포트 L1, L2, ...는 모두 고유해야 하며 해당 수는 고유한 (Xn, Pn) 서버 수 + 포트 쌍과 동일해야 합니다.

  2. iptablesXn:Pn으로 향하는 패킷을 localhost:Ln으로 리디렉션하는 데 사용됩니다 .

    iptables -t nat -A 출력 -p tcp -d X1 --dport P1 -j DNAT --대상 로컬 호스트로: L1 iptables -t nat -A 출력 -p tcp -d X2 --dport P2 -j DNAT - -Destination 로컬호스트: L2

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

    ssh 게이트웨이.서버 -L 로컬 호스트:L1:X1:P1 -L 로컬 호스트: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 옵션을 사용하여 SOCKS 프록시를 에뮬레이트하고 해당 프록시를 통해 모든 트래픽을 라우팅하는 것이 -D더 쉬울 수 있습니다 .

답변4

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

VPN이 바로 이런 역할을 하기 때문에 처음에는 조금 이상하게 보일 수 있습니다. SSH는 로컬 시스템의 포트를 다른 곳에 있는 원격 시스템의 포트에 연결하는 아이디어인 지점 간 방식인 경향이 있습니다. 실제로는 상상하는 트래픽 유형에 맞게 설계되지 않았습니다.

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

이번에도 VPN이 이 문제를 해결할 수 있습니다.

안전한 VPN 트래픽을 위한 "무거운" 솔루션을 구입하는 것이 걱정된다면(즉, 너무 복잡해서 사용하고 싶지 않은 경우) 실제로 살펴보아야 합니다.오픈VPN, 이는 귀하가 설명하는 것과 정확히 일치합니다. 모든 트래픽을 캡슐화할 뿐만 아니라 해당 서브넷으로 향하는 트래픽만 VPN 파이프를 통해 이동하는 방식으로 캡슐화합니다. 로컬 및 원격 컴퓨터 모두에서 여전히 텍스트 파일을 편집해야 하지만 작업은 매우 쉽습니다.

귀하의 목적에 맞게 중개자(서버)가 귀하의 트래픽을 보는 것을 원하지 않으므로 귀하의 컴퓨터에서 원격 컴퓨터로 직접 연결되도록 VPN을 설정할 수 있습니다. 라우팅된 모든 패킷은 노트북을 떠나기 전에 암호화되므로 100% 엔드투엔드 범위를 확보할 수 있습니다.

관련 정보