隧道实验学习笔记
隧道实验
免责声明
本文档仅供学习和研究使用,请勿使用文中的技术源码用于非法用途,任何人造成的任何负面影响,与本人无关.
应用层
利用 WEB 应用的隧道
SSH
相关文章
语法参考
ssh -L 8080:127.0.0.1:80 root@192.168.1.7 # 本地转发
ssh -R 8080:127.0.0.1:80 root@192.168.1.7 # 远程转发
ssh -D 1080 root@sshserver # 动态端口转发
参数含义
-C 压缩传输,增加传输的效率
-f 将 SSH 传输放在后台执行
-N 建立静默连接,就是建立了连接
-g 允许远程主机连接本地用于转发端口
-L 本地端口转发
-R 远程端口转发
-D 动态转发
-P 指定 SSH 的端口
本地端口转发
测试实验
将发送给本地的请求通过 ssh 隧道转发给目标端口,我们可以实现访问本地端口来访问目标端口的信息
ssh -CfNg 用户名@ssh机器IP -L 本地端口:目标主机:目标主机端口
ssh -fN root@192.168.141.129 -L 8080:127.0.0.1:22
此时访问转发机器的 8080 口,从而转发到目标机器的 22 端口
如下这个场景,我现在 host3 上起转发
ssh -fN root@192.168.81.128 -L 8080:0.0.0.0:22
这个时候 host3 访问自己的 127.0.0.1:8080 可以到 192.168.81.128
但是 host1 访问 192.168.141.129:8080 是不行的
需要 host2 监听 0.0.0.0
ssh -fN root@192.168.81.128 -L 0.0.0.0:8080:0.0.0.0:22
这样 host1 访问 192.168.141.129:8080 就可以到 192.168.81.128:22
远程端口转发
测试实验
将远程主机端口的请求通过 ssh 隧道转发给本地主机的端口
ssh -CfNg user@ssh机器IP -R <远程ip>:<远程端口>:<目标ip>:<目标端口>
在 B 上
ssh -CfNg root@1.1.1.1 -R 0.0.0.0:8080:0.0.0.0:22
现在 A 访问 127.0.0.1:8080 就可以访问到 192.168.141.148:22 了
不过其他主机访问 A 的 8080 都是访问不了的,这种情况下 ssh 不支持 0.0.0.0 监听
动态端口转发
测试实验
本地和远程转发只能一对一端口转发,想访问别的端口还需要重新设定转发,所以有了动态转发
动态端口转发是只绑定一个本地端口,目标地址端口不固定,而是根据我们的请求决定。其实在这里 SSH 就是创建了个 SOCKS 代理服务
ssh -CfNg 用户名@ssh机器IP -D <本地ip>:<本地端口>
在 host1 上
ssh -CfNg root@1.1.1.1 -D 127.0.0.1:1080
这时候 host1 主机的 1080 就是个 socks 代理,浏览器设置代理或设置全局代理后,就可以访问 host3、host4 内网主机了。
网络层
ICMP
相关文章
icmptunnel
项目地址
测试实验
拓扑环境如下:
我这里就假设 vps 为 1.1.1.1 了
先配置环境,vps和内网机器上都安装上 icmptunnel,步骤是一样的
git clone https://github.com/DhavalKapil/icmptunnel.git
cd icmptunnel && make
然后在2台机器上都禁用 icmp
sysctl -w net.ipv4.icmp_echo_ignore_all=1
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
vps 作为主机,监听
./icmptunnel -s
ctrl-z
bg
这时候会创建一个 tun0 ,给他分配一个内网地址
ifconfig tun0 10.10.1.1 netmask 255.255.255.0
然后再内网机器上启动
./icmptunnel 1.1.1.1
ctrl-z
bg
同样的 tun0 ,给他分配一个内网地址
ifconfig tun0 10.10.1.2 netmask 255.255.255.0
这个时候可以在 vps 上测试
ssh root@10.10.1.2
速度会有点慢,如果没有出错就可以连接了
点击关注,共同学习!
安全狗的自我修养