frp與nginx結合,實現內網裝置的ssh,遠端桌面和http訪問
前言
一年前因為selenium執行問題在阿里雲租用了一臺windows的雲伺服器,當時費了好大工夫終於也算是搞定了frp內網穿透,實現了遠端訪問宿舍裡的win10的功能。往後每次我掏出手機連上宿舍的電腦然後開始操作時,都感覺自己像個黑客一樣……
可能也是受kiko這個角色的影響吧,從此便開始幻想自己像她一樣隨時掏出一個電腦
吹爆尚語賢小姐姐!!!!!!!!
最近因為c++協作專案、想轉運維、阿里雲網速慢等種種原因,決定再康康有沒有更好的伺服器商,然後便又在騰訊雲購買了一個新的linux學生機。之前阿里雲的有備案的域名也不能用了嗚嗚嗚好煩,新的域名正在備案中,不知道啥時候可以搞定。
除此之外,最近心血來潮還買了一個樹莓派放在宿舍,打算把之前寫的內網圖書館搶座指令碼改成網頁,以後在外面有手機一鍵搶座。因此,frp再次出現在我的眼前,當時神祕的frp現在看來依舊神祕,不過我打算進一步深入瞭解它,由此便引發了今天的問題。
需求
掐指一算,目前我有4臺電腦,分別是阿里雲windows,騰訊雲linux(此後簡稱騰訊雲),自用windows(此後簡稱win10),樹莓派linux(此後簡稱樹莓派)。除去只是因為續費續多了才閒置的阿里雲之外,還有三臺電腦,我的目的有如下幾條:
- 內網穿透win10遠端桌面服務
- 內網穿透樹莓派ssh服務
- 內網穿透樹莓派http服務
所以我需要完成如下三件事情:
- 騰訊雲用nginx反向代理請求到frps,frps兵分三路,win10遠端桌面、樹莓派ssh、樹莓派網頁
- win10配置frpc,實現遠端桌面
- 樹莓派配置frpc,實現ssh和http
解釋一下,frpc為frp客戶端程式,frps為frp服務端程式
實踐
首先,我們來配置騰訊雲
frps
注意,如果你有幸看到我的部落格,請意識到,我寫的從來不是教程,不會手把手教你從零開始配置xxxx。這些東西網上多的是,不重複造輪子是程式設計師的基本,利用搜尋引擎也是。我只會寫那些我搜尋了許久,或者思考了許久的東西。希望這些可以幫到你,也幫到未來的我。
下載步驟直接掠過,詳細請參考如何安裝frp 。
我的frpc放在了/root/frp資料夾中
[root@VM-8-13-centos frp]# pwd
/root/frp
[root@VM-8-13-centos frp]# ls
frps frps.ini LICENSE nohup.out systemd
第一步,配置frps.ini配置檔案
[root@VM-8-13-centos frp]# vim frps.ini
[common]
bind_port = 6000
vhost_http_port = 5998
frps配置非常簡單,只需要兩行即可,其中:
bind_port
為與客戶端對接的埠號,要求客戶端與服務端保持一致即可,此處為6000。注意,這個埠僅用於對接使用,內網穿透每一個服務都需要一個其他的埠。
重複,bind_port
僅用於對接
vhost_http_port
為http服務的埠,此處為5998,即意味著當我訪問*http://騰訊雲ip:5998/*時,frp會將我的所有請求通過6000(即對接埠)傳送給符合要求的內網伺服器。判斷是否符合要求有兩種形式。其一,通過客戶端設定的remote_port;其二,通過客戶端設定的custom_domains,這些在後面我會講到。
如果你查閱了大量其他答案,你會發現這裡少了一個vhost_https_port
。這是因為我將要通過nginx反向代理,並不需要https。這也就是接下來我要講述的nginx配置。
nginx
我先擺出frp配置的nginx.conf片段
server {
listen 82 ssl;
server_name lib.chantaria.xyz;
ssl_certificate ssl.crt;
ssl_certificate_key ssl.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_prefer_server_ciphers on;
error_page 497 https://lib.chantaria.xyz:82$uri;
location / {
proxy_pass http://127.0.0.1:5998;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_pass_header Set-Cookie;
}
}
前兩行是nginx通用配置,監聽82埠,並啟用ssl證照(此處是82是因為我的備案還沒下來,如果備案下來了會改成80)。同時繫結域名,即當訪問的是*https://lib.chantaria.xyz:82/*時nginx才會執行這個程式碼塊。
後幾行是ssl配置,在此處也不是重點。
error_page 497 https://lib.chantaria.xyz:82$uri;
是rewrite,即當訪問的是http://lib.chantaria.xyz:82/時將連結重寫為https://lib.chantaria.xyz:82/。
後面的location片段即反向代理到frps的片段。其中:
proxy_pass
為反向代理到的url,至於為什麼是http://127.0.0.1:5998,請參考我在frp段的講述。
此段中最重點的是proxy_set_header Host $host;
如果你沒有這句話,那麼當你訪問*https://lib.chantaria.xyz:82/*時,瀏覽器會顯示
The page you requested was not found.
而此時你的frps會告訴你:
[W] [http.go:86] do http proxy request error: no such domain: 127.0.0.1 /
其中的原因,是frp在收到http請求後,會根據請求的url分配受理請求的客戶端。而nginx在進行反向代理時,會主動擦去這些,導致frps接收不到正確的url,也就無法分配正確的客戶端來處理這些請求。
至此,nginx配置也告一段落
大功告成後,記得執行nginx -s reload
重新載入配置檔案,然後在frp路徑執行nohup ./frps -c ./frps.ini
來後臺啟動frps服務。
樹莓派配置
還是先擺上配置
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-upYI0f0p-1608233033466)(frpAndNginx/image-20201218024138286.png)]
此處複製失敗了,索性放一張圖片。
[common]
中是frpc的基本配置,分別為遠端伺服器ip,以及對接用的埠。
[ssh]
中是ssh配置,圖片中意思即為將遠端的5997埠對映到本地的22埠。
[http]
中便是http服務的配置,我在此配置的ip和port是flask執行的位置(畢竟只是一個小指令碼,所以就沒有再配置wsgi之類的東西,flask自帶的開發級伺服器足夠了)
其中比較重點的是custom_domains
引數,這個引數便是frps所尋找的客戶端特徵值。切記,即使你使用的並不是80埠,也請不要自作主張在後面附加上埠號。因為frp並不管這些,它只在乎域名,不在乎你是哪個埠。(我在這裡踩了好久的坑)
除此之外應該就沒什麼需要注意的事情了
還是同樣的,在frp路徑執行nohup ./frpc -c ./frpc.ini
來後臺啟動frpc服務。
至此,樹莓派配置也告一段落
win10
配置完前兩個,win10其實也就沒什麼可說的了。
[common]
server_addr = 81.xxxxxxxx
server_port = 6000
[remove]
type = tcp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 5999
即騰訊雲的5999埠被對映到了3389埠(即遠端桌面埠)。
然後簡單地編寫一個bat批處理命令(話說雖然叫批處理命令不過我好像都用來執行單個操作了哈哈哈哈,批處理當然要用python)
@echo off
frpc.exe -c frpc.ini
平時只要雙擊bat
2020/12/18 02:53:13 [I] [service.go:288] [a0e3b36022e1d765] login to server success, get run id [a0e3b36022e1d765], server udp port [0]
2020/12/18 02:53:13 [I] [proxy_manager.go:144] [a0e3b36022e1d765] proxy added: [remove]
2020/12/18 02:53:13 [I] [control.go:180] [a0e3b36022e1d765] [remove] start proxy success
便可以順利啟動,隨後掏出你的手機來盡情裝x吧哈哈哈哈哈
相關文章
- 使用frp進行內網穿透,實現ssh遠端訪問Linux伺服器FRP內網穿透Linux伺服器
- FRP+WoL實現遠端開機+遠端桌面FRP
- 使用 Frp 和 Docker 通過遠端桌面和 SSH 來遠端控制 Windows(反向代理)FRPDockerWindows
- FRP配置外網遠端桌面FRP
- frp實現內網穿透--支援80埠訪問FRP內網穿透
- frp實現NAS外網訪問FRP
- 遠端訪問及控制——ssh
- Linux SSH遠端訪問Linux
- SSH遠端訪問及控制
- Holer實現外網ssh訪問內網Docker容器內網Docker
- Holer實現外網ssh訪問內網linux內網Linux
- 訪問控制列表與SSH結合使用,為網路裝置保駕護航,提高安全性
- frp + nginx 配置多人共用的http 內網穿透服務FRPNginxHTTP內網穿透
- 遠端桌面連線,外網遠端控制內網windows和linux的實現,詳細圖文教程內網WindowsLinux
- FastNat外網訪問 Windows 3389 遠端桌面ASTWindows
- 5 分鐘,使用內網穿透快速實現遠端桌面內網穿透
- Frp內網穿透搭建,家庭主機對外提供介面,支援ssh訪問FRP內網穿透
- 用FRP做內網穿透使用遠端桌面連線家裡的windows電腦FRP內網穿透Windows
- NAS如何實現遠端訪問
- django:runserver實現遠端訪問DjangoServer
- frp 實現內網穿透FRP內網穿透
- mysql實現遠端訪問,phpmyadmin實現遠端連線mysqlMySqlPHP
- frp免費內網穿透訪問家用電腦本地服務(http示例)FRP內網穿透HTTP
- PLC快速聯網,實現裝置遠端監測管理
- 威聯通NAS VirtualizationStation 安裝ubuntu配置SSH遠端訪問Ubuntu
- 如何禁止外來裝置訪問企業內網和外網?內網
- vnc遠端用外網遠端公司內網,3步實現vnc遠端用外網遠端公司內網VNC內網
- frp內網穿透,客戶端能訪問,服務端訪問報錯404,有兄弟遇到過嗎FRP內網穿透客戶端服務端
- 裝置製造商如何實現菸草裝置的遠端監控與高效運維運維
- 配置 frp 實現內網穿透FRP內網穿透
- 使用frp實現內網穿透FRP內網穿透
- 內網遠端桌面工具,內網遠端桌面連線方式,連線工具有什麼好的推薦內網
- 詳解Linux中SSH遠端訪問控制Linux
- 內網穿透—使用 frp 實現內外網互通內網穿透FRP
- Holer實現外網訪問本地NginxNginx
- frp 實現內網穿透(Windows 版)FRP內網穿透Windows
- 如何使用 frp 實現內網穿透FRP內網穿透
- Go實現ssh執行遠端命令及遠端終端Go