由于需要在外使用公司內部網絡環境,故采用了FRP做了端口轉發,以下是一些配置要點:
1、服務端配置
服務器必須是公網服務器,可以在AWS或ALIYUN開通,得到公網IP。
服務器配置非常簡單,只需要修改frps.ini文件,加入以下配置:
2、客戶端配置
客戶端配置復雜度隨著業務的復雜度的增加而變大。
客戶端配置,修改frpc.ini文件,配置如下:
3、啟動服務
./start.sh client啟動腳本如下:(server端類似)
4、其他問題
1、如果使用了云服務,如aliyun,aws等,需要在安全組中開通以上端口(remote_port)的訪問權限,否則外網到內網的鏈路無法通過。
2、服務端運行后,客戶端運行,隨后可以通過外網域名直接訪問內網服務
1、服務端配置
服務器必須是公網服務器,可以在AWS或ALIYUN開通,得到公網IP。
服務器配置非常簡單,只需要修改frps.ini文件,加入以下配置:
[common]
bind_port = 7777 #服務器監聽地址,配合公司內網機器使用
vhost_http_port=80 #服務器監聽80端口
vhost_https_port=443 #服務器監聽443端口,Https
bind_port = 7777 #服務器監聽地址,配合公司內網機器使用
vhost_http_port=80 #服務器監聽80端口
vhost_https_port=443 #服務器監聽443端口,Https
2、客戶端配置
客戶端配置復雜度隨著業務的復雜度的增加而變大。
客戶端配置,修改frpc.ini文件,配置如下:
[common]
server_addr = xxx.xxx.xxx.xx #公網服務器的外網IP地址
server_port = 7777 #公網服務器的監聽地址,同frps.ini中的bind_port配置
[ssh] #暴露公司內網的ssh服務
type = tcp #選擇tcp類型
local_ip = 127.0.0.1 #內網機器ip, frp客戶端程序所在的內網機器
local_port = 22 #內網機器允許的ssh服務登錄端口
remote_port = 7022 #內網機器監聽的外網ssh登錄端口, 比如在家里訪問公司內網服務器,只需要輸入 ssh -p 7022 user@xxx.xxx.xxx.xxx即可
[web] #暴露公司內網的git代碼托管服務
type = http #選擇http類型
local_port = 88 #gitlab本地監聽地址,默認是80,需要修改gitlab配置為88或其他端口,以避免與內網nginx端口占用的沖突
custom_domains = git.domain.com #外網域名,該域名可以在dns解析到xxx.xxx.xxx.xxx的外網服務器ip上,這樣在外就可以通過域名訪問公司內部服務
[web2] #暴露更多的公司內網測試環境服務
type = http
local_port = 80 #nginx本地監聽地址,外網進來的服務通過nginx匹配各種domain來區分請求,轉發
custom_domains = test.domain.com
[web3]
type = http
local_port = 80
custom_domains = test2.domain.com
[tcp1] #暴露公司內網的socket服務
type = tcp #選擇tcp類型
local_port = 1111 #本地socket監聽端口
remote_port = 1111 #外網服務器的接收端口
[tcp2] #暴露更多內網socket服務
type = tcp
local_port = 2222
remote_port = 2222
[mysql] #暴露內網mysql服務
type = tcp #選擇tcp類型
local_port = 3306 #mysql監聽端口
remote_port = 3306
server_addr = xxx.xxx.xxx.xx #公網服務器的外網IP地址
server_port = 7777 #公網服務器的監聽地址,同frps.ini中的bind_port配置
[ssh] #暴露公司內網的ssh服務
type = tcp #選擇tcp類型
local_ip = 127.0.0.1 #內網機器ip, frp客戶端程序所在的內網機器
local_port = 22 #內網機器允許的ssh服務登錄端口
remote_port = 7022 #內網機器監聽的外網ssh登錄端口, 比如在家里訪問公司內網服務器,只需要輸入 ssh -p 7022 user@xxx.xxx.xxx.xxx即可
[web] #暴露公司內網的git代碼托管服務
type = http #選擇http類型
local_port = 88 #gitlab本地監聽地址,默認是80,需要修改gitlab配置為88或其他端口,以避免與內網nginx端口占用的沖突
custom_domains = git.domain.com #外網域名,該域名可以在dns解析到xxx.xxx.xxx.xxx的外網服務器ip上,這樣在外就可以通過域名訪問公司內部服務
[web2] #暴露更多的公司內網測試環境服務
type = http
local_port = 80 #nginx本地監聽地址,外網進來的服務通過nginx匹配各種domain來區分請求,轉發
custom_domains = test.domain.com
[web3]
type = http
local_port = 80
custom_domains = test2.domain.com
[tcp1] #暴露公司內網的socket服務
type = tcp #選擇tcp類型
local_port = 1111 #本地socket監聽端口
remote_port = 1111 #外網服務器的接收端口
[tcp2] #暴露更多內網socket服務
type = tcp
local_port = 2222
remote_port = 2222
[mysql] #暴露內網mysql服務
type = tcp #選擇tcp類型
local_port = 3306 #mysql監聽端口
remote_port = 3306
3、啟動服務
./start.sh client啟動腳本如下:(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、如果使用了云服務,如aliyun,aws等,需要在安全組中開通以上端口(remote_port)的訪問權限,否則外網到內網的鏈路無法通過。
2、服務端運行后,客戶端運行,隨后可以通過外網域名直接訪問內網服務