Linux服務器所以Frp實現內網穿透(阿里雲Ubuntu)


Linux服務器下Frp實現內網穿透(阿里雲Ubuntu)

有時候我們需要讓內網的服務器允許訪問,但是自己內網家庭常用帶寬,我發直接訪問IP,所以我們只能進行內網穿透,使用花生殼等軟件是付費的,所以我們選擇了frp作為內網穿透工具,配置如下,你需要的東西有:

  • 公網服務器,具有外網IP(如阿里雲,騰訊雲等服務器)
  • 內網服務器,能聯網即可。

一、下載Frp項目

分別下載frp到公網服務器和內網服務器:

wget https://github.com/fatedier/frp/releases/download/v0.25.0/frp_0.25.0_linux_amd64.tar.gz

然后解壓並進入服務器,

tar zxvf ./frp_0.25.0_linux_amd64.tar.gz
cd frp_0.25.0_linux_amd64/

# 目錄內容如下
# LICENSE frpc frpc.ini frpc_full.ini frps frps.ini frps_full.ini

二、配置公網服務器

進入公網IP服務器中修改目錄中的frps.ini配置文件, 將bind_port改為隨意可用端口

[common]
bind_port = 7000

三、修改內網服務器

在內網IP服務器中修改frpc.ini配置文件:

[common]
server_addr = 123.123.123.123
server_port = 7000

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000

其中解釋如下:

  • common表示基本配置
    • server_addr:公網服務器地址
    • server_port:公網bind_port配置的端口
  • ssh表示使用ssh登錄內網服務器
    • type:tcp即可
    • local_ip:本地iP,127.0.0.1即可
    • local_port: ssh端口
    • remote_port:ssh鏈接端口

四、分別啟動內網公網服務器FRP

1、在公網服務器中啟動frps服務端:

為了方便調試,我們先啟動桌面版:

cd frp_0.25.0_linux_amd64/
./frps -c ./frps.ini
nohup ./frps -c ./frps.ini &

# 鏈接成功會出現如下內容
# 2019/03/19 16:41:16 [I] [service.go:88] frps tcp listen on 0.0.0.0:7000
# 2019/03/19 16:41:16 [I] [main.go:112] Start frps success
# 2019/03/19 16:41:16 [I] [main.go:114] PrivilegeMode is enabled, you should pay more attention to security issues

生產使用中可使用如下命令在后台運行:

nohup ./frps -c ./frps.ini > /dev/null 2>&1 &

2、在內網服務器中啟動frpc客戶端:

公網服務器啟動成功后,在內網服務器中啟動frpc,為了方便調試,我們一樣啟動桌面版:

cd frp_0.25.0_linux_amd64/
./frpc -c ./frpc.ini
nohup ./frpc -c ./frpc.ini &

# 鏈接成功會出現如下內容
# 2019/03/19 17:43:44 [I] [control.go:276] [f094394cf61f02fe] login to server success, get run id [f094394cf61f02fe]
# 2019/03/19 17:43:44 [I] [control.go:411] [f094394cf61f02fe] [ssh] start proxy success

生產使用中可使用如下命令在后台運行:

nohup ./frpc -c ./frpc.ini > /dev/null 2>&1 &

五、ssh登錄服務器

如果配置成功,在進入本地服務器就相對容易了,與以前的ssh一樣:

ssh root@公網IP -p 6000

也可以使用

ssh -oPort=6000 test@公網IP

六、常見問題與解決方案

1、內網服務器無法連接frpc客戶端:

此問題一般情況是公網IP沒有開放bind_port設置的7000端口,此時可以檢查防火牆是否允許以及查看服務器安全規則,如阿里雲需要設置安全組規則允許訪問。

2、ssh無法使用內網賬號密碼登錄,只能使用公網密碼登錄

ssh無法使用內網賬號密碼登錄,只能使用公網密碼登錄;一登錄直接跳轉到外網服務器,沒有實現穿透效果,此時需要設置內網服務器frpc.ini文件,修改local_ip = 127.0.0.1

3、ssh無法登錄到frp服務器,提示超時

此問題的原因是公網未開放ssh配置的端口,開放一下即可,如我的是阿里雲,ssh端口為6000,我去阿里雲安全組規則允許訪問6000端口才搞定。

4、tcp撥號提示超時

2020/09/22 10:55:42 [W] [service.go:82] login to server failed: dial tcp xx.xx.xx.xx:7000: connect: connection timed out
dial tcp xx.xx.xx.xx:7000: connect: connection timed out # 檢查阿里雲的安全組規則與寶塔的開放端口

更多信息:

安全地暴露內網服務

對於某些服務來說如果直接暴露於公網上將會存在安全隱患。

使用 stcp(secret tcp) 類型的代理可以避免讓任何人都能訪問到要穿透的服務,但是訪問者也需要運行另外一個 frpc。

以下示例將會創建一個只有自己能訪問到的 ssh 服務代理。

frps 的部署步驟同上。

  1. 啟動 frpc,轉發內網的 ssh 服務,配置如下,不需要指定遠程端口:
# frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000

[secret_ssh]
type = stcp
# 只有 sk 一致的用戶才能訪問到此服務
sk = abcdefg
local_ip = 127.0.0.1
local_port = 22
  1. 在要訪問這個服務的機器上啟動另外一個 frpc,配置如下:
# frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000

[secret_ssh_visitor]
type = stcp
# stcp 的訪問者
role = visitor
# 要訪問的 stcp 代理的名字
server_name = secret_ssh
sk = abcdefg
# 綁定本地端口用於訪問 ssh 服務
bind_addr = 127.0.0.1
bind_port = 6000
  1. 通過 ssh 訪問內網機器,假設用戶名為 test:
ssh -oPort=6000 test@127.0.0.1

如果出現問題:

[secret_ssh_visitor] start error: listen tcp 127.0.0.1:6000: bind: Only one usage of each socket address (protocol/network address/port) is normally permitted.

將本地地址改為127.0.0.2或者其他地址

設置bat文件,這樣就不需要每次都定位到指定目錄:

cd C:\Users\JChan\Desktop\frp_0.25.0_windows_amd64\frp_0.25.0_windows_amd64
start /b frpc -c frpc.ini


免責聲明!

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



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