2

我在 Google Cloud Platform 上有一个内部 DNS 区域,其 A 记录dev.internal指向 VM 的 IP,例如 10.0.0.17。当我通过 ssh 在 GCP VM 节点/服务器上时,我可以 pingdev.internal并解析为 10.0.0.17。

我现在用我的笔记本电脑设置了一个wireguard peer。我的服务器端设置是:

[Interface]
Address = 192.168.69.1/24
ListenPort = 51820
PrivateKey = SERVER_KEY
PostUp = iptables -A FORWARD -i wg0 -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens4 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -o wg0  -j ACCEPT; iptables -t nat -D POSTROUTING  -o ens4 -j MASQUERADE

[Peer]
PublicKey = CLIENT_KEY
AllowedIPs = 192.168.69.2
PersistentKeepalive = 25

我的客户端(笔记本电脑-我使用的是 Ubuntu 20.01)设置是

[Interface]
Address = 192.168.69.2/32
PrivateKey = CLIENT_PRIVATE_KEY
DNS = 192.168.69.1

[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = 35.XX.XX.XX:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 21

我确认客户端和服务器对等点已启动,我从客户端转到 ifconfig.co 或 whatsmyip,它显示了 35.XX.XX.XX(服务器)IP。

在客户端,我现在想通过dev.internalVM 上的区域解析来访问 10.0.0.17 IP。

ping dev.internal
ping: dev.internal: Name or service not known

我需要在客户端或服务器上设置什么,以便客户端能够解析内部区域指向的 IP?

在 Google Cloud 上,内部解析器位于 169.254.169.254。

我已经在客户端中尝试过,DNS = 192.168.69.1并且得到了相同的结果。

4

1 回答 1

1

要通过 WireGuard VPN 解析 VPC 内的主机名,需要创建 Google Cloud DNS 策略并在 WireGuard 中配置 VPC DNS 服务器 IP 地址。

步骤 1. 创建入站 DNS 服务器策略

gcloud dns policies create NAME ^
    --description=DESCRIPTION ^
    --networks=VPC_NETWORK_LIST ^
    --enable-inbound-forwarding

应用该策略会在每个 VPC 子网中分配一个 DNS IP 地址。要查看这些地址:

gcloud compute addresses list ^
--project [PROJECT_ID] ^
--filter="purpose = \"DNS_RESOLVER\"" ^
--format="csv(address, region, subnetwork)"

记下您的实例所在或离您最近的区域的 IP 地址。

步骤 2. 配置在 VPC 中运行的 Wireguard。

在以下示例中:

  • 192.168.9.x 是 WireGuard VPN CIDR
  • 10.138.xx 是 VPC CIDR
  • 10.0.0.x 是本地网络 CIDR。
  • ens4 是 Ubuntu 中的 VM 以太网适配器。Centos 通常是 eth0。

VPC 中的 VM 实例需要启用 IP 转发(在创建实例时),并且必须将 WireGuard 配置为路由从 VPN 接收的数据包。

sysctl -w net.ipv4.ip_forward=1
iptables -D FORWARD -i wg0 -j ACCEPT
iptables -t nat -D POSTROUTING -o ens4 -j MASQUERADE

VPC 端:在 wg0.conf 中配置 WireGuard 转发数据包

[Interface]
PrivateKey = ...
ListenPort = 51820
Address = 192.168.9.1/24

[Peer]
PublicKey = ...
AllowedIPs = 192.168.9.2/32, 10.138.0.0/16
Endpoint = 34.45.56.67:51820
PersistentKeepalive = 30

远程端:DNS 值来自gcloud compute addresses list. 请注意为 指定的两个 CIDR AllowedIPs = 192.168.9.1/32, 10.138.0.0/16

[Interface]
PrivateKey = ...
ListenPort = 51820
Address = 192.168.9.2/24
DNS = 10.138.0.16

[Peer]
PublicKey = ...
AllowedIPs = 192.168.9.1/32, 10.138.0.0/16
Endpoint = 34.45.56.67:51820
PersistentKeepalive = 30

假设您在 VPC 中有一个名为“my-vm-1”的虚拟机,您现在可以ping my-vm-1并且 VPC DNS 服务器将解析该地址。

注意:当 WireGuard 启动并运行时,所有 DNS 流量都将通过 VPN 并由 Google Cloud DNS 服务器解析。当您停用 WireGuard 时,DNS 流量将流向默认解析器。

于 2021-03-16T02:29:13.437 回答