一條ssh命令實現埠轉發,實現跨機器直接訪問

一條ssh命令實現埠轉發,實現跨機器直接訪問

一條ssh命令實現埠轉發,實現跨機器直接訪問

#功能場景:192.168.100.12和192.168.100.11在內網可以連線,但是隻有12這臺機器有另外一個網口配置了外網可訪問的地址,外網不能直接訪問11這臺機器。

#那麼,平時的做法是外網連線12機器,然後通過12這個跳板訪問11;ssh連線的方式。
#問題來了:我客戶端要直接訪問11的資料庫或者網頁,腫麼辦?

#SSH隧道埠埠轉發幫助你,只要一條命令搞定。

#具體需求,192.168.100.11:7180是CM的管理頁面,外部無法訪問,通過12這臺機器的外網網口轉發。

#本機192.168.100.12監聽來自對本機全部網口6180埠發起連線的請求,然後把資料全部轉發到192.168.100.11的7180埠去

ssh -C -f -N -g -L 6180:192.168.100.11:7180 [email protected]
#6180:192.168.100.11:7180 意義–本機監聽埠:遠端主機:遠端埠
#[email protected] 建立隧道需要對端SSH使用者名稱和密碼

########### 網頁連線前
12:
netstat -an |grep 6180
#####
[[email protected] ~]# ssh -C -f -N -g -L 6180:192.168.100.11:7180 [email protected]
[email protected]’s password:
[[email protected] ~]# netstat -an |grep 6180
tcp        0      0 0.0.0.0:6180                0.0.0.0:*                   LISTEN
tcp        0      0 :::6180                     :::*                        LISTEN
[[email protected] ~]#
#以上會發現,12這臺機器起了6180埠,偵聽外面發起的連線請求
#那麼在其他機器發起對6180連線後,可以看到會話建立了。
###########
11:
netstat -an |grep 7180
#####
[[email protected] ~]# netstat -an |grep 7180
tcp        0      0 0.0.0.0:7180                0.0.0.0:*                   LISTEN
[[email protected] ~]#

插圖:

#(實驗環境沒有跨網段,實際情況,第三方機器訪問的不是192.168.100.11那個IP,而是其他網口IP,偵聽埠對即可)

#實際上,瀏覽器中位址列顯示是12的6180埠,但是內容實質是11那邊開啟的7180服務。

插圖:

########### 網頁連線後
12:
netstat -an |grep 6180
#####
[[email protected] opt]# netstat -an |grep 6180
tcp        0      0 0.0.0.0:6180                0.0.0.0:*                   LISTEN
tcp        0      5 192.168.100.12:6180         192.168.100.1:49330         ESTABLISHED
tcp        0      0 192.168.100.12:6180         192.168.100.1:49332         ESTABLISHED
tcp        0      0 192.168.100.12:6180         192.168.100.1:49331         ESTABLISHED
tcp        0      0 192.168.100.12:6180         192.168.100.1:49345         ESTABLISHED
tcp        0      0 192.168.100.12:6180         192.168.100.1:49334         ESTABLISHED
tcp        0      0 :::6180                     :::*                        LISTEN
[[email protected] opt]#

wireshark抓包:12上抓eth0的包
tcpdump -i eth0 host 192.168.100.11 -w /opt/6180.cap

################## 用完,直接停掉程序即可。

[[email protected] opt]# netstat -an |grep 6180
tcp        0      0 0.0.0.0:6180                0.0.0.0:*                   LISTEN
tcp        0      0 :::6180                     :::*                        LISTEN
[[email protected] opt]# netstat -tlnp |grep 6180
tcp        0      0 0.0.0.0:6180                0.0.0.0:*                   LISTEN     4642/ssh
tcp        0      0 :::6180                     :::*                        LISTEN      4642/ssh
[[email protected] opt]# ps -f 4642
UID        PID  PPID  C STIME TTY      STAT   TIME CMD
root      4642     1  0 16:05 ?        Ss     0:00 ssh -C -f -N -g -L 6180:192.168.100.11:7180 [email protected]
[[email protected] opt]# kill -9 4642
[[email protected] opt]# netstat -tlnp |grep 6180
[[email protected] opt]# netstat -tlnp |grep 6180
[[email protected] opt]#

################################

問題:有些機器SSH設定不允許埠轉發,需要設定
vi /etc/ssh/sshd_config
gatewayports yes

參考:
http://blog.csdn.net/ghosttzs/article/details/7572159
如果ssh埠轉發時候-g沒有效果解決方案

http://www.ibm.com/developerworks/cn/linux/l-cn-sshforward/
實戰 SSH 埠轉發

其他的遠端轉發,用於私網和公網建立隧道,反向訪問私網的一個手段,暫時沒有用得上。至於*翻*牆*的socket轉發,呵呵。