前言
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)。自已可以尝试链接一下。
- Installation - WireGuard 软件客户端官网软件下载
- 支持中文,多国语言
- 支持 iOS,Android,windows,mac,linux,openwrt …. 多平台多系统支持
如果使用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内网穿透。这个是一个坑。严重怀疑和运营商有关。