美文网首页
frp+openvpn+docker实现内网穿透

frp+openvpn+docker实现内网穿透

作者: 明远鸢 | 来源:发表于2021-11-30 15:32 被阅读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
  • 启动openvpn服务
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客户端,即可成功登录内网!

相关文章

  • frp+openvpn+docker实现内网穿透

    公网服务器上部署frp服务端 假设我们的公网服务器的地址anywebsites.f3322.net,ubuntu ...

  • Springboot实现跨域

    为了实现内网穿透,使用的frp。 请求链路:localhost前端—>云端服务器—>经frp穿透内网到localh...

  • localtunnel 实现内网穿透

    20180303 localtunnel 自行搭建服务器的请继续往下翻 简介 由于 ipv4 地址的数量不足,大部...

  • ngrok 实现内网穿透

    最近新买了一台服务器放在家里跑各种杂七杂八的服务,需整一个内网穿透的服务通过外网也能远程登录服务器。很久之前就听闻...

  • frp 实现内网穿透

    一、准备 公网服务器 内网服务器(自己本地服务器) 二、安装frp服务端 2.1 公网服务器执行下面四条命令 2....

  • ngrok实现内网穿透

    什么是内网穿透 内网穿透,即NAT穿透,网络连接时术语,计算机是局域网内时,外网与内网的计算机节点需要连接通信,有...

  • Frp 实现内网穿透

    首先你要有一台公网服务器如果没有公网服务器,可以用NATAPP,请参见这篇教程之前一直想用ngrok来实现,奈何交...

  • frp实现内网穿透

    因为有在外面访问家里 NAS 的需求,群晖自带的动态域名解析访问又太慢。所以需要用内网穿透技术来实现通过其他公网 ...

  • Ngrok实现内网穿透

    先决条件: 云服务器一台 域名 Linux 下载源码和生成证书 编译 先自行安装Go 出现下载失败的,先 再使用g...

  • frp实现内网穿透

    frp简介 FRP 项目地址https://github.com/fatedier/frp/blob/master...

网友评论

      本文标题:frp+openvpn+docker实现内网穿透

      本文链接:https://www.haomeiwen.com/subject/hrsdxrtx.html