
내 서버가 위치한 서브넷에서만 액세스할 수 있는 특정 웹 사이트/서비스가 있습니다(일반적인 인트라넷 시나리오를 생각해 보세요). 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
면책 조항: 저는 제가 설명할 내용을 실제로 테스트하지 않았으며 실제로는 완전히 틀릴 수 있습니다. 하지만 귀하의 질문이 너무 흥미로워서 답변 초안을 작성하고 싶은 유혹을 뿌리칠 수 없습니다. :-) 또한 여기 설정은 iptables
Linux에만 존재할 수 있는 일부 기능에 따라 달라집니다.
랩톱에서 서버 X1의 특정 포트 P1, 서버 X2의 포트 P2 등으로 연결한다고 가정합니다. SSH 터널을 통해 TCP 트래픽을 이러한 특정 서버+포트 쌍으로 라우팅하는 방법을 설명하겠습니다. 메모:IP 주소 X1,X2 등은 게이트웨이 호스트(SSH를 사용하는 호스트)에서 볼 수 있는 서버의 IP 주소입니다.
사용하지 않는 로컬 포트 L1(예: 10000), L2(예: 10001) 등을 선택합니다. 포트 L1, L2, ...는 모두 고유해야 하며 해당 번호는 고유한 (Xn,Pn) 서버+의 수와 동일해야 합니다. 포트 쌍.
iptables
Xn:Pn으로 향하는 패킷을 localhost:Ln으로 리디렉션하는 데 사용됩니다 .iptables -t nat -A OUTPUT -p tcp -d X1 --dport P1 -j DNAT --대상 로컬 호스트:L1 iptables -t nat -A OUTPUT -p tcp -d X2 --dport P2 -j DNAT -- 목적지 localhost:L2
-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을 설정하는 것이 더 쉬울 수 있습니다.
-D
SSH 옵션을 사용하여 SOCKS 프록시를 시뮬레이션하고 이를 통해 모든 트래픽을 터널링하는 것이 여전히 더 쉬울 수 있습니다 .
답변4
모든 트래픽을 서버를 통해 전송하는 전체 VPN 솔루션을 실행하지 않고도 X와 Y의 서브넷에 대한 모든 트래픽을 자동으로 캡슐화하여 이 터널을 통과할 수 있습니까?
이것이 VPN이 수행하는 작업이기 때문에 언뜻 보기에는 약간 이상합니다. SSH는 지점 간 작업인 경향이 있습니다. 즉, 로컬 시스템의 한 포트를 다른 곳에 있는 원격 시스템의 포트에 연결한다는 아이디어입니다. 실제로는 여러분이 상상하는 트래픽 유형에 맞게 설계되지 않았습니다.
즉, 다른 서브넷으로 이동하는 모든 트래픽은 서버를 통과하지 않고(터널을 사용하여) 랩톱에서 직접 이동해야 합니다.
다시 말하지만 VPN이 이를 처리합니다.
안전한 VPN 트래픽을 확보하기 위한 "무거운" 솔루션에 대해 우려하는 경우(즉, 너무 복잡하기 때문에 문제를 일으키고 싶지 않은 경우) 실제로 살펴봐야 합니다.오픈VPN, 이는 귀하가 설명하는 것과 정확히 일치합니다. 모든 트래픽을 캡슐화할 뿐만 아니라 해당 서브넷으로 향하는 트래픽만 VPN 파이프를 통해 이동하는 방식으로 수행될 수 있습니다. 로컬 및 원격 컴퓨터에서 여전히 텍스트 파일을 편집해야 하지만 실행하기가 매우 쉽다는 점을 경고하겠습니다.
귀하의 목적을 위해 중간(서버)에 있는 당사자가 귀하의 트래픽을 보는 것을 원하지 않기 때문에 귀하의 컴퓨터에서 원격 컴퓨터로 직접 연결하도록 VPN을 설정합니다. 라우팅된 모든 패킷은 노트북을 떠나기 전에 암호화되므로 100% 엔드투엔드 범위를 갖게 됩니다.