问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

一文讲透所有网络穿透(篇一)

创作时间:
作者:
@小白创作中心

一文讲透所有网络穿透(篇一)

引用
1
来源
1.
https://xz.aliyun.com/news/13932

网络穿透技术是现代网络通信中不可或缺的一部分,它解决了IPv4地址枯竭带来的诸多问题,使得私有网络能够与公网进行有效通信。本文将从基础理论出发,深入探讨网络穿透的相关概念和技术,包括端口转发、端口映射、网络代理、网络隧道、VPN、异地组网等。

为什么要网络穿透

网络穿透技术在多个领域都有重要应用,包括:

  • 渗透测试
  • 异地组网
  • 远程办公和访问
  • 开发和测试环境
  • 物联网(IoT)设备管理

这些应用都需要解决一个核心问题:如何在NAT(网络地址转换)环境下实现内外网的通信。

NAT技术与网络穿透

IPv4地址的枯竭促使NAT技术的出现。NAT允许一个组织或ISP将一个公共IP地址映射到内部网络中的多个私有IP地址,从而节省公网IP资源。然而,这也带来了新的挑战:

  • P2P(点对点)通信受阻
  • 内网设备无法直接接收来自公网的主动连接

为了解决这些问题,出现了多种NAT穿越技术:

  • 打洞技术(如WebRTC、STUN)
  • 反向链接技术
  • 应用层网关(ALG)技术
  • 中间件技术

其中,STUN(Session Traversal Utilities for NAT)是一种常用的解决方案。它允许网络设备找出通信端点经NAT设备后的IP地址和端口,并利用这些信息在通信双方之间建立一条可以穿越NAT设备的数据通道,实现P2P通信。

NAT类型

在STUN标准中,根据私网IP地址和端口到NAT出口的公网IP地址和端口的映射方式,将NAT分为四种类型:

  1. 全锥形NAT(Full Cone NAT)
  • 任何外部主机只要知道NAT的公共IP地址和端口,都可以通过这个地址和端口向内网主机发送数据。
  • 支持程度:最高
  • 穿透效果:非常容易
  1. 受限锥形NAT(Restricted Cone NAT)
  • 只有先前从内网主机发送数据的外部主机可以通过NAT的公共IP地址和端口向内网主机发送数据。
  • 支持程度:较高
  • 穿透效果:相对容易
  1. 端口受限锥形NAT(Port Restricted Cone NAT)
  • 只有先前从内网主机发送数据的外部主机的特定端口可以通过NAT的公共IP地址和端口向内网主机发送数据。
  • 支持程度:中等
  • 穿透效果:较难
  1. 对称NAT(Symmetric NAT)
  • 对于每一个外部主机和端口的请求,NAT分配不同的映射公共端口。
  • 支持程度:低
  • 穿透效果:非常困难

端口转发技术详解

端口转发是网络穿透中最常用的技术之一,它允许将流量从一个IP地址和端口转发到另一个IP地址和端口。以下是几种常见的端口转发工具:

  • SSH
  • netsh(Windows)
  • iptables
  • nc
  • lcx(已过时,易被杀毒软件当成病毒)

SSH端口转发

SSH(Secure Shell)不仅是一种常用的远程登录工具,还提供强大的端口转发功能。SSH端口转发能够将网络流量通过加密的SSH隧道进行重定向,从而提高网络通信的安全性和灵活性。

SSH端口转发的类型

SSH端口转发主要分为三种类型:

  1. 本地端口转发(Local Port Forwarding, LPF)
  • 将本地机器上的一个端口绑定到SSH服务器上的一个远程端口。

  • 其作用是将本地的请求通过SSH隧道转发到远程主机上的指定端口。

  • 类似于网络代理中的正向代理。

    工作原理:

  • 用户在本地机器上指定一个端口(如本地端口1234)。

  • 当本地端口123接收到流量时,这些流量将通过SSH隧道转发到SSH服务器。

  • SSH服务器将流量转发到指定的远程主机和端口(如远程端口456)。

    配置方法:

    ssh -L [本地端口]:[目标主机]:[目标端口] [SSH用户]@[SSH服务器]
    

    例如,将本地的123端口转发到远程服务器(remote.example.com)的456端口:

    ssh -NfC -L 123:localhost:456 user@example.com
    
  • -N:表示不执行远程命令。此选项通常用于仅进行端口转发时,连接建立后不打开远程shell。

  • -f:将SSH进程放入后台。在端口转发时,这个选项使得SSH在要求输入密码或进行认证后立即转入后台运行。

  • -C:启用压缩。在数据传输过程中使用压缩,以减少传输的数据量。对慢速连接可能有帮助。

    图源:https://unix.stackexchange.com/questions/46235/how-does-reverse-ssh-tunneling-work

    网上的这张图对SSH的讲解非常详细。这张图展示了SSH本地端口转发的两种情况,分别是将流量通过SSH隧道转发到远程主机的不同目标地址和端口。下面是详细讲解。

    上图:转发到远程主机的localhost

    ssh -L 123:localhost:456 remotehost
    
  • -L:本地转发

  • 123(绿色):在本地主机上监听的端口号。

  • localhost(橙色):SSH连接的远程主机的localhost(即远程主机本身)。

  • 456(紫色):在远程主机上转发的目标端口号。

  • remotehost(棕色):远程主机的地址或名称。

    在本地主机(your host)上监听端口123。
    当本地端口123接收到流量时,这些流量将通过SSH隧道转发到remotehost。
    在remotehost上,这些流量会被转发到其本地主机(localhost)的端口456。

    下图:转发到远程主机以外的其他主机

    ssh -L 123:farawayhost:456 remotehost
    
  • 123(绿色):在本地主机上监听的端口号。

  • farawayhost(橙色):远程主机可以访问的另一台主机。

  • 456(紫色):在另一台主机上的目标端口号。

  • remotehost(棕色):远程主机的地址或名称。

    在本地主机(your host)上监听端口123。
    当本地端口123接收到流量时(比如连接123端口),这些流量将通过SSH隧道转发到remotehost。
    在remotehost上,这些流量会被转发到另一台主机(farawayhost)的端口456。

    不管本地转发还是远程转发,命令都是在your host上执行。

    适用场景:在渗透测试中,如果拿下一台跳板机,跳板机可以访问内网,就可以构建本地到内网的访问。

  1. 远程端口转发(Remote Port Forwarding, RPF)
  • 将远程主机上的一个端口绑定到SSH服务器上的一个本地端口。

  • 其作用是将远程主机的请求通过SSH隧道转发到本地主机上的指定端口。

  • 类似于网络代理中的反向代理。

    这张图展示了SSH反向端口转发的两种情况,分别是将流量通过SSH隧道转发到本地主机的不同目标地址和端口。下面是详细讲解。

    上图:转发到本地主机的localhost

    ssh -R 123:localhost:456 remotehost
    
  • -R:远程转发

  • 123(绿色):在远程主机上监听的端口号。

  • localhost(橙色):SSH连接的本地主机的localhost(即本地主机本身)。

  • 456(紫色):在本地主机上转发的目标端口号。

  • remotehost(棕色):远程主机的地址或名称。

    在远程主机(remotehost)上监听端口123。
    当远程端口123接收到流量时,这些流量将通过SSH隧道转发到本地主机(your host)。
    在本地主机上,这些流量会被转发到其本地localhost的端口456。

    通过SSH隧道访问本地主机上的服务,该服务运行在本地主机的端口456(例如,本地开发环境中的Web服务器)。

    下图:转发到本地网络中的另一台主机

    ssh -R 123:nearhost:456 remotehost
    
  • -R:远程转发

  • 123(绿色):在远程主机上监听的端口号。

  • nearhost(橙色):本地网络中的另一台主机。

  • 456(紫色):在另一台本地主机上的目标端口号。

  • remotehost(棕色):远程主机的地址或名称。

    在远程主机(remotehost)上监听端口123。
    当远程端口123接收到流量时,这些流量将通过SSH隧道转发到本地网络中的另一台主机(nearhost)。
    在nearhost上,这些流量会被转发到其端口456。

    通过SSH隧道访问本地网络中其他主机上的服务,该服务运行在nearhost的端口456(例如,本地网络中的数据库服务器)。

    适用场景:在渗透测试中,如果拿下一台跳板机,跳板机可以访问内网,就可以构建本地到内网的访问。这都是单端口的访问,没有代理网络的全端口访问方便。说到全端口访问就得是动态端口转发了。

  1. 动态端口转发(Dynamic Port Forwarding, DPF)
  • SSH动态端口转发是一种通过SSH隧道实现SOCKS代理功能的技术。

  • 它允许客户端将所有流量动态地转发到远程主机,并且可以用来访问多个远程网络服务,而不需要为每个服务单独设置端口转发。

    动态端口转发与本地端口转发和远程端口转发不同,它不需要指定特定的目标地址和端口,而是通过一个本地监听端口创建一个SOCKS代理。任何连接到这个SOCKS代理的流量都可以通过SSH隧道动态地转发到不同的远程地址和端口。

    使用场景:

  • 绕过防火墙:可以用来访问被防火墙或公司网络限制的资源。

  • 匿名浏览:通过SSH隧道加密流量,可以提高隐私和安全性。

  • 访问受限网络:通过远程服务器访问特定区域限制的服务。

    ssh -D [本地端口] [用户@远程主机]
    ssh -D 8080 user@remotehost
    
  • -D [本地端口]:指定本地端口,SSH会在该端口上创建一个SOCKS代理。

  • [用户@远程主机]:SSH连接的远程主机及用户名。

    建立SSH连接:在本地机器上运行上述命令后,SSH会与远程主机建立加密连接。
    创建SOCKS代理:SSH在本地指定端口(例如8080)上创建一个SOCKS代理。
    代理流量:本地应用程序(如浏览器)将流量发送到SOCKS代理。代理会将流量通过SSH隧道转发到远程主机,然后根据请求动态地访问不同的目标服务器和端口。

    通过创建SOCKS代理,可以灵活、安全地访问远程网络资源。无论是为了绕过网络限制,还是提高网络通信的安全性,SSH动态端口转发都提供了便捷的解决方案。

SSH确实功能强大,不仅能实现端口转发,还能实现代理的功能。

netsh端口转发

netsh是Windows系统自带的一个命令行工具,可以用来配置网络设置,包括端口转发。虽然文章中提到"算了,不介绍工具了,又成安全工具了",但netsh端口转发是一个实用的功能,值得简单介绍。

PortProxyGUI是netsh的图形化工具,使用起来更加直观。它允许用户通过图形界面进行端口转发的配置,而无需编写复杂的命令行。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号