實驗拓撲圖
實驗描述
假設有三臺主機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:59000:172.16.20.2:80 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 清除一下防火牆規則