#> RESTKHZ _

休止千鹤 | 我依旧是一名平凡的学生

Wireguard-easy: 一个基于docker的wireguard管理面板的上手

  休止千鹤  |    18/06/2021

缘起

自己的网络服务正在越来越多. 私有网盘, 札记, Todolist, 相册, 邮箱…甚至有账本, 密码管理工具等等.

如此多的私密服务让我感到十分不安, 因为之前他们中的一部分曾经被我映射到公网上进行使用. 而公网危机四伏. 当你读到这句话的时候, 这台服务器很可能就在被各种扫描器从各种角度”视奸”. 而我的SMTP服务正在一刻不停的受到来自全球IP的暴力破解. 也就是说, 随着服务的增多, 攻击面的扩大, 我的个人信息越来越不安全. 并且, 我的服务器运行在我自己的住处, 被入侵后直接可以进入我日常生活的网络, 就像房间有陌生人能随意出入一样.

于是我使用了wireguard来保护我的通信. 我不再把内网服务暴露出来, 而是我在需要的时候自己进入内网.

但是随着设备的增加, 每次生成秘钥, Copy秘钥, 重复且繁琐的机械工作并不是一件愉快的事情. 于是我决定试着使用一下Wireguard管理面板:

Github: Wireguard-easy

(来自github项目Readme)

功能

就我用下来的体会, 这并不是一个成熟完善的项目, 而只是一个精巧的小工具.
这个项目依旧存在一些问题, 功能并不完善. 我是在后面进行了一些修改后才达到了预期
所以, 这并非开箱即用, 各位读者请多考虑.

  1. 提供密码保护的web UI, UI设计美观.
  2. 自动创建带有preshared-key的配置文件, 可以使用二维码扫描或者下载配置文件的方式获取配置信息.
  3. 可以随时启用禁用某个客户端.

wg-easy密码验证

其缺点:

  1. 功能就以上那些了, 没了, 对.
  2. 不能在配置文件中轻松配置访问来源, 也就是说, 这个web UI默认也是面向公网. 防护仅靠你设置的密码. 那么你必须需要一个相当长,复杂且无规律的密码. (其实可以解决, 看后文)
  3. udp端口配置依旧存在缺陷, docker-compose.yml中修改后并没有什么作用. WEB UI端口实际上在config.js留了参数但是并没有在文档中公开.(有没有用不知道, 希望这里我没弄错. 但是也有别的方法可以解决这个问题.)
  4. 创建客户端后无法在其UI编辑任何信息, 包括tag.
  5. 无法在WebUI中手动指定其静态IP, 此外, 除非下载, 或者你可以直接阅读二维码, 那么你甚至不知道其生成的IP到底是什么. 这点对于内网组网相当的不友好.

综上, 和Subspace比起来, 读者, 就是你, 安装哪个请自行考量. 对于我嘛, 又不是不能用

安装

如果你已经安装好了 Docker, 那么安装过程非常简单. 以下命令来自其项目readme.md

$ mkdir ~/.wg-easy
$ cd ~/.wg-easy
$ wget https://raw.githubusercontent.com/WeeJeWel/wg-easy/master/docker-compose.yml
$ vim docker-compose.yml

然后我们来运行它

sudo docker-compose up --detach

至于docker-compose.yml的内容, env参数的使用, 请去阅读其项目readme. 对, 我懒, 懒得抄XD.

适配&&一些问题

wg-easy

(第一个用于测试的wg配置)

导入原来的密钥

想用起来的过程并不是非常顺利. 由于我UDP端口已经有指定, 秘钥也在多个服务器已经有了部署, 所以我不能接受其自己生成的新的秘钥.

我需要将其生成的秘钥替换成我自己已经有了的秘钥对. 可惜这个工具不支持上传.

如果你是按照其Readme.md文档配置的, 那么其配置文件就在~/.wg-easy之下的wg0.json中. 修改wg0.conf无效, 它是被自动生成的文件.

哦, 对了, 如果你要修改Tag等等也是在wg0.json中进行更改.

你可以复制之前的秘钥, 粘贴进wg0.json进行覆盖. preshared key可以不管.

UDP节点监听端口无法修改的问题

另一个就是监听UDP端口的问题. wg-easy默认监听51820, 在docker-compose.yml中WG_PORT这一配置修改后依旧无效. 你甚至能在其项目文件中找到被硬编码的51820这个数字.

我的解决方法是直接在docker-compose.yml中的ports把映射写成:"<port>:51820/udp"解决的这个问题.

Wireguard: Address unreachable 问题

这个被我遗忘了, 不得不提一下, 在服务器上需要设置一下PersistentKeepalive这一项.
Wireguard-easy居然也没有生成这个. (懒得吐槽了)
因为我的服务器在我自己房间里, 在NAT和防火墙之后. 因为长时间没有流量的时候会被NAT”遗忘”而造成Address unreachable, 导致服务器”消失了”. 不过别的终端这点无所谓.

请参见Wireguard: Quick start
或者Archlinux wiki: Unable to establish a persistent connection behind NAT / firewall

屏蔽公网访问Web UI

这个着实有点tricky了, 因为Wireguard转发后流量是从容器内的UDP端口出来, 而不是从宿主机进入.

什么意思呢? 你看了我怎么做就懂了.

所以我直接在docker-compose.yml中修改了映射: <port>:51821/tcp(把容器的51821端口映射到<port>) , 然后用宿主机的防火墙Block了<port>端口, 也就是说, 不可能从公网通过宿主机访问这个WebUI了. 然而你在内网的时候, 流量是从UDP端口直接进入容器访问其51821的, 所以只能进入内网才能访问WebUI.

此时你甚至可以在宿主机屏蔽掉所有端口, 仅仅暴露一个不起眼的, 随意的UDP端口.

到这里, 我的目的已经达到了. 现在我们可以把分布在异地的服务都保护在了自己的内网之中. 把一扇扇门堵上, 指留一扇小小的UDP防盗门.

嗯,
“又不是不能用”


Views:

 Comments


站元素主机:

赞一个 感谢分享

 Reply


severus:

赞一个

 Reply