通过SSH实现流量转发与VPN搭建的技术指南

本文详细介绍了如何利用SSH进行本地/远程/动态端口转发,以及如何通过SSH建立VPN隧道来突破工具限制,实现TCP/UDP/ICMP等多协议访问内网资源的技术方案。

SSH端口转发技术详解

本地端口转发

通过-L参数可将远程服务映射到本地端口。例如发现目标机(192.168.136.120)的8080端口运行着Python HTTP服务时,执行:

1
ssh -N -L 8081:127.0.0.1:8080 user@192.168.136.120

即可通过本机8081端口访问目标机的本地服务。

远程端口转发

当目标机SSH入站被阻时,使用-R参数从目标机发起反向隧道:

1
ssh -N -R 8081:127.0.0.1:8080 tester@192.168.136.130

动态端口转发

通过-D参数创建SOCKS代理(如1080端口),配合Proxychains实现内网扫描:

1
2
3
ssh -D 1080 user@192.168.136.120
sed -i 's/^socks4.*/socks5 127.0.0.1 1080/' /etc/proxychains4.conf
proxychains4 -q nmap -sT -Pn 10.10.10.128

SSH VPN搭建方案

当需要突破SOCKS代理的TCP限制时,可建立三层VPN隧道:

  1. 测试机配置
1
2
3
ip tuntap add mode tun tun0
ip addr add 10.1.1.10/24 dev tun0
ip route add 10.10.10.0/24 via 10.1.1.10
  1. 目标机配置
1
2
3
4
5
6
7
8
9
# 修改sshd_config
PermitTunnel yes
systemctl reload sshd

# 网络配置
ip tuntap add mode tun tun0
ip addr add 10.1.1.20/24 dev tun0
sysctl -w net.ipv4.conf.ens36.forwarding=1
iptables -t nat -A POSTROUTING -o ens36 -j MASQUERADE
  1. 建立隧道
1
ssh -f -w 0:0 user@192.168.136.120 true

技术对比

方案类型 所需权限 支持协议 配置复杂度
端口转发 普通用户 TCP 简单
SSH VPN root权限 全协议 复杂
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计