WireGuard 教程:使用 DNS-SD 进行 NAT-to-NAT 穿透 (4)

我们可以使用 base64 和 base32 命令来回转换编码格式,例如:

$ wg genkey | wg pubkey > pub.txt $ cat pub.txt O9rAAiO5qTejOEtFbsQhCl745ovoM9coTGiprFTaHUE= $ cat pub.txt | base64 -D | base32 HPNMAARDXGUTPIZYJNCW5RBBBJPPRZUL5AZ5OKCMNCU2YVG2DVAQ==== $ cat pub.txt | base64 -D | base32 | base32 -d | base64 O9rAAiO5qTejOEtFbsQhCl745ovoM9coTGiprFTaHUE=

我们可以直接使用 base32 这种不区分大小写的公钥编码,来使其与 DNS 兼容。

编译插件

CoreDNS 提供了,插件必须要实现 plugin.Handler 接口:

type Handler interface { ServeDNS(context.Context, dns.ResponseWriter, *dns.Msg) (int, error) Name() string }

我自己已经写好了插件,通过 DNS-SD(DNS-based Service Discovery)语义来提供 WireGuard 的 Peer 信息,该插件名就叫 wgsd。自己编写的插件不属于官方内置插件,从 CoreDNS 官方下载页下载的可执行程序并不包括这两个插件,所以需要自己编译 CoreDNS。

编译 CoreDNS 并不复杂,在没有外部插件的情况下可以这么编译:

$ git clone https://github.com/coredns/coredns.git $ cd coredns $ make

如果要加上 wgsd 插件,则在 make 前,要修改 plugin.cfg 文件,加入以下一行:

wgsd:github.com/jwhited/wgsd

然后开始编译:

$ go generate $ go build

查看编译好的二进制文件是否包含该插件:

$ ./coredns -plugins | grep wgsd dns.wgsd

编译完成后,就可以在配置文件中启用 wgsd 插件了:

.:53 { wgsd <zone> <wg device> }

可以来测试一下,配置文件如下:

$ cat Corefile .:53 { debug wgsd fuckcloudnative.io. wg0 }

运行 CoreDNS:

$ ./coredns -conf Corefile .:53 CoreDNS-1.8.1 linux/amd64, go1.15,

当前节点的 WireGuard 信息:

$ sudo wg show interface: wg0 listening port: 52022 peer: mvplwow3agnGM8G78+BiJ3tmlPf9gDtbJ2NdxqV44D8= endpoint: 3.3.3.3:8888 allowed ips: 10.0.0.2/32

下面就是见证奇迹的时候,列出所有 Peer:

$ dig @127.0.0.1 _wireguard._udp.fuckcloudnative.io. PTR +noall +answer +additional ; <<>> DiG 9.10.6 <<>> @127.0.0.1 _wireguard._udp.fuckcloudnative.io. PTR +noall +answer +additional ; (1 server found) ;; global options: +cmd _wireguard._udp.fuckcloudnative.io. 0 IN PTR TL5GLQUMG5VATRRTYG57HYDCE55WNFHX7WADWWZHMNO4NJLY4A7Q====._wireguard._udp.fuckcloudnative.io.

查询每个 Peer 的 IP 和端口:

$ dig @127.0.0.1 TL5GLQUMG5VATRRTYG57HYDCE55WNFHX7WADWWZHMNO4NJLY4A7Q====._wireguard._udp.fuckcloudnative.io. SRV +noall +answer +additional ; <<>> DiG 9.10.6 <<>> @127.0.0.1 TL5GLQUMG5VATRRTYG57HYDCE55WNFHX7WADWWZHMNO4NJLY4A7Q====._wireguard._udp.fuckcloudnative.io. SRV +noall +answer +additional ; (1 server found) ;; global options: +cmd tl5glqumg5vatrrtyg57hydce55wnfhx7wadwwzhmno4njly4a7q====._wireguard._udp.fuckcloudnative.io. 0 IN SRV 0 0 8888 TL5GLQUMG5VATRRTYG57HYDCE55WNFHX7WADWWZHMNO4NJLY4A7Q====.fuckcloudnative.io. TL5GLQUMG5VATRRTYG57HYDCE55WNFHX7WADWWZHMNO4NJLY4A7Q====.fuckcloudnative.io. 0 IN A 3.3.3.3

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zydgwd.html