如何在使用 wg setconfg 而不是 wg-quick 时添加 dns ro 解析 wireguard 端点

如何在使用 wg setconfg 而不是 wg-quick 时添加 dns ro 解析 wireguard 端点

遵循 wireguard 文档普通容器化它与以下配置文件类似:

# /etc/wireguard/wg0.conf
#
[Interface]
PrivateKey = AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=

[Peer]
PublicKey = BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB=
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = 11.111.111.111:51820
# Problem, using the following Endpoint won't work
# and the DNS entry is not allowed with wg setconf
# Endpoint = my.vpn.location.com:51820

问题是端点需要一个 IP,一旦它是一个域,wireguard 就无法在期间解析它link set gw0 up

由于在普通容器化中wg setconf使用时,接口部分不允许使用 DNS 和地址。

下面的方法wg-quick可以

# /etc/wireguard/wg0.conf
#
[Interface]
PrivateKey = AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
Address = 10.14.0.2/16
DNS = 123.456.789.01

[Peer]
PublicKey = BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB=
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = my.vpn.location.com:51820

wg-quick能够解析my.vpn.location.com,但如何告诉wg setconfg如何解析,my.vpn.location.com而不是必须对端点的 IP 进行硬编码?

注意:这是我用来设置的命令,其中wg setconfIP 端点可以工作,但不能与域一起工作。

# ip netns add container
# ip link add wg0 type wireguard
# ip link set wg0 netns container
# ip -n container addr add 10.14.0.2/16 dev wg0
# ip netns exec container wg setconf wg0 /etc/wireguard/wg0.conf
# ip -n container link set wg0 up
# ip -n container route add default dev wg0

正如所建议的,这个问题是从这里提出的网络工程.stackexchange

答案1

wg(8)记录它确实接受主机名,这意味着它将解析它们,包括使用 DNS(这是默认设置中的标准):

  • 端点 — 端点 IP或主机名,后跟冒号,然后是端口号。[...]

的确代码用途getaddrinfo(3)

  ret = getaddrinfo(begin, end, &hints, &resolved);

问题是因为该命令(wg但会发生相同的情况wg-quick)是在没有可用网络的环境中运行的:一个全新的容器,没有任何接口提供连接,因此依赖 DNS 的解析尝试只能在此步骤失败。


由于wg(与 不同wg-quick)不会触及地址或路由,而只会触及 WireGuard 属性,因此只需改变操作顺序:在 DNS 解析起作用的主机命名空间上配置接口的 WireGuard 属性,然后将其移动到目标命名空间,最后在那里完成其配置。这变成:

# ip netns add container
# ip link add wg0 type wireguard
# wg setconf wg0 /etc/wireguard/wg0.conf          # altered, was #5
# ip link set wg0 netns container                 # was #3
# ip -n container addr add 10.14.0.2/16 dev wg0   # was #4
# ip -n container link set wg0 up
# ip -n container route add default dev wg0

这将wg在主机而不是容器上运行,但最终结果是相同的:容器将具有单一wg0接口,并且该接口将仅在主机上有一个监听端口。

相关内容