文章前言
网络通信隧道技术常用于在访问受限的网络环境中追踪数据流向和在非受信任的网络中实现安全的数据传输
网络隧道
网络通信是在两台机器之间建立TCP连接,然后进行正常的数据通信,在知道IP地址的情况下,可以直接发送报文,如果不知道IP地址就需要将域名解析为IP地址,在实际的网络中,通常会通过各种边界设备、软/硬件防火墙甚至入侵检测系统来检查对外连接的情况,如果发现异常,就会对通信进行阻断
隧道是指一种绕过端口屏蔽的通信方式,防火墙两端的数据包通过防火墙所允许的数据包类型或者端口进行封装,然后穿过防火墙与对方进行通信,当被封装的数据包到达目的地时,再将数据包还原,并将还原的数据包发送到相应的服务器上,常见的隧道列举如下:
- 网络层:IPv6隧道、ICMP隧道、GRE隧道
- 传输层:TCP隧道、UDP隧道、常规端口转发
- 应用层:SSH隧道、HTTP隧道、HTTPS隧道、DNS隧道
内网连通性
判断内网连通性是指判断机器是否能上外网,在判断时要综合判断各种协议(TCP、HTTP、DNS、ICMP等)及端口通信的情况。常见的允许流量流出的端口有80、8080、443、53、110、123等,常用的内网连通性判断方法如下:
ICMP协议
执行命令"ping <IP地址或域名>",如下图所示:
TCP协议
netcat(简称"nc")被誉为网络安全界的"瑞士军刀",是一个短小精悍的工具,通过使用TCP或UDP协议的网络连接读写数据。
使用nc工具,执行"nc <IP地址 端口号>"命令,如下所示:
HTTP协议
curl是一个利用URL规则在命令行下工作的综合文件传输工具,支持文件的上传和下载,curl名不仅支持HTTP、HTTPS、FTP等众多协议,还支持POST、Cookie、认证、从指定偏移出下载部分文件、用户代理字符串、限速、文件大小、进度条等特征,Linux操作系统自带curl命令,在Windows操作系统中,需要下载并按照curl命令。
在使用curl时,需要执行"curl <IP地址:端口号>"命令,如果远程主机开启了相应的端口会输出相应的端口信息,例如下图所示,如果远程主机没有开通相应的端口,则没有任何提示,之后可以直接按下"Ctrl C"键断开连接:
DNS协议
在进行DNS连通性检测时,常用的命令为nslookup和dig
nslookup是windows操作系统自带的DNS探测命令,其用法如下所示:
dig是Linux默认自带的DNS探测命令,其用法如下所示:
代理服务器
还有一种情况是流量不能直接流出,需要在内网中设置代理服务器,常用于通过企业办公网段上网的场景,常用的判断方法如下:
- 查看网络连接,判断是否存在与其他机器的8080(不绝对)等端口的连接(可以尝试运行"ping -n 1 -a ip "命令)
- 查看内网中是否有主机名类似于"proxy"的机器
- 查看IE浏览器的直接代理
- 根据pac文件的路径(可能是本地路径,也可能是远程路径)将其下载下来并查看
- 执行如下命令,利用curl工具进行确认
curl www.baidu.com # 不通
curl -x proxy-ip:port www.baidu.com # 通
IPv6隧道技术
IPv6隧道简介
"IPv6"是"Internet Protocol Version 6"的缩写,也被称为下一代互联网协议,它是由IETF设计用来代替现行的IPv4协议的一种新的IP协议,IPv4目使用了20多年,目前已近匮乏,而IPv6则能从根本上解决这些问题,现在,由于IPv4资源几乎耗尽,IPv6开始进入过渡阶段。
IPv6隧道技术是指通过IPv4隧道传送到IPv6数据报文的技术,为了在IPv4海洋中传递IPv6信息,可以将IPv4作为隧道载体,将IPv6报文整个封装在IPv4数据报文中,使IPv6报文能够穿过IPv4海洋,到达另外一个IPv6小岛。
打个比方来说,类似于快递公司收取包裹之后,发现自己在目的地没有站点,无法投送,则将次包裹转交给能够到达目的地的快递公司(例如:邮政)来投递,也就是说,将快递公司已经封装好的包裹(类似于IPv6报文),用邮政的包装箱再来封装一次(类似于封装成IPv4报文),以便这个包裹在邮政系统(IPv4海洋)中能够被正常传递。
IPv6隧道原理
IPv6隧道的工作过程如下所示:
- IPv6网络中的主机发送IPv6报文,该报文到达隧道的源端设备Device A
- Device A根据路由表判定该报文要通过隧道进行转发后,在IPv6报文前封装上IPv4的报文头,通过隧道的实际物理接口将报文转发出去,IPv4报文头中的源IP地址为隧道的源端地址,目的IP地址为隧道的目的端地址
- 封装报文通过隧道到达隧道目的端设备(或称隧道终点)Device B,Device B判断该封装报文的目的地是本设备后,将对报文进行解封装
- Device B根据解封装后的IPv6报文的目的地址处理该IPv6报文,如果目的地就是本设备,则将IPv6报文转给上层协议处理,否则,查找路由表转发该IPv6报文
IPv6隧道模式
IPv6隧道分为"配置隧道"和"自动隧道":
- 配置隧道:IPv6 over IPv4隧道终点的IPv4地址不能从IPv6报文的目的地址中自动获取,需要进行手工配置
- 自动隧道:IPv6报文的目的地址中嵌入了IPv4地址,可以从IPv6报文的目的地址中自动获取隧道终点的IPv4地址
根据对IPv6报文的封装方式的不同,IPv6 over IPv4隧道分为以下几种模式:
IPv6隧道使用
目前支持IPv6的隧道工具有socat、6tunnel、nt6tunnel等,这里简单的介绍一下6tunnel的使用:
项目地址:https://github.com/wojtekka/6tunnel
工具使用:
首先去Github下载工具,之后在终端执行以下命令进行编译:
代码语言:javascript复制./configure
make
之后查看6tunnel的使用说明:
代码语言:javascript复制./6tunnel -h
通过6tunnel实现端口转发:
代码语言:javascript复制语法格式:6tunnel -4 [本机端口] [转发IP x:x:x:x] [转发端口]
使用示例:6tunnel -4 8888 11.24.15.20 8888
IPv6隧道防范
针对IPv6隧道的攻击,最好的防御方法是:了解IPv6的具体漏洞,结合其他协议,通过防火墙和深度防御系统过滤IPv6通信,提高主机和应用程序的安全性