从 SSH 隧道创建网络接口

从 SSH 隧道创建网络接口

要通过 SSH 路由网络流量,大多数人会告诉您传递-D在本地主机上创建 SOCKS 代理的选项,您可以配置应用程序以使用该代理。

然而,简单的代理对我来说并不是最实用的解决方案。有没有什么办法可以访问 SSH 隧道作为它自己的接口,也许可以使用 TUN/TAP?

我正在使用Linux。

答案1

在 Linux 中使用 OpenSSH,只要设置正确的路由并在适当的情况下进行 IP 转发,就可以使用 TUN 或 TAP 接口通过 SSH 创建隧道。

对于创建TUN隧道,这里会留下一个实用的脚本,来自使用 Tun 通过 ssh 建立 Ip 隧道;该脚本假定您以 root 身份运行。

将“PermitTunnel yes”添加到 /etc/ssh/sshd_config
现在,在客户端上,就像使用一些参数运行 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.sh用于通过 TAP 接口创建 OpenSSH 隧道。

相关内容