一离咐、介紹
內(nèi)網(wǎng)穿透,網(wǎng)上有多種方案奉件,有些是付費(fèi)的宵蛀,有些是開源的昆著,其實(shí)各有優(yōu)劣,付費(fèi)的不需要自己擁有服務(wù)器糖埋,而開源的比如FRP則需要有一臺(tái)公網(wǎng)的服務(wù)器宣吱,如果你擁有一臺(tái)公網(wǎng)服務(wù)器(服務(wù)器可能不是你買的窃这,但是你有使用權(quán)限或者說該服務(wù)器性能要差點(diǎn))瞳别,但是部署的軟件如網(wǎng)站、gitlab等想放在自己的物理電腦上杭攻,那使用FRP進(jìn)行內(nèi)網(wǎng)穿透將是比較好的選擇祟敛,有比較強(qiáng)的靈活性
主要能實(shí)現(xiàn)的功能:
1:外網(wǎng)通過域名訪問自己電腦上任意端口程序;
2:外網(wǎng)ssh登錄自己電腦兆解;
3:總之云服務(wù)器能有的功能馆铁,大部分都可以部署到自己電腦上;
網(wǎng)上也有較多FRP內(nèi)網(wǎng)穿透的文章锅睛,但是看的有點(diǎn)亂埠巨,我將結(jié)合實(shí)際穿透過程將每一步記錄下來,大家按照步驟來是可以成功完成穿透的(可能看著步驟有點(diǎn)多现拒,但是一步步完成實(shí)際還是簡(jiǎn)單的)辣垒,總的來說只需要改三個(gè)文件(配置文件放在文末):
1:服務(wù)端的frps.ini文件
2:服務(wù)端的nginx.conf文件
3:客戶端的frpc.ini文件
官網(wǎng)文檔:https://gofrp.org/docs/overview/
需要的資源:
1:域名(沒有域名只能通過ip進(jìn)行訪問),這里我申請(qǐng)的域名是:www.leachchen.com
2:一臺(tái)云服務(wù)器(FRP內(nèi)網(wǎng)穿透需要依賴公網(wǎng)服務(wù)器印蔬,若沒有服務(wù)器的同學(xué)勋桶,可以在網(wǎng)上找其他內(nèi)網(wǎng)穿透方案也有比較多,不過功能全點(diǎn)的要付費(fèi))
3:一臺(tái)自己的物理電腦(我的是win10+ubuntu雙系統(tǒng)侥猬,ubuntu系統(tǒng)作為物理服務(wù)器)
4:FRP客戶端例驹,github地址 https://github.com/fatedier/frp/releases
二、目標(biāo)
我在自己物理電腦上安裝了nginx(默認(rèn)端口80)和gitlab(gitlab端口我設(shè)置成8000)
本地可以通過http://127.0.0.1訪問網(wǎng)站
本地可以通過http://127.0.0.1:8000訪問代碼服務(wù)器
希望能做到:
1:通過https://www.leachchen.com 訪問物理電腦上的網(wǎng)站
2:通過https://xxx.leachchen.com 訪問物理電腦上的代碼倉庫(xxx退唠,自己可以在域名平臺(tái)配置你想要的域名前綴)
三鹃锈、配置過程
我申請(qǐng)的域名是www.leachchen.com,假設(shè)服務(wù)器IP是100.10.10.10
第一步(云服務(wù)器FRP客戶端配置):
1:下載FRP客戶端,下載地址上面有提供瞧预,我當(dāng)時(shí)下載的最新版
2:解壓
1:tar xvf frp_0.44.0_linux_amd64.tar.gz
2:cd frp_0.44.0_linux_amd64.tar.gz
3:vim frps.ini 這里注意是frps.ini屎债,客戶端是frpc.ini
3:配置frps.ini(具體含義注意看配置里的注釋)
[common]
# frp監(jiān)聽的端口,默認(rèn)是7000松蒜,可以改成其他的
bind_port = 7000
# 授權(quán)碼自己可以隨便取扔茅,客戶端配置需要與服務(wù)端配置保持一致
token = 123123
# 對(duì)user開放的web訪問端口
vhost_http_port = 81
#通過ssh登錄時(shí)的端口
[ssh]
listen_port = 6000
# frp管理后臺(tái)端口,請(qǐng)按自己需求更改秸苗,可通過http://服務(wù)器IP:7500訪問后臺(tái)管理系統(tǒng)召娜,如:http://100.10.10.10:7500
dashboard_port = 7500
# frp管理后臺(tái)用戶名和密碼,請(qǐng)改成自己的
dashboard_user = admin
dashboard_pwd = admin
enable_prometheus = true
# frp日志配置
log_file = /var/log/frps.log
log_level = info
log_max_days = 3
4:運(yùn)行:nohup ./frps -c ./frps.ini &
5:此時(shí)服務(wù)端會(huì)運(yùn)行起以下端口:
7000惊楼,frp軟件
81玖瘸,服務(wù)端的web端口秸讹,比如通過http://100.10.10.10:81就能訪問到物理機(jī)上的nginx網(wǎng)站,不能用80端口會(huì)跟云服務(wù)端的nginx 80端口沖突
6000雅倒,用于ssh登錄的
7500璃诀,frp看板系統(tǒng),可通過http://服務(wù)器IP:7500進(jìn)行訪問
第二步(客戶端FRP客戶端配置蔑匣,在自己物理機(jī)上):
1:下載FRP客戶端劣欢,下載地址上面有提供,我當(dāng)時(shí)下載的最新版
2:解壓
1:tar xvf frp_0.44.0_linux_amd64.tar.gz
2:cd frp_0.44.0_linux_amd64.tar.gz
3:vim frpc.ini
3:配置frpc.ini(具體含義注意看配置里的注釋)
# 客戶端配置
[common]
#這里填你自己實(shí)際的域名裁良,要是沒有域名這里填云服務(wù)器公網(wǎng)ip
server_addr = www.leachchen.com
#與frps.ini的bind_port一致
server_port = 7000
#與frps.ini的token一致
token = 123123
#配置ssh服務(wù)
[ssh]
type = tcp
local_port = 22
#與服務(wù)器ssh部分listen_port保持一致
remote_port = 6000
[web]
type = http
local_port = 80
#這里填你自己實(shí)際的域名凿将,要是沒有域名這里填云服務(wù)器公網(wǎng)ip
custom_domains = www.leachchen.com
[gitlab]
type = http
local_port = 8000
#這里填你自己實(shí)際的域名,要是沒有域名這里填云服務(wù)器公網(wǎng)ip
custom_domains = xxx.leachchen.com
4:運(yùn)行:nohup ./frpc -c ./frpc.ini &
第三步(域名與云服務(wù)器IP綁定)
我的是阿里云的域名价脾,不同服務(wù)商綁定過程都差不多牧抵,這里主要將www、gitlab這兩個(gè)與云服務(wù)器IP進(jìn)行綁定
第四步(Nginx配置)
1:訪問www.leachchen.com時(shí)默認(rèn)是80端口侨把,此時(shí)將請(qǐng)求轉(zhuǎn)發(fā)到81端口上犀变,frp服務(wù)端和客戶端保持了連接,此時(shí)會(huì)訪問到客戶端配置了相同域名的端口上
2:訪問xxx.leachchen.com時(shí)默認(rèn)是80端口秋柄,此時(shí)將請(qǐng)求轉(zhuǎn)發(fā)到81端口上获枝,frp服務(wù)端和客戶端保持了連接,此時(shí)會(huì)訪問到客戶端配置了相同域名的端口上
若不需要支持https华匾,則將這幾行注釋掉:
listen 443 ssl;
ssl_certificate /root/temp/ssl/xxx.pem;
ssl_certificate_key /root/temp/ssl/xxx.key;
nginx配置文件路徑:/etc/nginx/nginx.conf映琳,有些是在/etc/nginx/sites-enabled/default
user root;
worker_processes 4;
pid /run/nginx.pid;
events {
worker_connections 768;
# multi_accept on;
}
http {
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
server {
listen 80;
listen 443 ssl;
ssl_certificate /root/temp/ssl/xxx.pem; #在域名服務(wù)商申請(qǐng)的證書,不同的域名證書不一樣
ssl_certificate_key /root/temp/ssl/xxx.key; #在域名服務(wù)商申請(qǐng)的證書蜘拉,不同的域名證書不一樣
server_name www.leachchen.com; #這里填你自己實(shí)際的域名
client_max_body_size 10M;
location / {
proxy_pass http://127.0.0.1:81; #訪問www.leachchen.com時(shí)默認(rèn)是80端口萨西,此時(shí)將請(qǐng)求轉(zhuǎn)發(fā)到81端口上,frp服務(wù)端和客戶端保持了連接旭旭,此時(shí)會(huì)訪問到客戶端配置了相同域名的端口上
proxy_redirect http://$host/ http://$http_host/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
}
}
server {
listen 80;
listen 443 ssl;
ssl_certificate /root/temp/ssl/yyy.pem; #在域名服務(wù)商申請(qǐng)的證書谎脯,不同的域名證書不一樣
ssl_certificate_key /root/temp/ssl/yyy.key; #在域名服務(wù)商申請(qǐng)的證書,不同的域名證書不一樣
server_name xxx.leachchen.com; #這里填你自己實(shí)際的域名
client_max_body_size 10M;
location / {
proxy_pass http://127.0.0.1:81; #訪問xxx.leachchen.com時(shí)默認(rèn)是80端口持寄,此時(shí)將請(qǐng)求轉(zhuǎn)發(fā)到81端口上源梭,frp服務(wù)端和客戶端保持了連接,此時(shí)會(huì)訪問到客戶端配置了相同域名的端口上
proxy_redirect http://$host/ http://$http_host/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
}
}
}
到此就完成了物理機(jī)上的網(wǎng)站稍味,通過https域名進(jìn)行外網(wǎng)訪問
SSH登錄(通過putty登錄):
輸入物理機(jī)的賬號(hào)密碼就可以進(jìn)行登錄了
配置文件下載:https://github.com/leach-chen/FRP
個(gè)人網(wǎng)站:https://www.leachchen.com/