准备
一台处于广域网中的vps (ubuntu系统),vps安装ssh,局域网计算机安装ssh
开始
1.修改vps文件
- 修改vps文件
,在第一行添加代码/etc/ssh/sshd_config
GatewayPorts yes
- 开启端口,比如开启6666端口
-
查看当前端口是否被占用
lsof -i:6666
如果被占用的话可以杀死进程
kill 进程号
2.局域网主机连入
ssh -fNR 6666:localhost:80 root@vps的ip
输入vps登陆密码。完成。
3. 访问
现在访问vps的6666端口,就相当于访问局域网内计算机的80端口
4. 局域网计算机掉线
如果局域网计算机掉线,vps会等待一定的时间,如果在这个时间段内局域网计算机可以上网了,就恢复连接;如果超过这个时间段,vps就自动中断这条服务。具体戳 ssh几个超时参数
ssh 隧道代理转发
ssh 有三个强大的端口转发命令,分别是本地转发、远程转发、动态转发。
本地访问127.0.0.1:port1就是host:port2(用的更多)
ssh -CfNg -L port1:127.0.0.1:port2 user@host #本地转发
访问host:port2就是访问127.0.0.1:port1
ssh -CfNg -R port2:127.0.0.1:port1 user@host #远程转发
可以将dmz_host的hostport端口通过remote_ip转发到本地的port端口
ssh -qTfnN -L port:dmz_host:hostport -l user remote_ip #正向隧道,监听本地port
可以将dmz_host的hostport端口转发到remote_ip的port端口
ssh -qTfnN -R port:dmz_host:hostport -l user remote_ip #反向隧道,用于内网穿透防火墙限制之类
socket代理:
ssh -qTfnN -D port remotehost
参数详解:
-q Quiet mode. 安静模式
-T Disable pseudo-tty allocation. 不占用 shell 了
-f Requests ssh to go to background just before command execution. 后台运行,并推荐加上 -n 参数
-N Do not execute a remote command. 不执行远程命令,端口转发就用它了
-L port:host:hostport
将本地机(客户机)的某个端口转发到远端指定机器的指定端口. 工作原理是这样的, 本地机器上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转发出去, 同时远程主机和 host 的 hostport 端口建立连接. 可以在配置文件中指定端口的转发. 只有 root 才能转发特权端口. IPv6 地址用另一种格式说明: port/host/hostport
-R port:host:hostport
将远程主机(服务器)的某个端口转发到本地端指定机器的指定端口. 工作原理是这样的, 远程主机上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转向出去, 同时本地主机和 host 的 hostport 端口建立连接. 可以在配置文件中指定端口的转发. 只有用 root 登录远程主机才能转发特权端口. IPv6 地址用另一种格式说明: port/host/hostport
-D port
指定一个本地机器 “动态的’’ 应用程序端口转发. 工作原理是这样的, 本地机器上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转发出去, 根据应用程序的协议可以判断出远程主机将和哪里连接. 目前支持 SOCKS协议, 将充当SOCKS服务器. 只有 root 才能转发特权端口. 可以在配置文件中指定动态端口的转发.
1 ssh 本地转发
远程管理服务器上的 mysql,mysql 不能直接 root 远程登陆。这时候就可以通过本地转发,通过 ssh 将服务器的 3306 端口转发到本地 1234 端口
ssh -CfNg -L 1234:27.0.0.1:3306 root@vps的ip
2 ssh 远程转发
内网的服务器,外网不能直接访问,使用远程转发,将内网的服务器端口转发到外网端口。这时候访问外网的端口,就访问到了内网的端口。
ssh -CfNg -R 81:127.0.0.1:80 [email protected]
现在在 192.168.153.142 访问 127.0.0.1:81 就是访问内网的服务器的 80 端口。
3 ssh 动态转发 socks 代理
把远程主机设置成代理,来代理访问不能访问的资源。在地机器上分配了一个监听端口, 一旦这个端口上有了连接, 该连接就经过 ssh 隧道转发出去, 根据应用程序的协议可以判断出远程主机将和哪里连接。
ssh -qTfnN -D 1080 root@vps的ip
参考:http://www.zerokeeper.com/experience/network-port-forwarding-and-penetration.html