站点图标 Linux-技术共享

WireGuard Easy内网VPN+Frp内网穿透+Docker搭建(完美教程)

前言

WireGuard 的白皮书中说到:

WireGuard: Next Generation Kernel Network Tunnel 谷歌翻译: WireGuard: 下一代网络内核隧道

你可以把它理解为 VPN (Virtual Private Network,虚拟专用网络) 这里并不是指科学上网,而是让员工更安全的访问公司内网数据的手段,常见于高校的教务系统登录当中。

但于传统 VPN 隧道不同的是,WireGuard 采用点对点连接,无服务端于客户端,谁先发起连接谁就是客户端。不仅如此,在 Linux 5.6 之后 WireGuard 被并入内核当中,其吞吐能力也是其他软件无法比拟的。还有就是,WireGuard 采用 UDP 连接,连接速度要更快,延迟更低,能够在网络故障恢复之后自动重连。

今天来发一个简单的docker安装WireGuard ,本教程使用的环境Debian / Ubuntu。

WireGuard 有一个坑(不管docker,还是自已徒手搭建),用DDNS动态IP模式电信的能连没数据访问不了内网或上网,只能ping 通自已的隧道IP。openwrt 端口转发也做了,如果你也出现这样情况,用Frp内网穿透。成功稳定性非常好。

另外长连接不建议使用DDNS 模式。掉了就得自行重连

?WireGuard 的应用

?安装docker+Docker-compose

Debian / Ubuntu

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
sudo apt-get update
sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common -y
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
sudo apt-get install docker-ce docker-ce-cli containerd.io -y
systemctl start docker
systemctl enable docker

安装Docker-compose

Docker-compose 版本只要改版本号就就可以安装最新的版本

查询:https://github.com/docker/compose/releases

1
2
3
curl -fsSL https://get.docker.com | bash -s docker
curl -L "https://github.com/docker/compose/releases/download/2.11.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

?安装Wireuard

Wireuard使用docker 或者 Docker-compose 安装

https://github.com/WeeJeWel/wg-easy

作者说:The easiest way to run WireGuard VPN + Web-based Admin UI.

主要的好处是有WEB UI好管理,简洁,多用户,比较稳定。不需要所谓的SSL加持。这一点最烦人。

我为什么要用Wireuard原因就是之前用 anylink 证书过期,自动没续上。整个中断了。数据拿不到,急死人。

VPN本身就是一般不用。一用就急事。在外地死活连不上内网。

创建docker数据保存文件夹

1
2
3
4
# frpc 内网穿透文件夹
mkdir -p /data/frp/
# wireguard文件夹
mkdir -p /data/wireguard

方法一:docker run 安装 请使用 root 用户安装

docker 就是好,如果装错了,也不用担心,删除原容器(自行google命令和方法),重新执行此命令。不破坏系统结构

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
docker run -d \
  --name=wg-easy \
  -e WG_HOST=IP或域名(Frpc内网域名) \
  -e PASSWORD=后台密码 \
  -v /data/wireguard:/etc/wireguard \
  -p 51820:51820/udp \
  -p 51821:51821/tcp \
  --cap-add=NET_ADMIN \
  --cap-add=SYS_MODULE \
  --sysctl="net.ipv4.conf.all.src_valid_mark=1" \
  --sysctl="net.ipv4.ip_forward=1" \
  --restart unless-stopped \
  weejewel/wg-easy

方法二:docker-compose.yml 安装 请使用 root 用户安装

需有一点 docker-compose 常识,不会的用方法一

 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
27
28
29
30
31
32
33
34
version: "3.8"
services:
  wg-easy:
    environment:
      # ⚠️ Required:
      # Change this to your host's public address
      - WG_HOST=IP或域名(Frpc内网域名)

      # Optional:
      - PASSWORD=后台密码
      - WG_PORT=51820
      # - WG_DEFAULT_ADDRESS=10.8.0.x
      # - WG_DEFAULT_DNS=1.1.1.1
      # - WG_MTU=1420
      - WG_ALLOWED_IPS=0.0.0.0/0, ::/0
      # - WG_PRE_UP=echo "Pre Up" > /etc/wireguard/pre-up.txt
      # - WG_POST_UP=echo "Post Up" > /etc/wireguard/post-up.txt
      # - WG_PRE_DOWN=echo "Pre Down" > /etc/wireguard/pre-down.txt
      # - WG_POST_DOWN=echo "Post Down" > /etc/wireguard/post-down.txt
      
    image: weejewel/wg-easy
    container_name: wg-easy
    volumes:
      - /data/wireguard:/etc/wireguard
    ports:
      - "51820:51820/udp"
      - "51821:51821/tcp"
    restart: unless-stopped
    cap_add:
      - NET_ADMIN
      - SYS_MODULE
    sysctls:
      - net.ipv4.ip_forward=1
      - net.ipv4.conf.all.src_valid_mark=1

安装成功后,管理地址为:

http://安装的服务IP:51821/

现在所有wireguard就已经安装成功了,如果有独立IP,或者DDNS有公网IP的宽带用户(记得将路由器 端口转发至自已刚刚建立的wireguard服务IP)。自已可以尝试链接一下。

如果使用DDNS 不成功,或者没有公网的就安装FRP继续往下走。

?安装FRP 内网穿透

FRPS 服务端 docker版安装

FRPS 一个有公网IP的 VPS服务器。需要自已去买,比方什么 阿里云,腾讯云等等

尽量选择 ubuntu debian ,按上面的方法安装docker

创建数据文件夹mkdir -p /data/frp/

方法一 安装服务端 start frps

1
docker run --restart=always --network host -d -v /data/frp/frps.ini:/etc/frp/frps.ini --name frps snowdreamtech/frps

方法二 docker-compose

1
2
3
4
5
6
7
8
9
version: "3"
services:
  serverstatus:
    image: snowdreamtech/frps:latest
    container_name: frps
    volumes:
      - /data/frp/frps.ini:/etc/frp/frps.ini
    restart: always
    network_mode: host

创建 frps.ini 文件,填入配置

.ini文件就是一个记事本,txt改扩展名为ini就好

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
[common]
bind_addr = 0.0.0.0
#与客户端 通讯绑定端口
bind_port = 0000

#dashboard 用户名
dashboard_user = user  
#dashboard 密码
dashboard_pwd = passwrod
#dashboard 端口,启动成功后可通过浏览器访问如http://ip:0000
dashboard_port = 0000  
#设置客户端token,对应客户端有页需要配置
token = 0000-0000-0000-0000-0000

#设置监听 HTTP 请求端口为 88/88 HTTP/S 类型的代理相比于 TCP 类型,不仅在服务端只需要监听一个额外的端口 vhost_http_port 用于接收 HTTP 请求,还额外提供了基于 HTTP 协议的诸多功能。

vhost_http_port = 00
vhost_https_port = 00
# 替换为自己的域名,*.XX.com 泛域名,域名解析为 *.xxx.com
subdomain_host = xx.xxx.com

FRPC 客户端 docker版安装

frpc 客户端为wireguard同一个服务器

方法一 安装 frpc 客户端

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

方法二 docker-compose

1
2
3
4
5
6
7
8
9
version: "3"
services:
  serverstatus:
    image: snowdreamtech/frpc:latest
    container_name: frpc
    volumes:
      - /data/frp/frpc.ini:/etc/frp/frpc.ini
    restart: always
    network_mode: host

创建 frpc.ini 文件,填入配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
[common]
server_addr = IP
server_port = 端口号
token = 配对token,与服务端一致

[WireGuard_51820]  
type = udp
local_ip = wireguard服务机内网IP
local_port = 51820  
#本地端口
remote_port = 51820
#frp 服务端监听的端口

此时已完成了。

在使用客户端连接时。记得将**【对端 】**填入相应的 内网穿透IP、域名、DDNS域名(如果可用)、公网IP 。图中红色部份

注意

退出移动版