2

Google Cloud Platform に内部 DNS ゾーンがdev.internalあり、VM の IP を指す A レコードは 10.0.0.17 です。ssh 経由で GCP VM ノード/サーバーにいる場合、pingdev.internalを実行すると、10.0.0.17 に解決されます。

ラップトップ マシンでワイヤガード ピアをセットアップしました。私のサーバー側の設定は次のとおりです。

[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.internalクライアント側では、VMのゾーンを解決して 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 転送を有効にする必要があり、VPN から受信したパケットをルーティングするように WireGuard を構成する必要があります。

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です。に指定された 2 つの 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」という名前の VM があると仮定するping my-vm-1と、VPC DNS サーバーがそのアドレスを解決できるようになります。

注: WireGuard が稼働している場合、すべての DNS トラフィックは VPN を介して流れ、Google Cloud DNS サーバーによって解決されます。WireGuard を無効にすると、DNS トラフィックはデフォルトのリゾルバーに流れます。

于 2021-03-16T02:29:13.437 に答える