要通过 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 隧道。