SSH端口转发

来源:互联网 发布:淘宝助理天猫版界面 编辑:程序博客网 时间:2024/06/06 09:56

目录:
1. 正向转发
2. 动态转发(SOCKS代理)
3. 反向转发

相关信息:

  • 两个网段(不能互通):172.16.1.0/24,192.168.68.0/24;
  • 172.16.1.0/24网段有一台ip为172.16.1.1的Linux服务器,安装了WEB服务,并将SSH的22端口在网关上做了端口映射,可以让192.168.68.0/24网段访问;
  • 192.168.68.0/24网段有一台ip为192.168.68.203的Linux服务器,需要访问172.16.1.1的WEB服务;
  • Linux服务器都已经关闭防火墙;

1. 正向转发
1.1. 安装相关软件包

[root@srv68_203 ~]# yum install -y openssh-clients[root@srv68_203 ~]# rpm -qa openssh-clientsopenssh-clients-5.3p1-94.el6.x86_64

1.2. 创建正向转发
将172.16.1.1服务器上的80端口映射到本地127.0.0.1的8080端口(访问127.0.0.1的8080等于访问172.16.1.1的80)

[root@srv68_203 ~]# ssh -N -L 127.0.0.1:8080:localhost:80 root@172.16.1.1root@172.16.1.1's password:(输入密码后会卡住不动,因为命令加了-N参数)

1.3. 新开一个192.168.68.203的终端窗口,并使用curl命令测试访问127.0.0.1的8080

[root@srv68_203 ~]# netstat -antplu|grep 8080tcp 0 0 127.0.0.1:8080 0.0.0.0:* LISTEN 2306/ssh [root@srv68_203 ~]# curl http://127.0.0.1:8080hello worldweb server:172.16.1.1

测试访问成功!

如果想转发172.16.1.0/24网段里的其他服务器指定端口,就把localhost:80改为如:172.16.1.2:21

[root@srv68_203 ~]# ssh -N -L 127.0.0.1:8080:172.16.1.2:21 root@172.16.1.1

如果想让其他人也能够访问转发后的端口,就把127.0.0.1改为如:0.0.0.0:8080

[root@srv68_203 ~]# ssh -N -L 0.0.0.0:8080:172.16.1.2:21 root@172.16.1.1

2. 动态转发(SOCKS代理)
2.1. 创建动态转发(-g参数表示允许其他主机也能使用动态转发,默认只允许本机)

[root@srv68_203 ~]# ssh -g -N -D 8080 root@172.16.1.1root@172.16.1.1's password:(输入密码后会卡住不动,因为命令加了-N参数)

2.2. 新开一个192.168.68.203的终端窗口,并使用curl命令测试访问172.16.1.1:80和172.16.1.2:80

[root@srv68_203 ~]# netstat -antplu|grep 8080tcp 0 0 127.0.0.1:8080 0.0.0.0:* LISTEN 2537/ssh

2.3. 测试访问动态转发
在192.168.68.0/24网段里找一台Windows服务器,并在浏览器里设置代理服务器:
Internet 选项—局域网(LAN)设置—代理设置—套接字



如果想设置全局socks代理访问tcp/udp类的资源,可以用以下软件:
Windows:Proxifier,ProxyCap
Linux:proxychains,redsocks,tsocks

资料:http://blog.creke.net/770.html
3. 反向转发
某一天管理员把172.16.1.0/24网段的网关端口映射功能关闭了,导致172.16.1.1的SSH转发不能用了。
但是又想让192.168.68.0/24网段继续访问172.16.1.1的WEB服务,怎么操作呢?
首先需要将192.168.68.203的22端口添加映射,使172.16.1.1能通过SSH做反向转发:

在172.16.1.0/24网段里登录172.16.1.1
3.1. 创建反向转发
将172.16.1.1服务器上的80端口映射到192.168.68.203的127.0.0.1:8080端口(访问192.168.68.203的8080等于访问172.16.1.1的80)

[root@srv1_1 ~]# ssh -N -R 127.0.0.1:8080:localhost:80 root@192.168.68.203root@192.168.68.203's password:(输入密码后会卡住不动,因为命令加了-N参数)

3.2. 在192.168.68.0/24网段里登录192.168.68.203,并使用curl命令测试访问127.0.0.1的8080

[root@srv68_203 ~]# netstat -antplu|grep 8080tcp 0 0 127.0.0.1:8080 0.0.0.0:* LISTEN 2372/ssh [root@srv68_203 ~]# curl http://127.0.0.1:8080hello worldweb server:172.16.1.1

测试访问成功!

如果想转发172.16.1.0/24网段里的其他服务器指定端口,就把localhost:80改为如:172.16.1.2:21

[root@srv1_1 ~]# ssh -N -R 127.0.0.1:8080:172.16.1.2:21 root@192.168.68.203

如果想让其他人也能够访问转发后的端口,就把127.0.0.1改为如:0.0.0.0:8080

[root@srv1_1 ~]# ssh -N -R 0.0.0.0:8080:172.16.1.2:21 root@192.168.68.203

这里需要注意,还需要开启192.168.68.203 SSH服务器里的GatewayPorts功能,否则其他人是没法直接访问的(即使绑定的是0.0.0.0:8080)

[root@srv68_203 ~]# sed -i.bak 's/^#GatewayPorts.*$/GatewayPorts yes/g' /etc/ssh/sshd_config[root@srv68_203 ~]# /etc/init.d/sshd restartStopping sshd: [ OK ]Starting sshd: [ OK ]
重新在172.16.1.1上运行反向连接命令

[root@srv1_1 ~]# ssh -N -R 127.0.0.1:8080:localhost:80 root@192.168.68.203

资料:http://www.ibm.com/developerworks/cn/linux/l-cn-sshforward/index.html

0 0