Network-Interface

從 SSH 隧道創建網路介面

  • March 12, 2022

要通過 SSH 路由您的網路流量,大多數人會告訴您傳遞-D選項以在 localhost 上創建一個 SOCKS 代理,您可以配置您的應用程序以使用該代理。

然而,一個簡單的代理對我來說並不是最實用的解決方案。有什麼方法可以訪問 SSH 隧道作為它自己的介面,也許是 TUN/TAP?

我正在使用 Linux。

在 Linux 中使用 OpenSSH,可以使用 TUN 或 TAP 介面通過 SSH 創建隧道,只要設置正確的路由並在適當的地方進行 IP 轉發。

對於創建 TUN 隧道,將在此處留下一個實用腳本,來自Ip Tunnel Over Ssh With Tun;該腳本假定您以 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 隧道。

引用自:https://unix.stackexchange.com/questions/525217