
VPCが2つあります
- VPC1 - デフォルトの Google サブネット
- VPC2 - VPC1 にない単一の追加サブネット
VPC1 の nic0 と VPC2 の nic1 を使用したサーバー (個別) のセットアップ
両方のNICに静的パブリックIP
- 外部からパブリック IP に ping を実行 -> VPC1 が動作中
- 外部からパブリック IP への ping -> VPC2 が機能しない
さらに 2 つのインスタンス insta と instb をセットアップします。1 つは VPC1 のみ、もう 1 つは VPC2 のみにインストールします。
- 外部からパブリック IP に ping を実行 -> VPC1 が動作中 (insta)
外部からパブリック IP に ping を実行 -> VPC2 が動作中 (instb)
instaからinstdual nic0にpingできます
instbからinstdual nic1にpingできる
instaからnic1のプライベートIPにpingできない
- instbからnic0のプライベートIPにpingできない
VPC はネットワーク ピアリングされており、ルートは正しく表示されます
ファイアウォールの問題を否定するために、ファイアウォールはデフォルトですべて許可ルールを設定します。
基本的に、個別には nic0 パブリック IP でのみアクセスできます。nic1 パブリック IP ではアクセスできません。
何かアイデアはありますか? 現時点ではコーヒーを 12 杯飲んでいて、二重に見えています。
答え1
欠けていたものは次のとおりです (現在は 100% 動作しています):
複数のインターフェースを持つ Linux ベースのインスタンスのポリシー ルーティングを構成するには、次の手順に従います。
- 複数のネットワーク インターフェースが構成されたインスタンスに接続します。
gcloud コンピューティング SSH マルチニック VM
- nic1 に対して ifconfig を使用してポリシー ルーティングを設定します。以下の例では、GCP が nic1 に内部 IP アドレス 192.168.0.2 を割り当てており、ゲートウェイが 192.168.0.1 であると想定しています。
sudo ifconfig eth1 192.168.0.2 ネットマスク 255.255.255.255 ブロードキャスト 192.168.0.2 mtu 1430
sudo echo "1 rt1" | sudo tee -a /etc/iproute2/rt_tables # (sudo su - 権限が拒否された場合は最初に実行)
sudo ip route add 192.168.0.1 src 192.168.0.2 dev eth1
sudo ip route add default via 192.168.0.1 dev eth1 table rt1
sudo ip rule add from 192.168.0.2/32 table rt1
sudo ip rule add to 192.168.0.2/32 table rt1
- インスタンス上の追加インターフェース (nic2、nic3、...、nic7) に対して手順 2 のコマンドを繰り返します。
答え2
Google Cloud には、これを行う方法に関するドキュメントがここにあります。https://cloud.google.com/vpc/docs/create-use-multiple-interfaces しかし、再起動後に追加のインターフェースが再び機能することを確認する方法についての情報が欠けています。
追加の外部 IP を永続的にするには、再起動後、追加のインターフェースがアクティブ化された後にのみ、ポリシー ルーティングをアクティブ化するコマンドが実行されるようにする必要があります。これは dhcp-client によって実行されます。そのため、私が見つけた最良の方法は、/etc/dhcp/dhclient-exit-hooks.d/ 内に次の内容を含むスクリプトを配置することです。
#!/bin/sh
#
if [[ $reason == "REBOOT" || $reason == "BOUND" ]] ; then
sudo ip route add 192.168.0.1 src 192.168.0.2 dev eth1
sudo ip route add default via 192.168.0.1 dev eth1 table rt1
sudo ip rule add from 192.168.0.2/32 table rt1
sudo ip rule add to 192.168.0.2/32 table rt1
fi
(IP を内部ネットワークの IP に変更します)
起動時にサーバー(nginxやhttpdなど)をこれらのIPの1つにバインドできるようにしたい場合、dhcp-clientがタスクを完了する前にサーバーが起動されるため、これが失敗することがわかります。これを解決する1つの方法は、実際にはまだアクティブではないIPにソフトウェアがバインドできるようにすることです。
net.ipv4.ip_nonlocal_bind=1
/etc/sysctl.d/10-policyrouting.conf に