在什么情况下,wireguard 会使用 /etc/wireguard/ 下的文件?我想在 kubernetes 上强化我的 wireguard 设置。具有 NET_ADMIN 功能和已安装的 wireguard 配置的 init 容器用于使用 wg-quick 配置 wireguard 网络接口 (wg0)。完成后,将启动另一个没有访问 wireguard 配置和 NET_ADMIN 功能的容器 (main) 来为对等方提供服务。它可以工作,但我想了解它为什么以及何时会失败,特别是在什么情况下需要包括私钥在内的配置。
参考和设置
- k8s 初始化容器
- 使用 kubenet 和 calico 在 Azure Kubernetes 服务上运行
- 使用的图片:
FROM alpine RUN apk update && apk add wireguard-tools
答案1
总结
/etc/wireguard/下的文件在什么情况下会被wireguard使用?
当您(手动)或脚本或 cron 或 systemd 单元(等)运行wg setconf|addconf|syncconf
或wg-quick
传递接口名称或配置文件路径时。
...特别是在什么情况下需要包括私钥在内的配置。
当您想要配置和启动 wg 接口时,需要包括私钥在内的配置。通常在启动时或第一次配置 wg 接口时。接口启动后,您可以从磁盘中删除配置文件...但如果您重新启动,您将再次需要配置以恢复接口。
细节
有 2 种配置格式。config wg-quick
是 的超集wg
。
wg-quick
只是一个 bash 脚本,它过滤掉自己的配置以生成wg
兼容的配置文件,同时处理更轻松启动 wireguard 接口所需的所有ip addr
、ip route
、等命令。iptables
wg-quick
根据手册页对于 wg-quick:
wg-quick [ up | down | save | strip ] [ CONFIG_FILE | INTERFACE ]
CONFIG_FILE
是一个配置文件,其文件名是接口名称后跟.conf
。否则,INTERFACE
是接口名称,配置位于/etc/wireguard/INTERFACE.conf
,首先搜索,然后是特定于发行版的搜索路径。
因此对于wg-quick
...
当您运行时,配置文件就会被加载wg-quick
。
如果您提供了配置文件路径,它将采用该路径作为接口名称(例如,/opt/wireguard20.conf
传递给wg-quick
将创建名称为 的接口wireguard20
)。
如果您提供的是接口名称(例如wg99
)而不是文件路径,wg-quick 将会进行查找/etc/wireguard/wg99.conf
(也可能是在其他一些目录中)。
工作组
根据手册页为了wg
:
配置文件名仅指定用于:
wg setconf
wg addconf
wg syncconf
如果您不运行其中一个命令,则接口的配置不会更新。您可以使用wg show
或读取当前配置wg showconf
。
帮助wg-quick
脚本用途 wg setconf
一旦它剥离了wg-quick
特定的配置。
私钥问题
你根本不需要把私钥放入配置文件中。你可以调用wg set ...
几乎所有的配置。例如wg set private-key <file-path>
来自wg 手册页:
private-key
和都preshared-key
必须是文件,因为在大多数系统上命令行参数不被视为私有的,但如果您使用 bash(1),则可以通过指定为private-key
或preshared-key
表达式来安全地传入字符串:<(echo PRIVATEKEYSTRING)
。
因此,一旦您配置了接口,您就不需要私钥,直到再次重新启动,因为接口需要在重新启动时启动和配置。
如果您已启用[email protected]
在重启后保留接口,则所做的一切就是调用wg-quick wg0
它,然后期望在中找到所需的一切(包括私钥)/etc/wireguard/wg0.conf
。该单元文件支持启动/停止(无需重新加载),因此仅在启动时读取配置(如果您手动或通过重启执行此操作)。
启动 wg 界面的 systemd 单元应该以 root 身份运行,因此私钥当然可以位于 root 拥有的 600 perm 文件中。
如果这对您来说还不够安全,请注意任何具有系统根访问权限的人都可以运行wg show wg0 private-key
...因此,一旦在界面上配置,您将无法向根隐藏私钥。