路由器端口转发规则
本篇文章给大家谈谈路由器端口转发ssh,以及路由器端口转发规则对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
1、SSH隧道技术----端口转发
2、SSH远程操作与端口转发的原理
3、路由器的转发的转发原理
4、SSH进行端口转发
5、ssh的代理和端口转发机制介绍
6、利用ssh转发功能做端口映射,实现内网穿透
SSH隧道技术----端口转发
首先看下面的例子,我们所面临的大部分情况都和它类似。
我们建立ssh隧道的时候,往往是想通过一台公网的主机或者是大家都可以访问的主机做跳转机,来访问内部或者外部不能直接访问的机器。所以一般像这种情况下,请将跳转机中的ssh服务器中的GatewayPorts设为yes
关于sshd_config配置详解,这里不会过多涉及,有兴趣的同学可以自行查找材料,这里主要说下GatewayPorts
GatewayPorts
修改完成之后,重启sshd服务
在建立本地SSH隧道之前要清楚下面几个参数:
在清楚了上面的参数后,我们使用下面的命令来建立一个远程SSH隧道,在192.168.199.16的主机上执行下面的命令:
这里我们用到了SSH客户端的三个参数,下面我们一一做出解释:
那么本地局域网的任何机器访问192.168.199.16:3333都会自动被映射到139.199.0.37:22。
与本地SSH一样,我们在建立远程SSH隧道之前要清楚下面几个参数:
在清楚了上面的参数后,我们使用下面的命令来建立一个远程SSH隧道,在192.168.199.16的主机上执行下面的命令:
现在,在IP是139.199.0.37的机器上,我们用下面的命令就可以登陆公司的IP是192.168.199.16的机器了。
隧道可能因为某些原因断开,例如:机器重启,长时间没有数据通信而被路由器切断等等。因此我们可以用程序控制隧道的重新连接,可以使用一个简单的循环控制隧道重新连接。
有些路由器会把长时间没有通信的连接断开。SSH客户端的TCPKeepAlive选项可以避免这个问题的发生,默认情况下它是被开启的。如果它被关闭了,可以在ssh的命令上加上-o TCPKeepAlive=yes来开启。
另一种方法是,去掉-N参数,加入一个定期能产生输出的命令。例如: vmstat,下面给出一个这种方法的例子:
使用上面的方法,映射的端口只能绑定在127.0.0.1这个接口上。也就是说,只能被本机自己访问到。如何才能让其他机器访问这个端口呢?我们可以把这个 映射的端口绑定在0.0.0.0的接口上,方法是加上参数-b 0.0.0.0。同时还需要打开SSH服务器端的一个选项-GatewayPorts。默认情况下它应当是被打开的。如果被关闭的话,可以在/etc /sshd_config中修改GatewayPorts no为GatewayPorts yes来打开它。
SSH远程操作与端口转发的原理
SSH不仅可以用于远程主机登录,还可以直接在远程主机上执行操作。
上一节的操作,就是一个例子:
单引号中间的部分,表示在远程主机上执行的操作;后面的输入重定向,表示数据通过SSH传向远程主机。
这就是说,SSH可以在用户和远程主机之间,建立命令和数据的传输通道,因此很多事情都可以通过SSH来完成。
下面看几个例子。
【例1】
将 HOME/src/目录。
【例2】
将远程主机$HOME/src/目录下面的所有文件,复制到用户的当前目录。
【例3】
查看远程主机是否运行进程httpd。
既然SSH可以传送数据,那么我们可以让那些不加密的网络连接,全部改走SSH连接,从而提高安全性。
假定我们要让8080端口的数据,都通过SSH传向远程主机,命令就这样写:
SSH会建立一个socket,去监听本地的8080端口。一旦有数据传向那个端口,就自动把它转移到SSH连接上面,发往远程主机。可以想象,如果8080端口原来是一个不加密端口,现在将变成一个加密端口。
有时,绑定本地端口还不够,还必须指定数据传送的目标主机,从而形成点对点的"端口转发"。为了区别后文的"远程端口转发",我们把这种情况称为"本地端口转发"(Local forwarding)。
假定host1是本地主机,host2是远程主机。由于种种原因,这两台主机之间无法连通。但是,另外还有一台host3,可以同时连通前面两台主机。因此,很自然的想法就是,通过host3,将host1连上host2。
我们在host1执行下面的命令:
命令中的L参数一共接受三个值,分别是"本地端口:目标主机:目标主机端口",它们之间用冒号分隔。这条命令的意思,就是指定SSH绑定本地端口2121,然后指定host3将所有的数据,转发到目标主机host2的21端口(假定host2运行FTP,默认端口为21)。
这样一来,我们只要连接host1的2121端口,就等于连上了host2的21端口。
"本地端口转发"使得host1和host3之间仿佛形成一个数据传输的秘密隧道,因此又被称为"SSH隧道"。
下面是一个比较有趣的例子。
它表示将本机的5900端口绑定host3的5900端口(这里的localhost指的是host3,因为目标主机是相对host3而言的)。
另一个例子是通过host3的端口转发,ssh登录host2。
这时,只要ssh登录本机的9001端口,就相当于登录host2了。
上面的-p参数表示指定登录端口。
既然"本地端口转发"是指绑定本地端口的转发,那么"远程端口转发"(remote forwarding)当然是指绑定远程端口的转发。还是接着看上面那个例子,host1与host2之间无法连通,必须借助host3转发。但是,特殊情况出现了,host3是一台内网机器,它可以连接外网的host1,但是反过来就不行,外网的host1连不上内网的host3。这时,"本地端口转发"就不能用了,怎么办?
解决办法是,既然host3可以连host1,那么就从host3上建立与host1的SSH连接,然后在host1上使用这条连接就可以了。
我们在host3执行下面的命令:
R参数也是接受三个值,分别是"远程主机端口:目标主机:目标主机端口"。这条命令的意思,就是让host1监听它自己的2121端口,然后将所有数据经由host3,转发到host2的21端口。由于对于host3来说,host1是远程主机,所以这种情况就被称为"远程端口绑定"。
绑定之后,我们在host1就可以连接host2了:
这里必须指出,"远程端口转发"的前提条件是,host1和host3两台主机都有sshD和ssh客户端。
SSH还有一些别的参数,也值得介绍。
N参数,表示只连接远程主机,不打开远程shell;T参数,表示不为这个连接分配TTY。这个两个参数可以放在一起用,代表这个SSH连接只用来传数据,不执行远程操作。
f参数,表示SSH连接成功后,转入后台运行。这样一来,你就可以在不中断SSH连接的情况下,在本地shell中执行其他操作。
要关闭这个后台连接,就只有用kill命令去杀掉进程。
路由器的转发的转发原理
转发发生在路由器上,分组到达路由器后,由路由器检查分组地址并将它转发到一个邻接的局域网(LAN)上。过滤功能过滤某些分组使它们不再通过路由器或桥接器转发出去。
路由器首先路由表中查找,判明是否知道如何将分组发送到下一个站点(路由器或主机),如果路由器不知道如何发送分组,通常将该分组丢弃;否则就根据路由表的相应表项将分组发送到下一个站点,如果目的网络直接与路由器连,路由器就把分组直接送到相应的端口上。
扩展资料
因为某些原因,用户只能经过一个非安全的主机才能连接到一个安全的主机,在这种情况下,ssh提供了一个名为端口转发的功能。利用“端口转发”功能,用户就能够加强连接路由上非安全路段的安全性。用户需要做的只是简单地在非安全主机上指定一个端口,非安全主机将通过这个端口与安全主机建立连接。
这就在本地主机和远程主机之间以那个非安全主机为跳板建立了一个直接的连接。用户可以对远程主机或者自己的本地主机上的端口设置端口转发功能。
如果把远程主机的一个端口转发到本地主机上的某个端口,需要使用ssh命令的-R选项,后面分别跟着本地端口、远程主机地址以及将要被转发的远程端口,彼此之间用冒号隔开。它的工作原理是分配一个套接字来监听远程方面的那个端口。
只要有连接建立在这个端口上,该连接就会被转发到一个安全的通道上,也就建立起一个从本地机器到远程端口的连接。
参考资料来源:百度百科-端口转发
参考资料来源:百度百科-转发
参考资料来源:百度百科-路由转发协议
SSH进行端口转发
大前提,windows可以使用freesshd做ssh服务器当一级代理,但是它的端口转发功能有bug,所以还是用linux的ssh吧。
ps:Earthworm虽然简单好用,但是传输的流量是不加密的,已经碰到过好几次反弹回来仍然被安全设备拦截的情况,所以还是老老实实用ssh代理了
安装sshpass,需要gcc编译安装。
ssh会话会在空闲一段时间后自动僵死,但是要注意 进程 和 连接 仍在。虽然客户端也可以设置心跳检测,但在服务端设置更方便。
修改/etc/ssh/sshd_config
p参数表示ssh的端口
ssh命令
ssh -fCN -L 127.0.0.1:1234:192.168.99.125:3389 root@192.168.99.199 -p 53
plink.exe命令
plink.exe -v -C -N -L 127.0.0.1:8888:127.0.0.1:3389 test@117.28.112.73 -P 9398 -pw password
直接访问 本机 开启监听的1234端口,其实等于通过 远程主机 192.168.99.199来访问 远程主机 192.168.99.125上的3389端口
-n 将 stdio 重定向到 /dev/null,与 -f 配合使用
-T 不分配 TTY 只做代理用
-q 安静模式,不输出 错误/警告 信息
-f 后台连接
-N 连接后不取得shell
-C 启动压缩,加快速度
(如不理解参数可以去掉他们看效果)
-L 1234为建立隧道后本地监听的端口,192.168.99.125是隧道出口转发到的目标地址(即xp靶机),3389是目标端口,root@192.168.99.199是建立隧道的另一方,即rolling版登录的账号和ip,-p 53是rolling版的监听端口。
ssh -fCN -R 0.0.0.0:9999:192.168.1.1:80 root@test.com
0.0.0.0表示vps上监听所有地址。
直接访问 远程主机 上开启监听的9999端口就相当于通过 本机 来访问192.168.1.1上的80端口。
其中有个 大坑 。
bind_address 参数默认值为空,等价于
并不意味着任何机器,都可以通过 VPS 来访问 内网 机器。建立连接后,只能在 VPS ( sshd server ) 本地 访问 「内网」 机器。要在办公网的笔记本上通过 VPS 映射的端口来访问 内网 机器,需要修改vps上的/etc/ssh/sshd_config文件,启用 VPS sshd 的 GatewayPorts 参数,set to yes or clientspecified ,允许任意请求地址,通过转发的端口访问内网机器。
-D socks代理,不多解释了。
-g 监听所有地址,允许其他主机连接。
ssh的代理和端口转发机制介绍
本文介绍通过ssh建立隧道的三种方式。
ssh的隧道均通过端口转发来实现,包括三种模式:
MobaXterm作为一个良心的终端工具,在其MobaSSHTunnel菜单项可以帮助我们基于图形化的方式建立上述三种隧道,其提供的向导也能帮助我们更有效的理解和记住上面这3个参数。因此本文借用这些向导中的截图来进行说明。
实现功能:把ssh服务器能够访问的ip和端口映射到客户端的指定端口,这样在客户端网络内访问客户端的指定端口就能访问到ssh服务器所在网络中的服务。经常使用的场景是客户端自身通过localhost:指定端口去访问。
参数说明:
实现功能:把ssh客户端能访问到的ip和端口映射到ssh服务器的指定端口,这样在服务器端的网络内访问服务器的指定端口就能访问到ssh客户端算在网络中的服务。
参数说明:
动态端口转发实际上是本地端口转发的升级版,除了建立本地端口转发之外,这种模式还在ssh的通信两端启动了socks5代理服务,并且通过本地端口转发机制把两个socks5代理连接在一起,因此当访问本地的socks5服务时实际上也是在访问远程的socks5服务。这样当指定客户端作为socks5代理之后,实际上相当于把客户端放入服务器端所在网络中,能够访问网络中的任意一个服务,而无需为每个服务(ip:端口)都配一次本地端口转发规则。
参数说明:
利用ssh转发功能做端口映射,实现内网穿透
1台内网机N可以上网,但是没有公网ip,用户userN,需要ssh的服务端和客户端,以及autossh软件;
1台操作机C需要通过互联网以ssh的形式主动连接内网机N,需要ssh的客户端;
1台具有公网ip的服务器S做中转,服务器S的ip为s.s.s.s,用户userS,ssh的端口为portS,需要ssh的服务端;
可以使用默认值
意思是服务器S上的12345端口映射到内网机N的22端口,这种方法会出现断线无法连接的情况
利用autossh,断线后会自动连接,更加可靠
autossh比ssh多了一个M参数。
更合适的方法是采用后文的自启动脚本。
编辑sshd_config文件
启用两个配置项,并设置为yes
至此操作机C可以使用ssh客户端连接到服务器S的12345端口,实际上这个数据流会转发到内网机的22端口上,从而实现了内网穿透的功能。
创建自启动文件 /etc/systemd/system/autossh.service
内容如下
启用开机自启动
立即启动
关于路由器端口转发ssh和路由器端口转发规则的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。