⛑️前言
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 的应用
- 访问内网服务,eg:NAS 直接暴露在公网不安全,SMB 不能跨网段,使用 WireGuard 访问内网的 NAS。
- 多设备异地组网,eg:Minecraft 联机。
- …
🦉安装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 。图中红色部份
注意
- 使用 DDNS 时请注意,WireGuard 只会在启动时解析域名对应的 IP 地址,如果 IP 发生变动需要重启 WireGuard 或者改用 IP 连接
- DDNS模式可能不会成功,如果不行换端口,或者用FRP内网穿透。这个是一个坑。严重怀疑和运营商有关。