使用SSH建立隧道(端口转发)进行内网穿透
一.原理
利用ssh进行内网穿透主要是利用了ssh的隧道(端口转发)功能。首先内网主机通过ssh连接和一个具有公网ip的主机建立隧道,设置好服务器主机端口对内网主机端口的映射,之后所有外网对公网ip的请求均通过之前内网主机和服务器建立好的ssh隧道被转发到内网主机上,然后内网主机根据请求又通过隧道将对应的信息的返回。
二.实现前准备
1.ssh client(在服务器主机和内网主机都需要安装ssh客户端,ubuntu默认安装)
2.ssh server(在服务器主机和内网主机都需要安装ssh服务端,ubuntu默认不安装,apt-get install openssh-server)
3.一台具有公网ip的服务器主机
4.一台处于内网下的目标主机
二.举例
我们此时有一台内网主机,没有公网ip,内网可以访问外网,但是外网不能访问内网
1.内网主机: ip:192.168.3.146 port:1025
2.公网服务器:ip: port:24.68.47.2 port:22
三.实验中用的ssh命令工具
1.ssh -p [port] [user name]@[ip address] (连接远程服务器上的某个端口)
2.ssh -fNCR (反向代理)
3.ssh -fNCL (正向代理)
参数解释:
-p:指定连接端口
-f:后台执行ssh指令
-C:允许压缩数据
-N:告诉SSH客户端,这个连接不需要执行任何命令,仅仅做端口转发
-R:将远程主机(服务器)的某个端口转发到本地端指定机器的指定端口
-L:将本地机(客户机)的某个端口转发到远端指定机器的指定端口
四.具体配置
分为以下三步
1.建立ssh隧道:内网主机连接到服务器主机
2.在公网服务器上设置正向代理
3.ssh隧道
4.1.将内网主机的某个端口转发到服务器主机的指定端口(反向代理),操作在内网主机上。
工作原理:本地机器上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转发出去,。
ssh命令:
ssh -fCNR [服务器主机ip]:[服务器主机port]:[内网主机IP]:[内网主机port] [登陆服务器主机的用户名@服务器IP]
将内部主机的端口映射到公网服务器主机上的端口上
4.2.将服务器主机的某个端口转发到内网主机的指定端口(正向代理),操作在服务器主机上
工作原理:远程主机上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转向出去, 同时本地主机和 host 的 hostport 端口建立连接. 可以在配置文件中指定端口的转发. 只有用 root 登录远程主机才能转发特权端口