由于需要在外使用公司内部网络环境,故采用了FRP做了端口转发,以下是一些配置要点:
1、服务端配置 服务器必须是公网服务器,可以在AWS或ALIYUN开通,得到公网IP。
服务器配置非常简单,只需要修改frps.ini文件,加入以下配置:
[common]
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
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
4、其他问题 1、如果使用了云服务,如aliyun,aws等,需要在安全组中开通以上端口(remote_port)的访问权限,否则外网到内网的链路无法通过。
2、服务端运行后,客户端运行,随后可以通过外网域名直接访问内网服务