本地转发

假设有ssh服务器B,telnet服务器C被防火墙与外界隔离,此时外部主机A无法直接访问C服务器.

此时可以通过本地转发的方式让A与C借助B服务器通过ssh协议通信.

client

firewall

ssh server

telnet server

A(172.18.7.62)

-

B(172.18.7.77)

C(172.18.7.72)

centos6

-

centos7

centos7

此时A为SSH的客户端,同时也是telnet服务器的客户端,所以称为本地转发

配置本地转发示例:

  1.客户机A环境配置

    安装telnet客户端

    ]# yum install telnet

  2.配置好服务器环境.

   telnet服务器(服务器C):

    安装telnet服务

]# yum install telnet-server -y

    设为开机启动

]# systemctl enable telnet.socket

    启动服务

]# systemctl start telnet.socket

测试

  在客户机A执行

]# telnet 172.18.7.72
centos7 login: haha
Password:
Last login: Sat Jan 6 15:45:13 from 172.18.7.1
]$ logout

  连接成功

这时还需要模拟防火墙,只要在telnet服务器C设置iptables策略阻止客户机A的访问即可

服务器C:

  清空之前的策略

]# iptables -F

  设置策略阻止A访问

]# iptables -A INPUT -s 172.18.7.62 -j REJECT

  测试

回到客户机A

]# telnet 172.18.7.72
telnet 172.18.7.72
Trying 172.18.7.72...
telnet: connect to address 172.18.7.72: Connection refused

  已成功阻止A访问.

设置地址转发:

既然是本地转发,那一定就是在客户机A本地做设置:

设置格式为:

  ssh -L localport:remotehost:remotehostport sshserver

  ssh -L 本机随机一个未使用的端口:C的ip:C的端口 ssh服务器B的ip

所以应写成下面这样

]# ssh -L 9999:172.18.7.72:23 172.18.7.77 -Nf

  -N 不打开远程shell,因为我们无需在ssh主机执行命令

  -f 连接后后台运行.

此时来到ssh服务器查看网络连接

]# ss -nt
State Recv-Q Send-Q Local Address:Port Peer Address:Port
ESTAB 0 0 172.18.7.77:22 172.18.7.62:33208

可见,客户机A已经与ssh服务器B建立了连接.

下一步客户机A就可以使用telnet连接telnet服务器C了.

]# telnet 127.0.0.1 9999
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
Kernel 3.10.0-693.el7.x86_64 on an x86_64
centos7 login: haha
Password:
Last login: Mon Jan 8 20:54:28 from ::ffff:172.18.7.62
[haha@centos7 ~]$

登陆成功!

至此本地转发已实现

远程转发

远程转发与本地转发的区别在于,ssh的客户端与服务端互换了位置.

现在客户机A依然为应用的客户端,但是从ssh的客户端变为了ssh服务器.

同样,ssh服务器B,变成了ssh的客户端.

应用服务器的服务类型可以是任意一种,比如http,smtp,ftp等,这一次我们给应用服务添加smtp服务

app client,ssh server

firewall

ssh client

app server

A(172.18.7.62)

-

B(172.18.7.77)

C(172.18.7.72)

centos6

-

centos7

centos7

smtp的默认设置是只允许本机访问,我们把他改为所有主机可访问.

修改 /etc/postfix/main.cf文件的大概116行位置的inet_interfaces 值为all

]# vim /etc/postfix/main.cf
inet_interfaces = all

重启postfix服务

]# systemctl restart postfix

之后要在ssh客户端B设定远程端口转发.

命令格式为

  ssh -R sshserverport:remotehost:remotehostport sshserver

  ssh -R 主机A的端口:主机C的IP:主机C的端口 主机A

执行命令:

]# ssh -R 9998:172.18.7.72:25 172.18.7.62 -Nf

之后去A主机查看,发现已开启了本机9998端口监听.

]# ss -tnl
127.0.0.1:9998

此时A与B之间的隧道已建立成功.

测试:

在A上执行:

]# telnet 127.0.0.1 9998
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
220 centos7.qt ESMTP Postfix

已成功连接C服务器的25端口.

动态端口转发

假设场景如下

client

firewall

server1

google

A(172.18.7.62)

-

B(172.18.7.77)

C(172.18.7.72)

centos6

-

centos7

centos7

A被防火墙阻挡,无法访问C,但可以访问B,且B与C互通

操作示例:

firewall用C的iptables来实现,上面的实验中已实现.

接下来在A上面执行一条命令来建立隧道

命令格式

  ssh -D port root@sshserver

  ssh -D 本机随机一个端口 ssh服务器ip

写成这样:

]# ssh -D 9997 172.18.7.77 -Nf

然后去A,打开图形界面的Firefox,进入preference -> Advanced -> Network -> Settings ->

选择Manual proxy configuration. -> SOCKS host处填写:127.0.0.1,Port填写9997 -> OK

返回浏览器页面.访问地址 172.18.7.72 即可.

如果要使用命令行命令curl来访问,需要加--socks5选项

]# curl --socks5 127.0.0.1:9997 http://172.18.7.72
<h1>This is c7</h1>

SSH端口三种转发方式的更多相关文章

  1. Linux 双线策略路由的三种实现方式总结+端口映射

    Linux 双线策略路由的三种实现方式总结+端口映射 Linux 双线策略路由的三种实现方式总结+端口映射 网络环境 服务器(网关): eth0 为LAN口,IP为 LAN_IP = 192.168. ...

  2. linux学习之centos(二):虚拟网络三种连接方式和SecureCRT的使用

    ---操作环境--- 虚拟机版本:VMware Workstation_10.0.3 Linux系统版本:CentOS_6.5(64位) 物理机系统版本:win10  一.虚拟网络三种连接方式 当在V ...

  3. SignalR代理对象异常:Uncaught TypeError: Cannot read property 'client' of undefined 推出的结论 SignalR 简单示例 通过三个DEMO学会SignalR的三种实现方式 SignalR推送框架两个项目永久连接通讯使用 SignalR 集线器简单实例2 用SignalR创建实时永久长连接异步网络应用程序

    SignalR代理对象异常:Uncaught TypeError: Cannot read property 'client' of undefined 推出的结论   异常汇总:http://www ...

  4. spring-boot的三种启动方式[z]

    https://blog.csdn.net/u011425751/article/details/79507386 有段时间没有写博客了,也在努力的从传统单机开发向分布式系统过度,所以再次做一些笔记, ...

  5. [转]Apache HTTP Server 与 Tomcat 的三种连接方式介绍

    首先我们先介绍一下为什么要让 Apache 与 Tomcat 之间进行连接.事实上 Tomcat 本身已经提供了 HTTP 服务,该服务默认的端口是 8080,装好 tomcat 后通过 8080 端 ...

  6. Linux基石【第二篇】虚拟网络三种连接方式(转载)

    在虚拟机上安装完Centos系统后,开始配置静态IP,以方便在本宿主机上可以访问虚拟机,在曲折的配置中,了解到虚拟机还有三种连接方式:Bridged,NAT和Host-only,于是,我又一轮新的各种 ...

  7. python笔记-20 django进阶 (model与form、modelform对比,三种ajax方式的对比,随机验证码,kindeditor)

    一.model深入 1.model的功能 1.1 创建数据库表 1.2 操作数据库表 1.3 数据库的增删改查操作 2.创建数据库表的单表操作 2.1 定义表对象 class xxx(models.M ...

  8. css 三种引用方式

    内联式 代码 <!doctype html> <html lang="en"> <head> <meta charset="UT ...

  9. 【转】vue.js三种安装方式

    Vue.js(读音 /vjuː/, 类似于 view)是一个构建数据驱动的 web 界面的渐进式框架.Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件.它不仅易于上手 ...

随机推荐

  1. unity 2018获取本地ip 问题,ipaddress

    Network.Player.ipAddress这个API在Unity2018被移除了 用如下代码 using System.Net; using System.Net.NetworkInformat ...

  2. WPF在XAML中使用MultiBinding的两个例子

    使用MultiBinding的原则:数据源有一个以上: 1. 需求:在一个需要显示的内容中,不同的部分要进行的处理不一样,这时可以使用MultiBinding <TextBlock> &l ...

  3. Java对zip格式压缩和解压缩

    Java对zip格式压缩和解压缩 通过使用java的相关类可以实现对文件或文件夹的压缩,以及对压缩文件的解压. 1.1 ZIP和GZIP的区别 gzip是一种文件压缩工具(或该压缩工具产生的压缩文件格 ...

  4. hadoop-0.20.2安装配置

    该环境在Vmware Workstation 12 上安装配置一共三台机器master,slave1,slave2. 操作系统:Cenos 7.0 hadoop 版本:hadoop-0.20.2,版本 ...

  5. HaspMap的新奇用法

    HashMap<String, String> map = new HashMap<String,String>(){ private static final long se ...

  6. WPF的MediaElement指定Source无法播放问题解决

    最近学wpf,在使用 MediaElement 指定 Source 进行视频播放时,在源码界面可以正常显示,但运行时控件显示空白. 源码界面如下图:(可正常显示) 运行后如下图所示:(控件位置显示空白 ...

  7. Visual Studio for Mac 安装无响应或者无法连接网络等解决方法

    1.无法连接到网络 2.点击安装和更新无响 这两种情况造成的原因都是由于被墙的原因,第一种情况有部分可以通过fq解决,第二种情况是我遇到过的 反正我全局也失败 这里给出一个我自己用过的解决方案 查看控 ...

  8. 如何在 Azure 中创建 ASP.NET Web 应用

    Azure Web 应用提供高度可缩放.自修补的 Web 托管服务. 本快速入门演示如何将第一个 ASP.NET Web 应用部署到 Azure Web 应用中. 完成后,便拥有了一个资源组,该资源组 ...

  9. C#读取MySql表字段出现System.Byte[]问题

     记录下,用了多字段拼接后在程序中查询出的结果为System.Byte[],而在数据库中查正常 解决办法为:加Convert转换编码   select CONVERT((CASE background ...

  10. 在 Azure Web 应用中创建 .NET 应用程序

    本快速入门帮助你在数分钟内将你的第一个 ASP.NET Web 应用部署到 Azure 应用服务.完成本教程后,你将能够在云中启动并运行一个简单的 Web 应用.在本教程中完成的所有操作均符合1 元试 ...