利用ssh建立網路轉發通道

regonly1發表於2009-03-20

這兩天由於遇到公司的vpn不能撥,只有一臺對外的windows伺服器。於是就想到了利用這個伺服器進行埠對映。
windows下就使用portmap這個埠對映工具就可以很方便的實現這個功能。而且容易理解。沒兩下就搞定了。然後想到了如果這臺是unix類的伺服器,那該如何實現這個埠的對映呢?
記得以前使用過haproxy這個工具來實現。採用配置檔案的方式,執行該命令,然後轉發埠即可。如果沒記錯的話當時是隻支援udp的,而不支援tcp。
以前也碰到過這個問題,也看到了ssh的這種實現方式,但是那時的技術基礎還理解不了這個概念。
ssh埠對映命令格式:
ssh -p [port] -f -N -g -L dst_port:tunnel_host:src_host  
引數:
-p: 指定連線到src_host主機的埠(ssh埠);
-f:    後臺執行該對映命令;
-N: 不執行遠端命令,在只是轉發埠時很有用(如果不指定該引數,則將會登入到遠端主機);
-g: 允許遠端主機連線本地轉發埠;
-L: 將本地埠對映到遠端主機埠;
-C: 執行資料壓縮;
-R: 將遠端主機埠對映到本級埠。

假設,有主機A和B(均為unix系統,且ssh埠都為22),想要用A來對映B的1521埠,則有(假設當前在A上):
ssh -p 22 -f -N -g -L 15210:host_A:1521  
這樣就實現了埠的轉發,即我從主機A上訪問15210埠就是訪問了B上的1521埠。也就是說主機A承擔了轉發的中間管道(第15210號管道)的作用。透過這個管道我們就直接訪問到了B。

與-L並行的還有-R和-D引數。
另外ssh在對映的之前,有個引數對是否可以開通對映做了限制:
AllowTcpForwarding  yes/no
如果是yes就可以進行埠對映,反之則不行。
該引數在/etc/ssh/sshd_config這個檔案中設定。
這個引數我在solaris 10裡面發現了,在8裡面卻連/etc/ssh這個目錄都沒有,有的系統有這個配置檔案,但是沒有這個引數。不知道是不是ssh版本引起的。


兩個參考連結:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12932950/viewspace-573247/,如需轉載,請註明出處,否則將追究法律責任。

相關文章