SSH 터널에서 네트워크 인터페이스 생성

SSH 터널에서 네트워크 인터페이스 생성

-DSSH를 통해 네트워크 트래픽을 라우팅하려면 대부분의 사람들은 애플리케이션에서 사용하도록 구성할 수 있는 localhost에 SOCKS 프록시를 생성하는 옵션을 전달하라고 지시합니다 .

그러나 간단한 프록시는 나에게 가장 실용적인 솔루션이 아닙니다. TUN/TAP을 사용하여 자체 인터페이스로 SSH 터널에 액세스할 수 있는 방법이 있습니까?

저는 리눅스를 사용하고 있습니다.

답변1

Linux에서 OpenSSH를 사용하면 적절한 경우 올바른 라우팅 및 IP 전달을 설정하기만 하면 TUN 또는 TAP 인터페이스를 사용하여 SSH를 통해 터널을 생성할 수 있습니다.

TUN 터널을 생성하기 위해 여기에 실용적인 스크립트가 남습니다.Tun을 사용하여 SSH를 통해 IP 터널 설정;이 스크립트는 루트로 실행하고 있다고 가정합니다.

/etc/ssh/sshd_config에 "PermitTunnel yes"를 추가합니다.
이제 클라이언트에서 일부 매개변수를 사용하여 ssh를 실행하는 것만큼 간단합니다. 시작 스크립트는 다음과 같습니다.

#!/bin/sh
HOST=REMOTE_PARTY_ADDRESS
HOST_PORT=22
TUN_LOCAL=0   # tun device number here.
TUN_REMOTE=0  # tun device number there
IP_LOCAL=192.168.111.2 # IP Address for tun here
IP_REMOTE=192.168.111.1 # IP Address for tun there.
IP_MASK=30 # Mask of the ips above.
NET_REMOTE=192.168.0.0/16 # Network on the other side of the tunnel
NET_LOCAL=192.168.8.0/24  # Network on this side of the tunnel

echo "Starting VPN tunnel ..." 
modprobe tun
ssh -w ${TUN_LOCAL}:${TUN_REMOTE} -f ${HOST} -p ${HOST_PORT} "\
ip addr add ${IP_REMOTE}/${IP_MASK} dev tun${TUN_REMOTE} \
&& ip link set tun${TUN_REMOTE} up \
&& ip route add ${NET_LOCAL} via ${IP_LOCAL} \
&& true"
sleep 3
ip addr add ${IP_LOCAL}/${IP_MASK} dev tun${TUN_LOCAL}
ip link set tun${TUN_LOCAL} up
ip route add ${NET_REMOTE} via ${IP_REMOTE}
echo "... done."

단일 컴퓨터가 아닌 네트워크에 액세스/설정하려면 다음과 같이 IP 전달도 활성화해야 합니다.

sudo sysctl -w net.ipv4.ip_forward=1

스크립트도 있어요https://github.com/trustedsec/tap/blob/master/scripts/ssh-tunnel.shTAP 인터페이스를 통해 OpenSSH 터널을 생성하는 데 사용됩니다.

관련 정보