使用frp進行內網穿透連接遠程服務器


   這篇博文用於記錄如何從外網不借助額外軟件從而實現在家中連接到公司的服務器(學校服務器或者電腦)。

  采用ssh root@IP進行連接電腦或者服務器,必須要保證被連接的服務器(或者電腦)與你正在操作的電腦處在同一個局域網中。然而我想要在家中或者在出差路上,連接公司或者學校局域網中服務器就需要做一些操作了,常見的操作是使用vpn,但是設置vpn又有些復雜,或者一些場景下是沒有vpn的。這時候我們就可以采用frp進行內網穿透。

一、原理

  frp原理是通過一台可以被公網訪問ip的服務器(也可以是電腦)作為中介,將被連接服務器(例如學校服務器A)和自己正在操作的電腦(例如家里的電腦B)進行“連接”,即可以理解成frp程序通過一台可以被公網訪問ip的服務器(或者電腦)把身處在兩個不同局域網中的兩台電腦聯結起來了,借用參考網站里的一張圖。

 二、准備工作

  為了更好的配置frp,我對一些設備進行了編號:

     1、被連接服務器A(公司電腦,學校服務器)

     2、中介服務器C(可以被公網訪問ip的終端,例如阿里雲服務器)

     3、想要連接服務器A的電腦B(家里的電腦,想要去連接服務器的電腦)

  當然我們也需要去下載frp的程序壓縮包,網址在這里:https://github.com/fatedier/frp/releases,根據不同服務器(電腦)的架構下載對應的壓縮包(x86_64下載amd64的包)。這里需要注意的是frp只需要下載到被連接服務器A,以及中介服務器C,電腦B是不需要安裝的。下載解壓之后,我們可以看到文件里包括有以下的文件:

   (我這里把整個文件夾改名為fps了)

  以上就做完准備工作了。(每台終端設備都需要支持並已經安裝好ssh了,具體安裝方式百度就好了)

三、中介服務器C配置

  在中介服務器C中我們把frp文件解壓之后,進入文件夾(我這里改名為了frp),找到打開frps.ini文件(注意別和frpc.ini看混了)。

bind_port = 7000 # 被連接服務器A(客戶端)和中介服務器C(服務端)連接的端口 dashboard_port = 7500 # 中介服務器C(服務端)儀表盤端口 token = 12345678 # 被連接服務器A(客戶端)和中介服務器C(服務端)連接時的口令 dashboard_user = admin # 儀表盤用戶名 dashboard_pwd = admin       # 儀表盤密碼

  在一些其他攻略里習慣把被連接服務器A——稱為frp的客戶端,中介服務器C——稱為frp的服務端。

  bind_port = 7000:這里主要是用於frp的客戶端和frp的服務端進行通信的端口設置
  dashboard_port = 7500:這主要是為了訪問frp的服務端儀表面板用的,一會會看到的
  dashboard_user = xxx:登陸frp的服務端儀表面板用的
  dashboard_pwd = xxx:登陸frp的服務端儀表面板用的
  token = 12345678:用於frp的客戶端和frp的服務端之間連接時進行口令驗證用的
  完成以上配置之后,就可以運行frps程序了。我這里以ubuntu系統為例,只需要在frp文件夾中打開,終端輸入:
./frps -c frps.ini

   如果出現這個界面說明中介服務器C的frp配置已經完成了。(這里提醒下大家frps.ini文件是不可以用#作為注釋的,因此文件中一定要把#注釋刪掉,不然會運行結果不一樣和上圖

  我們可以在瀏覽器中輸入xxxx.xxxx.xxxx.xxxx:7500(中介服務器的公網IP:儀表面板端口號),並輸入剛才你設定好的用戶名和密碼(dashboard_user = admin,dashboard_pwd = admin),就可以得到以下畫面了。

   這可以查看frp中的連接情況。(frp作為一款輕量級的反向代理軟件其實還有很多功能)。以上就完成了中介服務器C的frp配置。這里要注意到我們不能關閉中介服務器C的frp進程,因此我們也可以使用以下命令行在啟動frp程序的時候使其后台啟動。

nohup ./frps -c frps.ini &

  如果想關閉frp進程,可以使用kill +pid的方式

四、被連接服務器A配置

  接下來在被連接服務器A上進行frp設置。首先還是需要把frp壓縮包(一定要對應服務器A的架構)解壓在服務器上,其實可以看到壓縮包內文件分布都是一樣的,也是有frps.ini,frpc.ini....等等文件,我們需要修改的文件就是frpc.ini(注意不要和frps.ini搞混了)

[common] server_addr = xxxx.xxx.xxx.xxx # 中介服務器C的公網IP server_port = 7000         # 被連接服務器A(客戶端)與中介服務器C(服務端)連接的端口 token = 12345678          # 被連接服務器A(客戶端)與中介服務器C(服務端)連接時的口令 [ssh]  # 這里可以自己改名字[xxxx] type = tcp             # 設置連接協議(不用改) local_ip = 127.0.0.1       # 內部循環IP(不用改) local_port = 22          # 對應的內部端口 remote_port = 6000        # 中介服務器C需要用來連接的端口

  我們需要注意以下remote_port這個設置,這個端口號指的是中介服務器C會監聽remote_port這個端口,如果有其他外部電腦連接中介服務器C的這個端口,那么就等價於連接服務器A的local_port端口。一會我們會在下一節通過SSH連接的時候看到具體使用。

  完成上面配置之后,我們就需要在被連接服務器A上啟動frp程序。(注意是啟動frpc.ini)

./frpc -c frpc.ini

  

  以上就是啟動成功了,我們可以再到中介服務器C中看看端口使用情況。

  在中介服務器C的終端中輸入netstat -ntlp就可以看到所有用戶運行的程序端口使用情況。

   可以看到6000端口已經處於監聽狀態了。至此我們就完成了中介服務器C和被連接服務器A的frp設置了。

五、家中電腦B連接服務器A

  接下來就是使用ssh來連接服務器A了,如開頭所說,如果沒有中介服務器C,我們是沒法連接到另一個局域網上服務器A的,但是現在我們可以通過連接中介服務器C的6000端口從而連接到被連接服務器的22端口(也就是ssh連接的默認端口)。

  這里給一下登陸格式,我們應該是

ssh -p 6000 name@xxx.xxx.xxx.xxx

  要注意到這的xxx.xxx.xxx.xxx是中介服務器C的公網IP,但是這里的name是被連接服務器A的用戶名(這兩個是不一樣的,一些攻略沒有講所以被坑了)。這里使用的6000端號是和被連接服務器A中frpc.ini配置文件中的remote_port端口對應的。

  輸入的密碼也應該是被連接服務器A的name用戶的密碼,而並不是中介服務器C的密碼。

六、總結

  以上就是使用frp程序進行內網穿透進行ssh連接,其實frp程序可以連接其他端口的服務,如果你在服務器A上配置了Web服務我們也可以通過這個方式來完成公網訪問,具體操作大同小異,主要是配置文件的修改。

  下面是我記錄的一些可能用到的命令,方便自己以后來看:

nohup ./frps -c frps.ini &     # 后台啟動
netstat -ntlp   # 查看所有tcp端口連接的服務端口號
ps -ef|grep [程序名]  # 查看相關(程序名)進程狀態

 

 

參考網站:

https://sspai.com/post/52523/

https://blog.csdn.net/u013144287/article/details/78589643

frp內網穿透的四種模式:tcp、udp、stcp、xtcp - 諸葛東流博客 (zhuguodong.com)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM