SSHトンネルでのネットワークインターフェイスの作成

SSHトンネルでのネットワークインターフェイスの作成

-DSSHを介してネットワークトラフィックをルーティングするには、ほとんどの人がアプリケーションで使用するように設定できるlocalhostにSOCKSプロキシを作成するオプションを渡すように指示します。

しかし、単純なプロキシは私にとって最も実用的な解決策ではありません。 TUN / TAPを使用して独自のインターフェイスでSSHトンネルにアクセスする方法はありますか?

私はLinuxを使用しています。

答え1

LinuxでOpenSSHを使用すると、適切な場合は正しいルーティングとIP転送を確立するだけで、TUNまたはTAPインターフェースを使用してSSH経由でトンネルを作成できます。

TUNトンネルを生成するために、ここに実用的なスクリプトが残ります。Tunを使用したSSH経由のIPトンネルの設定; このスクリプトは root として実行していると仮定します。

/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 トンネルを生成するために使用されます。

関連情報