使用ssh的反向代理讓內網網站通過外部服務器訪問

  • 內網的服務器1上有網站,但是端口不開放,網站無法在公網上被訪問。但是,此內網服務器1本身可以訪問外網,於是可以通過ssh反向代理,讓內網服務器1首先連接另一臺端口可以在公網被訪問的服務器2,通過服務器2來訪問服務器1上的網站。

  • ssh 反向代理轉發的操作:

    # 服務器2上
    首先ssh登錄到公網主機,修改sshd的配置文件/etc/ssh/sshd_config
    GatewayPorts yes #(這一句是精髓)
    重啓sshd,如下
    service sshd restart
    # 服務器1上:
    ssh -p {服務器2ssh端口} -i {登陸的公鑰} -qTfNn -R {服務器2端口}:localhost:{服務器1端口} root@服務器2的ip
    -q, Quiet mode. Causes most warning and diagnostic messages to be suppressed
    -T, Disable pseudo-tty allocation. 
    -f, 後臺執行
    -N, 不執行命令
    -n, Redirects stdin from /dev/null (actually, prevents reading from stdin) his must be used when ssh is run in the background.
    -R, 遠程端口轉發
    

    當然爲了保持服務穩定,還要在內網主機上設置心跳信號來保持連接,修改內網主機的~/.ssh/config文件,增加

    ServerAliveInterval 60
    ServerAliveCountMax 9999999999
    
      第一個參數表示如果服務器(外網)沒數據發來則過60秒客戶端(內網)會發送一個空包到服務器,以保持tcp長連接,默認值爲0,表示不會發心跳包,所以這裏設置爲60秒。
      第二個參數表示,如果服務器(內網)沒有收到心跳包指定次數,就中斷連接。
    

於是就這樣運行了半個月,服務一直都有

參考

ssh轉發1[1]

ssh轉發實戰2[2]

不懂iptables原理只能照抄這個[3]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章