1、SSH隧道
ssh -L localport:remoteip:remoteport username@ip
将本地端口localport收到的报文,通过中间节点ip,转发给远端节点remoteip的端口remoteport.
ssh -R remoteport:localip:localport username@ip
将主机ip端口remoteport收到的报文,转发给本地节点localip的端口localport.
ssh -D port username@ip
建立socks代理服务器,本地端口port为代理服务器的端口。
tip:避免长时间没有通信的连接断开,(1)ssh的命令上加上-o TCPKeepAlive=yes(默认是开启的)(2)加入一个定期输出的命令:ssh -R remoteport:localip:localport username@ip “vmstat 20"
2、通过代理连接ssh
ssh -o ProxyCommand="nc -x 127.0.0.1:7000 %h %p" user@host
如果7000端口是通过上面ssh -D建立的sock5代理,则相当于ssh over ssh。
(nc除了可以用socks代理,也可用https代理,nc -X connect -x 127.0.0.1:8080 ip port
3、ssh建立VPN
使用 tun/tap 设备来建立加密一个隧道。
修改/etc/ssh/sshd_config
PermitRootLogin yes
PermitTunnel yes
在client上执行:
ssh -w 1:1 root@serverip
然后在server端与client端配置tun1的地址。
server: ifconfig tun1 10.10.10.1/24
client: ifconfig tun1 10.10.10.2/24
然后可以配置ip_forward和iptables实现路由或NAT功能。
对比socat:
server端:socat tcp-l:9999,reuseaddr TUN:10.10.10.1/24,up
client端:socat tcp:serverip:9999 TUN:10.10.10.2/24,up