实验拓扑图
实验描述
假设有三台主机A、B、C。B和A、C可以连通,AC两台主机不能连通。
这时候可以用本地端口转发,来实现A和C通过B来连通。
实验中,为了构造上述环境,我们使用三台虚拟机,其网络环境设置如拓扑图所示:
(1) 主机A :eth1(172.16.10.1/24)
(2) 主机B: eth0(172.16.10.3/24) eth1(172.16.20.1/24)
(3) 主机C: eth0(172.16.20.1/24)
实验与验证
1. 确保B和A、C的连通,A、C不能连通(符合实验环境)
2. 在A、B的ssh配置文件/etc/ssh/sshd_config中开启允许转发的选项,并重启ssh服务
# vim /etc/ssh/sshd_config
GatewayPorts yes
AllowTcpForwarding yes
# service sshd restart
3. 在主机C安装httpd并启动http服务,为了更好的验证我们在主机C的站点主目录下写一个“小文件”
# yum install httpd -y
# vim /var/www/html/index.html
hello,I'm 172.16.20.2
# service httpd start
4. 在主机A上执行命令:
# ssh -l root -L 172.16.10.1::172.16.20.2: 172.16.10.3
参数-L后面总共有四个用冒号分割的值,分别是 '本地地址:本地端口:目标主机:目标主机端口'。
这条命令的意思是:
指定SSH绑定本地主机A(172.16.10.1)的59000端口,转发到目标主机C(172.16.20.2)的80端口。并指定由主机B(192.16.10.3)来转发。
执行结果:
5. (注意不要退出上一步骤的命令)在A新打开一个终端(Ctrl+Alt+F2)来验证就好,执行命令:
# curl http://172.16.10.1:59000
执行结果:
这说明:
我们连接了本地主机A的59000端口,就等于连上了主机C 172.16.20.2的80端口。
补充
1. 本实验参考了文章:http://my.oschina.net/guol/blog/115235
2. 实验过程中要注意防火墙的设置,最好 # iptables -F 清除一下防火墙规则