Frp + OpenVpn搭建内网VPN

前言

没有公网IP的前提下,公司内网的服务器资源需要能访问和使用,当然直接使用frp代理出去也行,但是搭配OpenVpn提供内网访问更加合适,下面是我在公司实操的步骤,记录以供借鉴。

云服务器

前提,需要有一台有公网IP的云服务器,配置不用很高,我这里使用的是腾讯云竞价实例

image-20220620220324477

选择按流量计费比较划算,带宽需要根据实际需求设置,后续可以升级带宽

image-20220620220550695

安装frp

需要先安装DockerDocker-Compose

frps - 服务端

frp

1
2
3
4
docker run -d --restart=always \
--network host \
-v /home/ubuntu/Docker/Volumes/frps/frps.ini:/etc/frp/frps.ini \
--name frps snowdreamtech/frps:0.34.3

frps.ini

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
[common]
# 服务端监听 ip/端口
bind_addr = 0.0.0.0
bind_port = 7800

# 搭建http web服务,监听的端口(例如:80,但由于80端口留给nginx,此处改为其它端口)
vhost_http_port = 7080
vhost_https_port = 7081

# 配置服务器管理看板
# 限定访问ip,如果不限制访问请设置为:0.0.0.0。
# 监听端口,管理员的登录名和密码
dashboard_addr = 0.0.0.0
dashboard_port = 7082
dashboard_user = admin
dashboard_pwd = admin

# 设置记录日志的文件
# 日志级别:trace, debug, info, warn, error,从低到高
# 日志最多保留的天数
log_file = logs/stdout.log
log_level = info
log_max_days = 3

# 认证token
token = mytoken

记得配置云服务器安全组,打开对应的端口

frpc - 客户端

1
2
3
4
docker run -d --restart=always \
--network host \
-v /home/ubuntu/Docker/Volumes/frpc/frpc.ini:/etc/frp/frpc.ini \
--name frpc snowdreamtech/frpc:0.34.3

frpc.ini

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[common]
server_addr = 云服务器公网ip
server_port = 7000
token = 服务端配置的token
tls_enable = true

[ovpn]
type = udp
local_ip = 192.168.2.11 #内网的ip
local_port = 1194
remote_port = 1194

[ovpn-tcp]
type = tcp
local_ip = 192.168.2.11
local_port = 1194
remote_port = 1194

安装oepnvpn

docker-compose.yml

udp协议,远程桌面会丢包

1
2
3
4
5
6
7
8
9
10
11
12
version: '2'
services:
openvpn:
cap_add:
- NET_ADMIN
image: kylemanna/openvpn
container_name: openvpn-udp
ports:
- "1194:1194/udp"
restart: always
volumes:
- ./openvpn-data/conf:/etc/openvpn

tcp协议

1
2
3
4
5
6
7
8
9
10
11
12
13
version: '2'
services:
openvpn:
cap_add:
- NET_ADMIN
image: kylemanna/openvpn
container_name: openvpn-tcp
ports:
- "1194:1194/tcp"
restart: always
volumes:
- ./openvpn-data/conf:/etc/openvpn
command: 'ovpn_run --proto tcp'

TCP/UDP协议都可以,公网

云服务器安全组需要打开对应端口 frp也要配置对应的端口

初始化配置文件和证书

udp

1
2
docker-compose run --rm openvpn-udp ovpn_genconfig -u udp://公网ip地址
docker-compose run --rm openvpn-udp ovpn_initpki

tcp

1
2
docker-compose run --rm openvpn-tcp ovpn_genconfig -u tcp://公网ip地址
docker-compose run --rm openvpn-tcp ovpn_initpki

记住配置的私钥密码

配置文件授权 (可选)

1
sudo chown -R $(whoami): ./openvpn-data

启动 OpenVPN

1
docker-compose up -d openvpn

image-20220620224559902

生成连接密钥

1
2
3
4
5
export CLIENTNAME="jontywang"
# 有密码校验
docker-compose run --rm openvpn easyrsa build-client-full $CLIENTNAME
# 无密码校验
docker-compose run --rm openvpn easyrsa build-client-full $CLIENTNAME nopass

生成证书文件

1
docker-compose run --rm openvpn ovpn_getclient $CLIENTNAME > $CLIENTNAME.ovpn

image-20220620224912885

这个配置文件就是连接密钥

撤销证书

1
2
3
4
# 保留配置文件
docker-compose run --rm openvpn ovpn_revokeclient $CLIENTNAME
# 移除配置文件
docker-compose run --rm openvpn ovpn_revokeclient $CLIENTNAME remove

连接VPN

下载连接工具

安装完成后运行VPN连接工具,运行后右键点击菜单栏图标

选择import => 导入配置文件,也就是上述生成的连接密钥, 用户名.ovpn

image-20220620225612512

image-20220620225528393