转发 detail remote 进程 正向代理 理发 con aux 端口映射
一、场景如下:
各个角色的对应关系如下:
角色 | 描述 |
---|---|
APP | 个人笔记本,属于内网IP |
sshd server | 公网 VPS ( 映射端口: 2222 ),拥有公网IP |
ssh client | 内网机器,属于另一个内网IP |
APPSRV |
与 内网 ssh client 是同一台机器 ( 目的端口: 22 ) |
两个帐号:admin/password为“内网机器”ssh的登录帐号密码,
/password为“公网VPS”ssh的登录帐号密码
- VPS-user
网络连通情况:“内网机器”可以访问公网VPS,“个人笔记本”可以访问“公网VPS”,但是不可以访问“内网机器”;“公网VPS”不能访问“内网机器”,也不能访问“个人笔记本”
二、目标:实现私网的笔记本访问另一个私网的“内网机器”
三、思路:建立反向代理,把访问公网VPS某个端口的流量映射到“内网机器”的某个端口;然后建立正向代理,把“个人笔记本”对“内网机器”的访问流量、访问请求,通过代理发给“VPS”的那个映射端口
四、步骤:
1、反向代理:“公网VPS”===>"内网机器",通过内网机器反向连接VPS
在内网机器上配置:
- (ssh clinet) # ssh -CfnNT -R 2222:localhost:22 [email protected]
- (ssh clinet) # ssh
- -p 22 -qngfNTR 6666:localhost:22 [email protected]
这样就把“内网机器”的22端口转发到了远程机器(VPS)的6666端口上
查看内网机器的进程
[ssh clinet ~]# ps aux | grep "ssh -p"
root 14594 0.0 0.0 59856 1056 ? Ss 11:16 0:00 ssh -p 22 -qngfNTR 6666:localhost:22
- [email protected]
查看公网VPS的端口情况,注意端口6666,只有本地环回地址可以访问
[sshd server ~]# netstat -anpt | grep 6666
tcp 0 0 127.0.0.1:6666 0.0.0.0:* LISTEN 10703/sshd
这时候,在公网VPS上就可以通过ssh连接内网机器,打通了“公网VPS”到“内网机器”的访问通道
[sshd server ~]# ssh -p 6666 [email protected]
[email protected]‘s password:
输入“内网机器”ssh帐号的密码“password”,就可以在公网VPS上实现到内网机器的ssh连接
2、正向代理:“个人笔记本”===>“公网VPS”
在“个人笔记本”上配置:[App ~] #
- ssh
- -p 6666 -qngfNTD 6767 [email protected],这样,访问“个人笔记本”本机(127.0.0.1)端口6767的流量就流向了“内网机器”
但是目前,上面配置是不生效的,因为“公网VPS”的端口6666,只允许它自己访问。解决办法有两个:
a、思路:修改“公网VPS”的配置sshd_config,使其建立的SSH端口供所有IP访问
方法:把“公网VPS”配置文件/etc/ssh/sshd_config里的配置“GatewayPorts no”修改为“GatewayPorts yes”,重新执行步骤1,执行完查看“公网VPS”的6666端口如下
[sshd server ~]# netstat -anpt | grep 6666
tcp 0 0 0.0.0.0:6666 0.0.0.0:* LISTEN 10703/sshd
b、思路:不修改“公网VPS”的配置sshd_config,仍然采用默认配置“GatewayPorts no”,在“公网VPS”上增加一个本地端口映射,使新增加的端口供所有IP访问,或者供特定的IP访问
方法:在“公网VPS”上配置:[sshd server~] #
- ssh -fCNL *:6667:localhost:6666 localhost,这一步执行需要“公网VPS”的root帐号密码
查看“公网VPS”的进程和端口情况:
[sshd server ~]# netstat -anpt | grep 6667
tcp 0 0 0.0.0.0:6667 0.0.0.0:* LISTEN 1073/sshd
[ssh server ~]# ps aux | grep "ssh -p"
root 14594 0.0 0.0 59856 1056 ? Ss 11:16 0:00
- ssh -fCNL *:6667:localhost:6666 localhost
然后重复执行步骤2,不过端口由6666修改为6667
[App ~] #
- ssh
- -p 6667 -qngfNTD 6767 [email protected],这样,访问“个人笔记本”本机(127.0.0.1)端口6767的流量就流向了“内网机器”
五、注意事项
参考:
1、http://lvii.github.io/system/2013/10/08/ssh-remote-port-forwarding/
2、http://bobao.360.cn/learning/detail/4234.html
使用ssh从外网访问内网
来源: http://www.bubuko.com/infodetail-2317858.html