【FRP】利用FRP实现与外部局域网通信

1 概述

1.1 什么是FRP?

    FRP是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。 可以将内网服务以安全、便捷的方式通过具有公网IP节点的中转暴露到公网。

1.2 什么是OpenVPN?

OpenVPN是一个用于创建虚拟私人网络加密通道的软件包,最早由James Yonan编写。OpenVPN允许创建的VPN使用公开密钥、电子证书、或者用户名/密码来进行身份验证。它大量使用了OpenSSL加密库中的SSL/TLS协议函数库。

1.3 应用场景

居家办公无疑是未来办公的一种趋势,疫情原因,很多居家办公的朋友们可能会通过向日葵、TV等工具进行远程服务连接,但总有那么些不尽人意,稳定性也差,当然不可否认的,可视化是其亮点,那么如何无缝的通过家里局域网直接访问公司内网呢,上述的OpenVPN上绝对的利器之一,相较于PPTP、L2TP的性能可自行查阅。为什么由需要FRP呢,因为OpenVPN上C/S模式,即所有客户端必须能连接一个具有公网的Server(可通过路由器配置支持),但一般公司的出口公网地址是不稳定的,为达到目的,需要对内网进行穿透,这里我们选择FRP(N2N也是不错的)。

2 环境

拓扑图

软件

操作系统:Ubuntu18.04 Server OpenVPN Server:脚本 OpenVPN Client:Viscosity(MacOS),其他操作系统可自行下载相应客户端 FRP:

3 配置FRP

3.1 FRP服务端配置

在FRP Server服务器上下载解压后免编译配置

frps.ini:

[common]
bind_port = 9070 						# 服务端口
dashboard_port = 7500 			# 面板ID
dashboard_user = admin			# 用户名
dashboard_pwd = 123@abcd	# 密码

配置完成后运行服务

$ nohup ./frps -c frps.ini > frps.log

3.2 FRP客户端配置

在控制服务器(FRP Client)上配置:

frpc.ini:

配置完成后运行服务

$ nohup ./frpc -c frpc.ini > frpc.log

配置完成后,可打开http://106.12.xx.xxx:7500查看穿透是否成功

4 配置OpenVPN

4.1 OpenVPN服务端配置

在控制服务器(OpenVPN Server)上下载安装文件(上文有地址获取):

$ bash openvpn-install.sh
$ bash openvpn-install.sh 
Welcome to OpenVPN-install!
The git repository is available at: https://github.com/angristan/openvpn-install

It looks like OpenVPN is already installed.

What do you want to do?
   1) Add a new user
   2) Revoke existing user
   3) Remove OpenVPN
   4) Exit
Select an option [1-4]:

安装过程中,新增一个用户时,协议填写TCP,服务地址为FRP Server公网IP,端口为穿透端口,即上述的10086

4.2 OpenVPN客户端配置

在上文配置服务端时,同时会生成一个客户端文件,客户端端文件基本信息如下:

client
proto tcp-client
remote 106.12.xx.xxx 10086
dev tun
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
verify-x509-name server_XWxleL7XZuo6GCJu name
auth SHA256
auth-nocache
cipher AES-128-GCM
tls-client
tls-version-min 1.2
tls-cipher TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256
ignore-unknown-option block-outside-dns
setenv opt block-outside-dns # Prevent Windows 10 DNS leak
verb 3
<ca>
-----BEGIN CERTIFICATE-----
....

4.3 客户端使用(MacOS下)

一切准备就绪后,打开Viscosity,导入客户端文件,如图所示:

右击文件项连接后,等待连接,连接过程中可查看是否有错误日志,连接成功后如下图:

至此,所有环境搭建已完成,可测试从OpenVPN客户端所在宿主机去访问所要访问的内网资源。

经验分享 程序员 微信小程序 职场和发展