由于需要在外使用公司內(nèi)部網(wǎng)絡(luò)環(huán)境,故采用了FRP做了端口轉(zhuǎn)發(fā),以下是一些配置要點(diǎn):
1、服務(wù)端配置
服務(wù)器必須是公網(wǎng)服務(wù)器,可以在AWS或ALIYUN開通,得到公網(wǎng)IP。
服務(wù)器配置非常簡(jiǎn)單,只需要修改frps.ini文件,加入以下配置:
2、客戶端配置
客戶端配置復(fù)雜度隨著業(yè)務(wù)的復(fù)雜度的增加而變大。
客戶端配置,修改frpc.ini文件,配置如下:
3、啟動(dòng)服務(wù)
./start.sh client啟動(dòng)腳本如下:(server端類似)
4、其他問題
1、如果使用了云服務(wù),如aliyun,aws等,需要在安全組中開通以上端口(remote_port)的訪問權(quán)限,否則外網(wǎng)到內(nèi)網(wǎng)的鏈路無法通過。
2、服務(wù)端運(yùn)行后,客戶端運(yùn)行,隨后可以通過外網(wǎng)域名直接訪問內(nèi)網(wǎng)服務(wù)
1、服務(wù)端配置
服務(wù)器必須是公網(wǎng)服務(wù)器,可以在AWS或ALIYUN開通,得到公網(wǎng)IP。
服務(wù)器配置非常簡(jiǎn)單,只需要修改frps.ini文件,加入以下配置:
[common]
bind_port = 7777 #服務(wù)器監(jiān)聽地址,配合公司內(nèi)網(wǎng)機(jī)器使用
vhost_http_port=80 #服務(wù)器監(jiān)聽80端口
vhost_https_port=443 #服務(wù)器監(jiān)聽443端口,Https
bind_port = 7777 #服務(wù)器監(jiān)聽地址,配合公司內(nèi)網(wǎng)機(jī)器使用
vhost_http_port=80 #服務(wù)器監(jiān)聽80端口
vhost_https_port=443 #服務(wù)器監(jiān)聽443端口,Https
2、客戶端配置
客戶端配置復(fù)雜度隨著業(yè)務(wù)的復(fù)雜度的增加而變大。
客戶端配置,修改frpc.ini文件,配置如下:
[common]
server_addr = xxx.xxx.xxx.xx #公網(wǎng)服務(wù)器的外網(wǎng)IP地址
server_port = 7777 #公網(wǎng)服務(wù)器的監(jiān)聽地址,同frps.ini中的bind_port配置
[ssh] #暴露公司內(nèi)網(wǎng)的ssh服務(wù)
type = tcp #選擇tcp類型
local_ip = 127.0.0.1 #內(nèi)網(wǎng)機(jī)器ip, frp客戶端程序所在的內(nèi)網(wǎng)機(jī)器
local_port = 22 #內(nèi)網(wǎng)機(jī)器允許的ssh服務(wù)登錄端口
remote_port = 7022 #內(nèi)網(wǎng)機(jī)器監(jiān)聽的外網(wǎng)ssh登錄端口, 比如在家里訪問公司內(nèi)網(wǎng)服務(wù)器,只需要輸入 ssh -p 7022 user@xxx.xxx.xxx.xxx即可
[web] #暴露公司內(nèi)網(wǎng)的git代碼托管服務(wù)
type = http #選擇http類型
local_port = 88 #gitlab本地監(jiān)聽地址,默認(rèn)是80,需要修改gitlab配置為88或其他端口,以避免與內(nèi)網(wǎng)nginx端口占用的沖突
custom_domains = git.domain.com #外網(wǎng)域名,該域名可以在dns解析到xxx.xxx.xxx.xxx的外網(wǎng)服務(wù)器ip上,這樣在外就可以通過域名訪問公司內(nèi)部服務(wù)
[web2] #暴露更多的公司內(nèi)網(wǎng)測(cè)試環(huán)境服務(wù)
type = http
local_port = 80 #nginx本地監(jiān)聽地址,外網(wǎng)進(jìn)來的服務(wù)通過nginx匹配各種domain來區(qū)分請(qǐng)求,轉(zhuǎn)發(fā)
custom_domains = test.domain.com
[web3]
type = http
local_port = 80
custom_domains = test2.domain.com
[tcp1] #暴露公司內(nèi)網(wǎng)的socket服務(wù)
type = tcp #選擇tcp類型
local_port = 1111 #本地socket監(jiān)聽端口
remote_port = 1111 #外網(wǎng)服務(wù)器的接收端口
[tcp2] #暴露更多內(nèi)網(wǎng)socket服務(wù)
type = tcp
local_port = 2222
remote_port = 2222
[mysql] #暴露內(nèi)網(wǎng)mysql服務(wù)
type = tcp #選擇tcp類型
local_port = 3306 #mysql監(jiān)聽端口
remote_port = 3306
server_addr = xxx.xxx.xxx.xx #公網(wǎng)服務(wù)器的外網(wǎng)IP地址
server_port = 7777 #公網(wǎng)服務(wù)器的監(jiān)聽地址,同frps.ini中的bind_port配置
[ssh] #暴露公司內(nèi)網(wǎng)的ssh服務(wù)
type = tcp #選擇tcp類型
local_ip = 127.0.0.1 #內(nèi)網(wǎng)機(jī)器ip, frp客戶端程序所在的內(nèi)網(wǎng)機(jī)器
local_port = 22 #內(nèi)網(wǎng)機(jī)器允許的ssh服務(wù)登錄端口
remote_port = 7022 #內(nèi)網(wǎng)機(jī)器監(jiān)聽的外網(wǎng)ssh登錄端口, 比如在家里訪問公司內(nèi)網(wǎng)服務(wù)器,只需要輸入 ssh -p 7022 user@xxx.xxx.xxx.xxx即可
[web] #暴露公司內(nèi)網(wǎng)的git代碼托管服務(wù)
type = http #選擇http類型
local_port = 88 #gitlab本地監(jiān)聽地址,默認(rèn)是80,需要修改gitlab配置為88或其他端口,以避免與內(nèi)網(wǎng)nginx端口占用的沖突
custom_domains = git.domain.com #外網(wǎng)域名,該域名可以在dns解析到xxx.xxx.xxx.xxx的外網(wǎng)服務(wù)器ip上,這樣在外就可以通過域名訪問公司內(nèi)部服務(wù)
[web2] #暴露更多的公司內(nèi)網(wǎng)測(cè)試環(huán)境服務(wù)
type = http
local_port = 80 #nginx本地監(jiān)聽地址,外網(wǎng)進(jìn)來的服務(wù)通過nginx匹配各種domain來區(qū)分請(qǐng)求,轉(zhuǎn)發(fā)
custom_domains = test.domain.com
[web3]
type = http
local_port = 80
custom_domains = test2.domain.com
[tcp1] #暴露公司內(nèi)網(wǎng)的socket服務(wù)
type = tcp #選擇tcp類型
local_port = 1111 #本地socket監(jiān)聽端口
remote_port = 1111 #外網(wǎng)服務(wù)器的接收端口
[tcp2] #暴露更多內(nèi)網(wǎng)socket服務(wù)
type = tcp
local_port = 2222
remote_port = 2222
[mysql] #暴露內(nèi)網(wǎng)mysql服務(wù)
type = tcp #選擇tcp類型
local_port = 3306 #mysql監(jiān)聽端口
remote_port = 3306
3、啟動(dòng)服務(wù)
./start.sh client啟動(dòng)腳本如下:(server端類似)
#!/bin/sh
PID=`ps aux|grep frp|grep -v 'grep'|awk '{print $2}'`
if [ "$PID" = "" ]; then
echo 'start frpc now
.'
./frpc -c ./frpc.ini > c.log &
sleep 2
tail -n 20 c.log
echo 'start finished'
else
echo $PID 'stop frpc
'
kill -9 $PID
./frpc -c ./frpc.ini > client.log &
echo 'start it now
'
sleep 2
tail -n 20 client.log
echo 'start finished
'
fi
PID=`ps aux|grep frp|grep -v 'grep'|awk '{print $2}'`
if [ "$PID" = "" ]; then
echo 'start frpc now

./frpc -c ./frpc.ini > c.log &
sleep 2
tail -n 20 c.log
echo 'start finished'
else
echo $PID 'stop frpc

kill -9 $PID
./frpc -c ./frpc.ini > client.log &
echo 'start it now

sleep 2
tail -n 20 client.log
echo 'start finished

fi
4、其他問題
1、如果使用了云服務(wù),如aliyun,aws等,需要在安全組中開通以上端口(remote_port)的訪問權(quán)限,否則外網(wǎng)到內(nèi)網(wǎng)的鏈路無法通過。
2、服務(wù)端運(yùn)行后,客戶端運(yùn)行,隨后可以通過外網(wǎng)域名直接訪問內(nèi)網(wǎng)服務(wù)