本文讲述了如何在局域网内搭建VPN,使公网用户可以通过该VPN访问内网资源。
工作原理
工作原理如下图所示。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 SSR服务端 SSR客户端
(监听本机12345端口) ----------------- 连接IP为公网IP,连接端口为4321
| | | /|\
| 公网IP:**.**.**.** | |
\|/ \|/ |
----------- ---------- -------- |
| 内 | | 公 | | 客 | |
| 网 | | 网 | | | |
| 服 | ------FRP------ | 服 | ---INTERNET--- | 户 | |
| 务 | | 务 | | | |
| 器 | | 器 | | 机 | |
| A | | B | | | |
----------- ---------- -------- |
/|\ /|\ |
| | |
| | |
frp客户端 frp服务端 |
(主动向公网的7000端口发起连接) (监听本机7000端口) |
| |
(设置本地服务端口为12345) |
(设置远程服务端口为4321) ------------------------------------------------------
客户机向公网IP:4321
发送数据报后,公网服务器B收到数据报并将其发送给本机7000端口所连接的内网服务器:12345
。从而达到内网穿透的目的。
frp安装及配置
frp-S的安装及配置
安装命令如下:1
2
3wget https://github.com/fatedier/frp/releases/download/v0.16.0/frp_0.16.0_linux_amd64.tar.gz
tar -zxvf frp_0.16.0_linux_amd64.tar.gz
cd frp_0.16.0_linux_amd64
进入nano frps.ini
编辑配置信息:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16[common]
bind_port = 7000
dashboard_addr = $公网IP的域名$
dashboard_port = 7500
dashboard_user = $管理用户的用户名$
dashboard_pwd = $管理用户密码$
log_file = ./frps.log
log_level = info
log_max_days = 3
privilege_token = $ token值,简单起见可以填写公网IP的域名$
heartbeat_timeout = 90
privilege_allow_ports = 2000-3000,3001,3003,4000-50000
max_pool_count = 5
max_ports_per_client = 0
authentication_timeout = 900
tcp_mux = true
在公网服务器B后台运行frps1
./frps -c ./frps.ini &
frp-C的安装及配置
1 | wget https://github.com/fatedier/frp/releases/download/v0.16.0/frp_0.16.0_linux_amd64.tar.gz |
进入nano frpc.ini
编辑配置信息:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20[common]
server_addr = $公网IP的域名,为了让域名更有层次感,我填写的是zuccvpn.公网IP的域名$
server_port = 7000
log_file = ./frpc.log
log_level = info
log_max_days = 3
privilege_token = $ token值与服务器端填写一致,简单起见可以填写公网IP的域名$
pool_count = 5
tcp_mux = true
user = zucc
login_fail_exit = false
protocol = tcp
[zuccvpn]
type = tcp
local_ip = 127.0.0.1
local_port = 12345
use_encryption = false
use_compression = false
remote_port = 4321
在内网服务器A后台运行frpc1
2
3screen -dmS frp
screen -r frp
./frpc -c ./frpc.ini &
ssr的安装
请参考 SSR的安装