close
最近入手一台新 NAS,因為內建 docker,自架了不少服務在上面。可惜家裡的使用社區網路,沒有對外的實體 IP;通常需要透過業者設定 Port Forwarding,才能從外部連回家裡的機器。致電客服要求申請,他們卻回覆目前已經沒有提供這個服務了;想換一家業者,但合約到期還要 3 個多月...萬念俱灰的情況下,突然想到 ngrok 這個第三方服務,提供 SSH Tunnel 技術,實現本機也可以對外的目的。既然有這種服務,那應該也會有開源的解決方法吧?找了一下果然有,而且還不少;我試用了其中的 antoniomika/sish, beyondcode/expose 不過自架的過程不太順利,server 端感覺有架起來,但 client 端連不過去~後來發現 frp,用 Go 撰寫提供執行檔馬上可用,而且還有中文文件可以查閱。利用 GCP 免費帳號建立的 Compute Engine 做為跳板,終於建立成功了!
下面紀錄一下建立的步驟:
1. 在有實際 IP 的 Compute Engine,防火牆要開 server 監聽的 port(9000) 與管理介面的 port(9999)
2. server 端以 ubuntu 為例:
-- 下載最新版的執行檔
wget https://github.com/fatedier/frp/releases/download/v0.34.3/frp_0.34.3_linux_amd64.tar.gz
-- 解壓縮並移動目錄,建立連結
tar -xvf frp_0.34.3_linux_amd64.tar.gz
rm frp_0.34.3_linux_amd64.tar.gz
sudo mv ./frp_0.34.3_linux_amd64/ /etc/frp/
sudo ln -s /etc/frp/frps /usr/bin
-- 設定開機時自動啟動的服務
sudo ln -s /etc/frp/systemd/frps.service /etc/systemd/system
sudo systemctl enable frps.service
-- 設定 frps.ini
sudo vi /etc/frp/frps.ini
[common]
; server 監聽的 port
bind_port = 9000
; 本機 vhost 的 port
vhost_http_port = 9090
; 一級域名,建議申請 Freenom,提供 5 個免費一年的域名
subdomain_host = tester999.cf
; client 溝通時要帶的 token
token = i3ch97k4mpdwsa5s
; 管理介面的 port, 帳號與密碼
dashboard_port = 9999
dashboard_user = admin
dashboard_pwd = admin
3. 安裝 cerbot 請參考官方網站
-- wildcard 設定
sudo certbot certonly --preferred-challenges dns --manual -d "tester999.cf" -d "*.tester999.cf" --server https://acme-v02.api.letsencrypt.org/directory
4. 依照提示到域名管理設定 TXT
-- 檢查 TXT 是否生效
nslookup -type=txt _acme-challenge.tester999.cf
5. 安裝 nginx
-- 設定 SSL
sudo vi /etc/nginx/sites-available/tester999.cf
server {
server_name *.tester999.cf;
listen 80;
location / {
proxy_pass http://127.0.0.1:9090;
proxy_set_header Host $host:80;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_hide_header X-Powered-By;
}
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/tester999.cf/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/tester999.cf/privkey.pem;
}
server {
if ($host = .tester999.cf) {
return 301 https://$host$request_uri;
}
listen 80;
return 404;
}
-- 建立連結
sudo ln -s /etc/nginx/sites-available/tester999.cf /etc/nginx/sites-enabled/
6. client 端以 ubuntu 為例
-- 下載最新版的執行檔
wget https://github.com/fatedier/frp/releases/download/v0.34.3/frp_0.34.3_linux_amd64.tar.gz
-- 解壓縮並移動目錄,建立連結
tar -xvf frp_0.34.3_linux_amd64.tar.gz
rm frp_0.34.3_linux_amd64.tar.gz
sudo mv ./frp_0.34.3_linux_amd64/ /etc/frp/
sudo ln -s /etc/frp/frpc /usr/bin
-- 設定 frpc.ini
sudo vi /etc/frp/frpc.ini
[common]
; server 位置
server_addr = tester999.cf
; server port
server_port = 9000
; token
token = i3ch97k4mpdwsa5s
; 以 web 的設定,https://web.tester999.cf 就會對應到 http://127.0.0.1:8080
[web]
; 有多種選項可選,http 對應 port 80
type = http
; 啟用加密與壓縮
use_encryption = true
use_compression = true
; 對應到本機的位置
local_ip = 127.0.0.1
; 本機的 port
local_port = 8080
; 子網域名
subdomain = web
參考資料:
文章標籤
全站熱搜
留言列表