SSH端口转发之上网代理、正向代理、反向代理用法
文章目录
- SSH端口转发之上网代理、正向代理、反向代理用法
- 1 ssh参数说明:
- 2 一般用法:
- 3 用法范例:
- 4 示例与解释:
- 5 SSH概念详解
- **5.1. SSH端口转发的概念**
- **5.2. SSH端口转发的类型**
- **5.2.1 本地端口转发**
- **5.2.2 远程端口转发**
- **5.2.3 动态端口转发**
- **5.3. SSH端口转发的用途**
- **5.3.1 安全远程访问**
- **5.3.2 跨越网络限制**
- **5.3.3 加密流量传输**
- **5.3.4 跨越 NAT 网络**
- **5.3.5 安全代理**
- **5.4 结论**
上网代理(动态端口转发)可用于代理上网(socks)
正向代理(本地端口转发)与反向代理(远程端口转发)都是端口到端口的转发,一般用于解决网络安全、网络防火墙限制、NAT等问题。
1 ssh参数说明:
-C:启用压缩功能。SSH 会尝试使用压缩来缩小传输的数据量。这是通用选项,所有命令参数适用
---------------------------------------
# 上网代理(动态端口转发):
-D:动态端口转发,就是通过这个端口的流量通通转发到远程主机,然后通过远程主机转发出去,一般用于代理上网。
# 正向代理(本地端口转发):
-L:用于将本地主机的新建端口转发到远程主机。这意味着你可以将本地机器的一个端口映射到远程主机的一个端口。一般用于远程主机没有开放端口的情况下,通过ssh建立本地侦听端口,通过本地侦听端口转发到远程主机端口。
# 反向代理(远程端口转发):
-R:用于将远程主机的新建端口转发到本地主机。这意味着你可以将远程机器的一个端口映射到本地机器的一个端口。这个和-L达到的功能是一样的,只是建立侦听端口主机不一样,-L在本地主机建立,-R在远程主机建立,这个主要考虑ssh运行的便利性与可行性,比如是否有公网地址,是否在NAT后面,是否的密码安全担忧等。
---------------------------------------
-g:无此参数默认监听地址是127.0.0.1,添加此参数监听0.0.0.0。在有-L -R -D参数时都可以使用。
---------------------------------------
-f:后台运行
-N:表示不执行远程命令,通常与端口转发一起使用。当您只需要转发端口(如设置隧道)而不需要在远程机器上启动 Shell 时,这个选项很有用。无此选项时,你可能需要在命令后面加上需要执行的command
2 一般用法:
# 远程执行命令:
ssh 用户@远程ssh主机地址 -p 远程ssh主机ssh端口 远程命令
# 上网代理(动态端口转发):
ssh -CD 本机主机侦听端口 -g -fN 用户@远程主机ssh地址 -p 远程主机ssh端口
# 正向代理(本地端口转发):
# 注:【远程目标X主机】 与 【远程主机】 可以是同一台主机,也可以不是同一台主机
ssh -CL 本机主机侦听端口:远程目标X主机地址:远程目标X主机端口 -g -fN 用户@远程主机ssh地址 -p 远程主机ssh端口
# 反向代理(远程端口转发):
# 注:【本地目标X主机】 与 【本机主机】 可以是同一台主机,也可以不是同一台主机
ssh -CR 远程主机侦听端口:本地目标X主机地址:本地目标X主机端口 -g -fN 用户@远程主机ssh地址 -p 远程主机ssh端口
3 用法范例:
# 登录:
ssh root@8.8.8.227
---------------------------------------
# 执行远程命令,运行完立即退出
ssh root@8.8.8.227 uptime
# 执行远程命令,运行完不退出
ssh -f root@8.8.8.227 uptime #-- 一般运行守护进程,这里的uptime程序是无意义的,你可以换成类似nginx守护进程
---------------------------------------
# 上网代理(动态端口转发),在127.0.0.1监听2233,前台运行(exit退出就关闭)
ssh -D 2233 root@8.8.8.227
# 上网代理(动态端口转发),在0.0.0.0监听2233
ssh -D 2233 -g root@8.8.8.227
# 上网代理(动态端口转发),在0.0.0.0监听2233,后台运行
ssh -D 2233 -g -fN root@8.8.8.227
# 上网代理(动态端口转发),在0.0.0.0监听2233,后台运行,启用压缩
ssh -CD 2233 -g -fN root@8.8.8.227
# 将代理服务器设置为:'socks5://127.0.0.1:2233'或'socks5://本机地址:2233',即可实现代理上网。
# 经测试,这里即可以使用socks4也可以使用socks5
---------------------------------------
# 正向代理(本地端口转发),在0.0.0.0监听2233,后台运行,启用压缩
ssh -CL 2233:47.1.1.132:80 -g -fN root@8.8.8.227
# 在本地主机访问以下地址,会返回相同的结果:
# curl http://47.1.1.132:80
# curl http://127.0.0.1:80
# curl http://本地主机:80
# 反向代理(远程端口转发),在0.0.0.0监听2233,后台运行,启用压缩
ssh -CR 2233:47.1.1.132:80 -g -fN root@8.8.8.227
# 在远程主机访问以下地址,会返回相同的结果:
# curl http://47.1.1.132:80
# curl http://127.0.0.1:80
# curl http://远程主机:80
4 示例与解释:
ssh -L 6006:127.0.0.1:6006 -gCN root@connect.bjc1.com -p 34748
解释:
-L 6006:127.0.0.1:6006:这是本地端口转发的选项。它指定了一个本地端口转发规则,具体分为以下几部分:
6006:本地机器上的端口号(您可以在本地机器上连接这个端口)。
127.0.0.1:远程机器上的目标地址,这里是远程机器的回环地址。
6006:远程机器上的目标端口号,您希望远程机器上的连接被转发到此端口。
这意味着所有连接到您本地机器上的 6006 端口的数据都会被转发到远程机器上的 127.0.0.1 地址的 6006 端口。
5 SSH概念详解
以下转自:https://cloud.tencent.com/developer/article/2324459
SSH(Secure Shell)是一种加密的网络协议,用于安全地远程登录和执行命令。除了远程登录外,SSH还具备其他功能,其中一个重要的功能就是端口转发。SSH端口转发是一种将网络流量从一个端口转发到另一个端口的机制,通过SSH通道进行安全传输。在本文中,我们将详细介绍SSH端口转发的概念、类型和用途。
5.1. SSH端口转发的概念
SSH端口转发是一种通过SSH协议在本地和远程主机之间建立安全通道,实现端口之间的数据转发。它允许您在不直接访问目标主机的情况下,通过安全的SSH连接来访问该主机上的服务。通过SSH端口转发,您可以将本地端口与远程主机上的服务端口相关联,使得在本地主机上运行的应用程序能够通过SSH隧道与远程主机上的服务进行通信。
5.2. SSH端口转发的类型
SSH端口转发有三种常见的类型:本地端口转发(Local Port Forwarding)、远程端口转发(Remote Port Forwarding)和动态端口转发(Dynamic Port Forwarding)。
5.2.1 本地端口转发
本地端口转发是最常用的SSH端口转发类型之一。它允许将本地主机上的一个端口转发到远程主机上的另一个端口。当您需要通过SSH访问位于防火墙后面或者只能在远程主机上访问的服务时,本地端口转发非常有用。通过本地端口转发,您可以在本地主机上创建一个监听指定端口的SSH隧道,将该端口上的流量转发到远程主机上的指定端口。这样,您就可以通过本地主机上的该端口与远程主机上的服务进行通信。
5.2.2 远程端口转发
远程端口转发是另一种常见的SSH端口转发类型。它允许将远程主机上的一个端口转发到本地主机上的另一个端口。当您需要将远程主机上的某个服务映射到本地主机上,或者需要远程主机上的其他计算机访问本地主机上的服务时,远程端口转发非常有用。通过远程端口转发,您可以在远程主机上创建一个监听指定端口的SSH隧道,将该端口上的流量转发到本地主机上的指定端口。这样,远程主机上的流量就可以通过SSH隧道传输到本地主机上的指定端口,实现服务的访问。
5.2.3 动态端口转发
动态端口转发是SSH端口转发的另一种类型,也称为SSH动态代理。与本地端口转发和远程端口转发只能将一个端口进行转发不同,动态端口转发可以创建一个动态代理通道,将本地主机上的多个端口转发到远程主机上。通过动态端口转发,您可以在本地主机上创建一个监听指定端口的SSH隧道,将本地主机上的流量通过SSH通道转发到远程主机上,然后再由远程主机发送到最终的目标地址。动态端口转发通常用于代理服务器或通过中间节点访问特定网络资源。
5.3. SSH端口转发的用途
SSH端口转发具有广泛的用途,以下是其中一些常见的应用场景:
5.3.1 安全远程访问
通过SSH端口转发,您可以安全地访问位于防火墙后面的远程主机或仅在内部网络中可访问的服务。通过建立SSH隧道,您可以将本地主机上的某个端口转发到远程主机上,然后通过SSH连接进行访问。这样,您就可以使用SSH协议的加密和身份验证功能来保护远程访问的安全性。
5.3.2 跨越网络限制
在某些情况下,您可能面临着网络限制,无法直接访问某些服务或资源。使用SSH端口转发,您可以绕过这些限制,通过建立安全的SSH通道将流量转发到允许访问的网络上。这对于跨越防火墙或访问受限制的网络资源非常有用。
5.3.3 加密流量传输
SSH端口转发不仅仅用于访问远程服务,还可以用于加密流量传输。通过将本地主机上的流量通过SSH隧道转发到远程主机上,然后再由远程主机发送到最终的目标地址,您可以确保数据在传输过程中受到SSH协议的加密保护。这对于传输敏感数据或在不受信任的网络上操作非常重要。
5.3.4 跨越 NAT 网络
NAT(Network Address Translation)是一种常见的网络配置,用于在私有网络和公共网络之间转换IP地址。当您需要在私有网络中访问公共网络上的服务时,NAT可能会导致问题。通过使用SSH端口转发,您可以将本地主机上的流量通过SSH隧道转发到公共网络上的服务。这样,您可以绕过NAT限制,实现私有网络与公共网络之间的通信。
5.3.5 安全代理
动态端口转发可以用作安全代理,通过建立动态代理通道将本地主机上的流量转发到远程主机上。这对于通过中间节点访问受限制的网络资源非常有用。通过SSH端口转发,您可以在本地主机上配置代理设置,使得所有的网络流量都通过SSH隧道转发到远程主机上,然后再由远程主机发送到最终的目标地址。
5.4 结论
SSH端口转发是一种强大而灵活的功能,通过安全的SSH连接,可以将流量从一个端口转发到另一个端口。本文详细介绍了SSH端口转发的概念、类型和用途。本地端口转发、远程端口转发和动态端口转发是SSH端口转发的三种常见类型,它们分别适用于不同的应用场景。通过SSH端口转发,您可以实现安全远程访问、跨越网络限制、加密流量传输、跨越NAT网络和安全代理等功能。
要使用SSH端口转发,您需要在本地主机和远程主机之间建立一个安全的SSH连接,并配置相应的端口转发规则。使用适当的命令和参数,您可以轻松地设置和管理SSH端口转发。
总而言之,SSH端口转发是网络安全和远程访问中重要的工具,它为用户提供了安全、灵活和可靠的数据传输和访问方式。通过合理的使用和配置,SSH端口转发可以帮助用户克服网络限制,保护数据安全,并提供高效的远程访问体验。