frp+openvpn+docker实现内网穿透

2021-11-30  本文已影响0人  明远鸢

公网服务器上部署frp服务端

假设我们的公网服务器的地址anywebsites.f3322.net,ubuntu 20.04系统,各个端口都可用。

首先准备好frp服务端的配置文件/opt/frps.ini,内容如下

[common]
bind_addr = 0.0.0.0
bind_port = 7000
dashboard_addr = 0.0.0.0

# 管理端口
dashboard_port = 7500
dashboard_user = admin
dashboard_pwd = admin
log_file = ./frps.log
log_level = info
log_max_days = 3
disable_log_color = false

# 客户端连接token
token = 12345678
allow_ports = 2000-3000,3001,3003,4000-50000
max_pool_count = 5
max_ports_per_client = 0
subdomain_host = frps.com
tcp_mux = true

然后,运行下面的命令,使用docker部署frps的服务端:

docker run -d --name=frps \
    --restart=always \
    -v /opt/frps.ini:/etc/frp/frps.ini \
    -p 7000:7000 \
    -p 7001:7001/udp \
    -p 7500:7500 \
    snowdreamtech/frps

该容器暴露出来三个端口:7000端口为frp的服务端口;7500为frp服务端的控制面板,而7001/udp端口是为了接下来部署openvpn预留的端口。

内网机器部署openvpn

Github上已经有一份说明非常详细的文档(点此查看),讲的非常简明扼要,接下来我只是简单翻译一下而已。

首先,找个文件夹,新建一份docker-compose.yml的配置文件:

version: '2'
services:
  openvpn:
    cap_add:
     - NET_ADMIN
    image: kylemanna/openvpn
    container_name: openvpn
    ports:
     - "1194:1194/udp"
    restart: always
    network_mode: "host"
    volumes:
     - ./openvpn-data/conf:/etc/openvpn

配置文件中,network_mode:"host" 让openvpn的容器共享宿主机的网络,而不是docker-compose自动创建的openven_default虚拟网络。加了这条命令,外面机器成功登录了openvpn,即可访问内部局域网中的其他机器(否则不可以),然而,也要留意内部局域网中的ip分配与docker-compose默认的网段冲突!!!

进入该路径,依次运行下面的命令(若出现交互内容,则按照提示输入即可):

docker-compose run --rm openvpn ovpn_genconfig -u udp://VPN.SERVERNAME.COM
docker-compose run --rm openvpn ovpn_initpki
sudo chown -R $(whoami): ./openvpn-data
docker-compose up -d openvpn
export CLIENTNAME="your_client_name"
docker-compose run --rm openvpn easyrsa build-client-full $CLIENTNAME nopass
docker-compose run --rm openvpn ovpn_getclient $CLIENTNAME > $CLIENTNAME.ovpn

一切操作结束,最后得到一个 $CLIENTNAME.ovpn,拷贝到本地,但仍然需要修改部分内容。需要把文件中remote VPN.SERVERNAME.COM 1194 udp 修改为remote anywebsites.f3322.net 7001 udp。地址自然是我们的公网网址,而端口,需要接下来,在frp的客户端转发到7001/udp

内网机器部署frp客户端

内网客户端服务器上,准备好配置文件/opt/frpc.ini,内容如下:

[common]
server_addr = anywebsites.f3322.net
server_port = 7000
token = 12345678

[openvpn]
type = udp
local_ip = 0.0.0.0
local_port = 1194
remote_port = 7001

然后,运行下面的docker命令:

docker run --restart=always -d \
  --network host \
  -v /opt/frpc.ini:/etc/frp/frpc.ini \
  --name frpc \
  snowdreamtech/frpc

然后,打开我们服务端的网页控制面板anywebsites.f3322.net:7500

展开左侧Proxies栏,点中UDP,看到部署的openvpn服务已经成功连接:

此时,将修改后的ovpn配置文件导入本机的openvpn客户端,即可成功登录内网!

上一篇 下一篇

猜你喜欢

热点阅读