背景:在没有公网IP或无固定公网IP的情况下,由于出口IP不固定,难以做到以IP来限制仅公司网络访问管理后台,从而增加了管理后台被非法访问的可能性。但由于固定公网IP价格较高,单纯为此进行更换成本过高。因此,在不改变目前公网的情况下,使用frp完成仅限公司内网访问管理后台的限制,可以在不太增加成本的情况下完成相关操作。


一、本地部署frpc(注:如果有非固定的公网IP的话直接执行第二部分)

1、在内网访问地址所在的服务器上(推荐使用树莓派等ARM设备)部署frpc,将本地准备使用的frps端口反代到有公网IP的地址,配置如下:

[common]
server_addr = 1.1.1.1 //云服务器公网IP
server_port = 8000
token = 123456      //token按公司要求设置

[frptcp]
type = tcp
local_ip = 127.0.0.1
local_port = 55555    //第二步要使用的frps的端口
remote_port = 55555   //此端口只允许公网IP所在的服务器本机访问
use_encryption = true
use_compression = true

2、启动frpc

nohup ./frpc -c ./frpc.ini >/dev/null 2>&1 &     //Linux

frpc.exe -c frpc.ini    //Windows 

二、本地部署frps

1、在内网访问地址所在的服务器上部署frps,如果是有不固定公网IP的,请将需要暴露的端口映射到等一下需要设置的bind_port端口上,vhost_http_port和vhost_https_port根据实际需求配置,我本次示例直接使用80和443端口:

[common]
bind_port = 55555
vhost_http_port = 80
vhost_https_port = 443
dashboard_port = 55556  //frps后台查看的端口
# dashboard 用户名密码可选,默认都为 admin,根据公司要求更改
dashboard_user = admin
dashboard_pwd = admin
token = 123456

2、启动frps

nohup ./frps -c ./frps.ini >/dev/null 2>&1 &     //Linux

frps.exe -c frps.ini    //Windows 

三、将云上的管理系统和跳板机端口代理回公司

1、以阿里云为例,在安全组中,将对应的端口设置为仅内网访问,如图所示,将90端口设置为仅VPC内网访问(注:IP端由实际情况决定,我的VPC内网是10.99.0.0/24)

2、将管理系统和跳板机端口代理回公司

[common]
server_addr = 127.0.0.1 //直接通过刚才过来的端口回去
server_port = 55555
token = 123456      //token按公司要求设置

//跳板机端口
[jumpserver]
type = tcp
local_ip = 10.99.0.250 //填写跳板机内网IP
local_port = 2222    //跳板机内网端口,按要求设置为仅VPC内网访问
remote_port = 2222   
use_encryption = true
use_compression = true

//管理系统代理回公司
[admin]
type = http
local_ip = 10.99.0.251
local_port = 80
custom_domains = admin.xxx.xxx

四、部署OPENVPN

部署openvpn的目的是为了在非公司环境下可以连回公司登陆管理系统和跳板机,如果没有这个需求可以不进行部署。

1、下载一键安装脚本,记录下安装过程中设置的端口以及使用的是TCP还是UDP,下载链接:openvpn一键安装脚本下载

2、进入/etc/openvpn,找到server.conf文件,使用vim命令进行更改;

3、注释掉全量代理的push "redirect-gateway def1 bypass-dhcp",增加需要代理的IP段和所需要使用的DNS的IP,如示例中所使用的公司内网IP段为192.168.0.0/24,DNS服务器使用阿里DNS 223.5.5.5:

push "route 192.168.0.0 255.255.255.0"
push "route 223.5.5.5 255.255.255.255"
push "dhcp-option DNS 223.5.5.5"
#push "redirect-gateway def1 bypass-dhcp"

4、增加一条日志设置,以保证所有登陆记录都有记录:

log /var/log/openvpn.log

5、完成上述操作后,重启openvpn服务,然后就可以使用openvpn-install.sh添加用户,重启命令如下:

nohup /usr/sbin/openvpn --cd /etc/openvpn/ --daemon --config /etc/openvpn/server.conf &

五、设置openvpn的frpc

备注:如果有非固定的公网IP,在做好DDNS的情况下,进行端口转发也可以在不执行本步操作的情况下达到相应效果,但如果有BGP的服务器,推荐使用frpc的方式接入。

frp部分比较简单,只需要根据各自的frp的实际情况来配置即可,需要注意的是,为了节省流量以及达到更好的网络效果,需要使用示例中最后两个设置来开启加密和压缩;需要注意的是,本文采用TCP方式搭建,如果使用的是UDP,需要将type改为UDP:

[gsvpn]
type = tcp
local_ip = 127.0.0.1
local_port = 1194
remote_port = 60000
use_encryption = true
use_compression = true