1. 程式人生 > >外網訪問內網的解決方案--反向SSH

外網訪問內網的解決方案--反向SSH

問題:

    當你在不在公司或者不在學校的時候,如果想要用secureCRT訪問內網的伺服器,但是內網IP對外網是不可見的,這時怎麼辦?又或者內網的網站只對有內網的IP可以訪問,但是你連線的是外網,想要訪問內網的網站,怎麼辦呢?最重要的是現在的教育網支援IPv6,改下hosts檔案就可以直接訪問Google、YouTube這些網站了,但是如果你在外不是連線的教育網,但是想通過學校的伺服器作代理訪問Google,但是學校伺服器的IP對外不可見,怎麼使用代理呢?

原理:

  之所以很多轉發的方法無法應用在這裡,就是因為內網主機對外網其實是不可見的,也就是說外部主機不能用一般的方法訪問到內部主機。那麼我們就想了,能不能用內網主機找外網主機,找到之後再把這條內網主機登陸外網的通道轉換成外網主機登陸內網的通道呢?幸運的是,這個方法的確是可行的,這也就是所謂反向ssh最通俗的理解,這就像寄信一樣,”雖然我不知道你的地址,但是你知道我的地址,那麼你就先給我寫封信,告訴我你的地址,然後我不就可以回信給你了麼?“。

操作步驟:

     由於我們自己使用的電腦未必有外網IP,因此我們需要一個有固定外網IP的伺服器(隨便搞個騰訊雲、阿里雲的小機子就行),然後用這臺伺服器與內網的機子進行通訊,如果要用shell登入內網伺服器,我們到時候要先登陸自己的伺服器,然後再利用這個伺服器去訪問內網的主機。
(1)準備好有固定IP的公網伺服器A,以及待訪問的內網機器B。兩者都開著sshd服務,埠號預設都是22。順便做好ssh免密碼登陸。

(2)在內網主機B執行以下命令:

        $ ssh -NfR 1111:localhost:22 [email protected] -p 22

    這條命令的意思是在後臺執行(-f),不實際連線而是做port forwarding(-N),做反向ssh(-R),將公網伺服器A的1111埠對映成連線內網伺服器B與該公網伺服器A的反向ssh的埠22。username是你登入伺服器A的使用者名稱,IP是伺服器A的IP,然後輸入登入伺服器A的密碼即可。

執行完這條命令,我們可以在伺服器A上看到他的1111埠已經開始監聽:

      $ ss -ant |grep 1111

      LISTEN  0  128    127.0.0.1:1111      *:*

(3)在上面的操作中,公網A的這個1111埠就已經對映成了內網主機B的22埠了,現在我們只要ssh到自己的這個埠就行了。首先用secureCRT登入伺服器A,然後在伺服器A中執行:

     $ ssh [email protected] -p1111

ssh本機的1111埠就相當於ssh內網伺服器B的22埠,成功的登陸了內網的主機了。

(4)絕招:使用內網做代理翻牆

    在上面的(2)和(3)中我們已經可以通過自己的公網伺服器來shell登入內網伺服器了,接下來我們如果通過內網伺服器做代理翻牆(內網伺服器需是教育網IP)呢?其實原理是一樣的,上面的反向ssh是把公網伺服器A的1111埠隱射為內網伺服器B的22埠,這樣的話可以在A上遠端shell登入B,那麼我們可不可以對映其它埠呢?比如代理伺服器的埠呢,這樣內網伺服器B就能幫我們做代理了。
    首先在內網伺服器B裝上

squid代理,代理的埠號為3128,接下來在伺服器B執行如下命令:

      $ ssh -N -v -R 3000:localhost:3128 [email protected]

   username是你公網伺服器A的使用者名稱,IP是你的公網伺服器A的IP。這條命令的作用是把你公網伺服器A的埠號3000對映為內網伺服器B的埠3128,意思是說當我們訪問公網伺服器A的埠號3000時,等價於訪問內網伺服器B的3128埠。

    接下來我們可以在瀏覽器中設定代理:設定的代理IP為你的公網伺服器A的IP,代理埠號為3000。設定好代理後,我們的電腦首先訪問的是公網伺服器A的埠號3000,然後公網伺服器A把3000的埠對映為內網伺服器B的埠號3128,這樣的話就相當於使用內網伺服器B的3128埠號做代理,這樣就可以暢通無阻的訪問內網的網站以及可以翻牆嘍,厲不厲害!!!

可能會遇到報錯: WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!

處理方式:
       #vim ~/.ssh/known_hosts
    然後刪除和你想要登入的IP相關的資訊,或者全部刪除也行。
為什麼?
   第一次連線時,server將已經生成的公鑰(已存放在本地)傳送給連線方,連線方沒有相應的私鑰。server重灌之後,生成的公鑰發生了變化。連線方存放的還是曾經的公鑰。因此公鑰不匹配。即認同為server身份已變。解決方法是將原來的公鑰給刪除了,也就是一切重頭再來。又開始了第一次的工作。

參考:https://www.cnblogs.com/mengfanrong/p/5096590.html
          https://m.jb51.net/article/112524.htm

相關推薦

訪問解決方案--反向SSH

問題:    當你在不在公司或者不在學校的時候,如果想要用secureCRT訪問內網的伺服器,但是內網IP對外網是不可見的,這時怎麼辦?又或者內網的網站只對有內網的IP可以訪問,但是你連線的是外網,想要

利用反向SSH訪問伺服器

學院的伺服器在學院的內網,出了學院就不能訪問,在宿舍、家裡學習很不方便沒有伺服器的話。之前一直用TeamViewer,但是用著不舒服。最近新找到一個辦法,就是利用外網伺服器以及反向SSH搭一條通道,使

自建伺服器解決訪問穿透【埠對映】)問題的方法總結

自建一個伺服器,如何使外網裝置訪問到內網伺服器,將是個麻煩問題。下面我將介紹一些可以解決這一問題的常用辦法,也就是內網穿透或者說埠對映。 我將這些方法分為三大類,一類適用於沒有公網ip或具有公網ip的伺服器的情形;一類適用於有公網ip的情形;另一類適用於有具有公網ip的伺服

SSH反向連線及Autossh 實現訪問樹莓派

需要一臺vps伺服器,樹莓派連上vps,再通過vps來訪問樹莓派 1.在樹莓派上設定 sudo screen -S sshtest ssh -R 19999:localhost:22 你的vps使用者名稱@你vps的ip      意思:將vps上的19999埠與樹莓派的

SSH反向代理實現訪問伺服器

機器狀況 機器號 IP 使用者名稱 備註 A 192.168.1.130 usr_a 目標伺服器,在區域網中,可以訪問 A B B.B.B.B usr_b 代理伺服器,在外網中,無法訪問 A C - - 可以直接訪問 B,無法直接訪問 A

ssh 反向代理 訪問

[[email protected] ~]$ssh -C  -f -N -D 3345 -p 3345 [email protected] The authenticity of host '[localhost]:3345 ([127.0.0.1]:3345)' can't be es

Ngrok反向代理實現訪問

該篇部落格分享ngrok,這裡使用國內作者的ngrok,國外有ngrok,但是訪問國內訪問比較慢 ngrok 是一個反向代理,通過在公共的端點和本地執行的 Web 伺服器之間建立一個安全的通道。ngrok 可捕獲和分析所有通道上的流量,便於後期分析和重

簡單物聯網:訪問路由器下樹莓派Flask服務器

分配 amp con 樹莓派 轉發規則 添加 局域網 輸入 pytho 最近做一個小東西,大概過程就是想在教室,宿舍控制實驗室的一些設備。 已經在樹莓上搭了一個輕量的flask服務器(在樹莓派下搭flask在其他隨筆有說明),在實驗室的路由器下,任何設備都是可以訪問的;但是

怎樣從訪問Nginx?

本地安裝了一個Nginx,只能在區域網內訪問,怎樣從外網也能訪問到本地的Nginx呢?本文將介紹具體的實現步驟。 1. 準備工作 1.1 安裝並啟動Nginx 預設安裝的Nginx埠是80。 實現步驟 下載並解壓holer軟體包 Holer軟體包:holer-xxx.tar.gz Holer支援各

怎樣從訪問php-fpm?

acc cal 選擇 dem org inter 127.0.0.1 code address 本地安裝了一個php-fpm,只能在局域網內訪問,怎樣從外網也能訪問到本地的php-fpm呢?本文將介紹具體的實現步驟。 準備工作 安裝並啟動php-fpm 默認安裝的php-f

怎樣從訪問數據庫?

平臺 主機 tree 數據庫 步驟 命令 fff 客戶端 映射 本地安裝了一個數據庫,只能在局域網內訪問到,怎樣從外網也能訪問到本地的數據庫呢?本文將介紹具體的實現步驟。 1. 準備工作 1.1 安裝並啟動數據庫 默認安裝的數據庫端口是1024。 2. 實現步驟 2.1 下

怎樣從訪問Jetty?

本地安裝了一個Jetty,只能在區域網內訪問,怎樣從外網也能訪問到本地的Jetty呢?本文將介紹具體的實現步驟。 準備工作 安裝並啟動Jetty 預設安裝的Jetty埠是8080。 實現步驟 下載並解壓holer軟體包 Holer軟體包:holer-xxx.tar.gz Holer支援各種OS系統

怎樣從訪問Django?

本地安裝了一個Django,只能在區域網內訪問,怎樣從外網也能訪問到本地的Django呢?本文將介紹具體的實現步驟。 準備工作 安裝並啟動Django 預設安裝的Django埠是8000。 實現步驟 下載並解壓holer軟體包 Holer軟體包:holer-xxx.tar.gz Holer支援各種

怎樣從訪問Jboss?

本地安裝了一個Jboss,只能在區域網內訪問,怎樣從外網也能訪問到本地的Jboss呢?本文將介紹具體的實現步驟。 準備工作 安裝並啟動Jboss 預設安裝的Jboss埠是8080。 實現步驟 下載並解壓holer軟體包 Holer軟體包:holer-xxx.tar.gz Holer支援各種OS系統

怎樣從訪問Jupyter Notebook?

本地安裝了一個Jupyter Notebook,只能在區域網內訪問,怎樣從外網也能訪問到本地的Jupyter Notebook呢?本文將介紹具體的實現步驟。 準備工作 安裝並啟動Jupyter Notebook 預設安裝的Jupyter Notebook埠是8888。 實現步驟 下載並解壓holer

怎樣從訪問RESTful API?

本地部署了RESTful API,只能在區域網內訪問,怎樣從外網也能訪問到本地的RESTful API呢?本文將介紹具體的實現步驟。 準備工作 部署並啟動RESTful API服務端 預設部署的RESTful API服務端埠是80。 實現步驟 下載並解壓holer軟體包 Holer軟體包:hole

怎樣從訪問WebSphere?

本地安裝了一個WebSphere,只能在區域網內訪問,怎樣從外網也能訪問到本地的WebSphere呢?本文將介紹具體的實現步驟。 準備工作 安裝並啟動WebSphere 預設安裝的WebSphere埠是9080。 實現步驟 下載並解壓holer軟體包 Holer軟體包:holer-xxx.tar.

怎樣從訪問SQLServer資料庫?

本地安裝了一個SQLServer資料庫,只能在區域網內訪問到,怎樣從外網也能訪問到本地的SQLServer資料庫呢?本文將介紹具體的實現步驟。 1. 準備工作 1.1 安裝並啟動SQLServer資料庫 預設安裝的SQLServer資料庫埠是1433。 2. 實現步驟 2.1 下載並解壓holer軟

怎樣從訪問Web?

dem tag -a inter git 原因 服務端 映射 gmail 本地部署了一個Web服務端,只能在局域網內訪問,怎樣從外網也能訪問到本地的Web服務呢?本文將介紹具體的實現步驟。 準備工作 部署並啟動Web服務程序 默認部署的Web服務端口是8080。 實現步驟

怎樣從訪問Zeus?

main blog ast cal mail 方式 ref 準備 技術 本地安裝了一個Zeus,只能在局域網內訪問,怎樣從外網也能訪問到本地的Zeus呢?本文將介紹具體的實現步驟。 準備工作 安裝並啟動Zeus 默認安裝的Zeus端口是9090。 實現步驟 下載並解壓hol