07.31 openwrt 使用frp實現內網穿透

有時為了方便我們需要遠程訪問路由器,不過遠程訪問並沒有那麼容易。

如果你有公網 IP 的話,打開端口就可以訪問,但 IPv4 就那麼點,不是每個人都有,IPv6 還沒普及,所以需要另一種方法:內網穿透。

什麼是內網穿透?簡單來講就是:內網設備和公網設備之間保持一個連接,當用戶訪問公網設備時,公網設備將請求轉發給內網設備,由內網設備處理請求再把數據返回給公網設備接著返回給用戶,從而可以遠程訪問內網設備。

內網穿透可以使用內網穿透軟件來實現,比如:Ngrok 和 frp。

Ngrok 搭建比較複雜,需要從 Google 下載文件,對國內 VPS 不太友好。 frp 就好多了,配置簡單,支持多種協議,這次我們就用 frp 來搭建一個內網穿透。

準備工作

一臺公網設備,比如:服務器、VPS 或者 其他有公網 IP 的設備。

路由器可用空間需大於 5M

搭建內網穿透

進入 https://github.com/fatedier/frp/releases/latest 下載公網設備和路由器對應的版本

公網設備如果是服務器或者 VPS,系統是 Windows 下載 Windows 版本,Linux 下載 Linux 版本,然後根據系統位數再選擇 i386 或 amd64。

路由器根據 CPU 架構下載對應的 Linux 版本,這個我說過很多次了。

壓縮包會有兩個文件 frps 和 frpc,一個是服務端,一個是客戶端。frps 上傳到公網設備,frpc 上傳到路由器,要注意,不要把公網設備版本上傳到內網設備上面。配置文件也需要上傳,frps.ini 和 frpc.ini。

設置權限:chmod +x frp*,創建軟連接:ln -s /root/frp/frps /usr/bin/frps 和 ln -s /root/frp/frpc /usr/bin/frpc

這裡以單人使用為例,如果需要配置多人使用,請自行查看官方文檔進行修改。

配置服務端

打開配置文件:frps.ini

bind_port = 7000 是 frps 的端口,為了安全,最好改成別的。

添加一個配置項:privilege_token,這個用來做身份驗證,只有 frps 和 frpc 一致才可以建立連接,注意,它們之間時間差不能超過 15 分鐘,可以通過添加 authentication_timeout 配置項來更改這個時間,單位為秒,默認為 900。如果你使用的是國外 VPS 的話,需要注意這一點。

如果有需要的話,添加 log_file 配置項保存日誌,比如:log_file = /var/log/frps.log,注意,添加此項後,運行 frp 不會輸出任何信息。

添加 vhost_http_port 和 vhost_https_port 配置項,設置 HTTP(S) 端口。

配置客戶端

打開配置文件:frpc.ini

server_addr 和 server_port 是 frps 的 IP 和端口。

下面默認有一個 SSH 配置,把它刪了。

如果你在 frps 設置了 privilege_token,那 frpc 也需要同樣的配置項。

如果有需要的話,添加 log_file 配置項保存日誌,比如:log_file = /var/log/frpc.log ,注意,添加此項後,運行 frp 將不會有任何輸出信息。

添加一個配置節點 [WEB]

添加 type 配置項,設置轉發協議,支持:http、https、tcp、udp,轉發 Web 使用 HTTP(S),當然,也可以使用 TCP,但是不推薦。

添加 local_ip 和 local_port 設置本地 IP 和端口,IP 設置為 127.0.0.1,端口設置為你要轉發的端口即可,Web 一般為 80 和 443 (HTTPS)

可以添加 custom_domains 設置自定義域名,如果配置了多個 HTTP(S),可以用不同的域名來訪問。

可以添加 use_encryption = true 和 use_compression = true 加密和壓縮數據,但會消耗額外的 CPU 資源。

可以添加 http_user 和 http_pwd 來保護 Web 服務,僅支持 HTTP。

如果你需要轉發 TCP 和 UDP,只需要在配置節點裡添加 remote_port 配置項,設置遠程端口即可。比如轉發 SSH,remote_port 設置為 222,那麼只需要訪問 ssh://遠程IP:222 就可以了。

一切配置完成後,先在前端運行測試一下。

服務端:frps -c frps.ini

客戶端:frpc -c frpc.ini

務必先運行服務端再運行客戶端,否則客戶端會自動退出。

運行成功後訪問測試一下,沒問題的話,就可以放在後臺運行了。

後臺運行

後臺運行有兩種方法:

第一種:

運行:frpc -c /mnt/sda1/frp/frpc.ini >/dev/null 2>&1 &

結束:killall frpc

開機運行:sed -i '/exit 0/i\\sleep 10 && frpc -c /mnt/sda1/frp/frpc.ini >/dev/null 2>&1 &' /etc/rc.local

取消開機運行:sed -i '/sleep 10 && frpc -c \\/mnt\\/sda1\\/frp\\/frpc.ini >\\/dev\\/null 2>&1 &/d' /etc/rc.local

不過這種方法後臺運行 frp,好像特別容易掛掉。

使用這種方法推薦開啟日誌保存

第二種:使用 screen,路由器安裝命令:opkg update && opkg install screen,服務器安裝命令:sudo apt-get install screen -y 或 sudo yum install screen -y。

screen 的詳細用法大家可以去百度一下,我這裡只說怎麼用它來後臺運行 frp。

運行:screen -dmS frpc frpc -c /mnt/sda1/frp/frpc.ini

查看運行狀態:screen -r frpc

查看運行狀態後,按 Ctrl + C 結束進程,按 Ctrl + A + D (A 和 D 依次按下) 為暫時退出,依然保持後臺運行。

開機運行:sed -i '/exit 0/i\\sleep 10 && screen -dmS frpc frpc -c /mnt/sda1/frp/frpc.ini' /etc/rc.local

取消開機運行:sed -i '/sleep 10 && screen -dmS frpc frpc -c \\/mnt\\/sda1\\/frp\\/frpc.ini/d' /etc/rc.local

開機延遲 10 秒運行是確保路由器聯網,避免 frpc 自動退出。

如果你想遠程電腦,可以在電腦上安裝 TeamViewer,然後開啟主板 BIOS 裡的 PCI 設備喚醒,路由器安裝 WOL 網絡喚醒,這樣你就可以遠程開機,並且使用 TeamViewer 控制電腦。

當然,你也可以轉發內網內其他設備的服務,將 frpc 的 local_ip 配置項改為內網其他設備的 IP 即可。

GitHub: https://github.com/fatedier/frp


分享到:


相關文章: