はじめに
Direct Link2.0でIBM Cloud環境に接続した後、さらに別の環境にアクセスしたいことがあります。
例えば、Power VSや、Transit Gateway経由で別アカウントにある環境にアクセスするケースを想定しています。
オンプレミスから最終的な接続先(Power VSや、アカウント2のClassic環境)に直接は行けない(それらへのルーティング情報はオンプレには広告されない)ので、アカウント1のVPCで、NATを行います。
オンプレ側で宛先に指定するIPアドレスは、VPCでユーザーが定義可能なセグメントから払い出されたものなので、オンプレ側とのIP重複を避けられます。
NAT GW用のVSIを作成
実際のNAT処理はVSIで行いますので、オーダーします。今回はCentOSで立てました。
NAT用サブネットを作成
NAT用IPアドレスとして使うためのサブネットを作成します。
VPC上でルーティング・テーブル設定
上記で作成したサブネットにアクセスがあった場合、NATゲートウェイとして立てるVSIにルーティングするよう、ルーティング・テーブルに定義します。
今回は、「オンプレからDirect Link経由で入って来てTransit Gatewayに抜けていく通信(とその戻りの通信)」「オンプレからDirect Link経由で入って来てPower VS用のDirect Linkに抜けていく通信(とその戻りの通信)」を制御したいので、トラフィック・タイプはIngress、トラフィック・ソースはDirect LinkとTransit Gatewayを選びます。
ルーティング・テーブルに経路を作成します。
宛先CIDRは上記で作成したNAT用サブネットです。ネクスト・ホップには、上記で立てたNAT GW用VSIのIPを指定します。もしNAT GWが壊れてVSIを再作成してIPが変わったとしても、このネクスト・ホップを新しいIPに書き換えることで比較的簡単に対応できると思います。(あるいは最初からNAT GWを2台立てておいて、障害時にネクスト・ホップを切り替えるスクリプトを用意しておくとか。)
これで、このNAT用サブネット宛のパケットはNAT GW用VSIにルーティングされるようになりました。
NAT GW設定
NAT GW用VSIがNATを行えるよう設定します。
まず、VSIのネットワーク・インターフェース定義で、「IP スプーフィングを許可」を有効にします。
kernel parameterでip_forwardを許可するため、/etc/sysctl.d/nat.confファイルに「net.ipv4.ip_forward = 1」を記述し、sysctlコマンドで反映します。
# cat /etc/sysctl.d/nat.conf
net.ipv4.ip_forward = 1
# sysctl -p /etc/sysctl.d/nat.conf
net.ipv4.ip_forward = 1
#
次に、NAT用のIPアドレスを、NAT GWのVSIのlo interfaceに定義します。
前の手順のルーティング・テーブルの設定により、172.16.50.96/27宛のパケットはこのVSIにルーティングされて来ますので、それを受けられるように、この範囲のIPを付けます。今回は172.16.50.100を付与します。
# ip addr add 172.16.50.100/32 dev lo
firewalldをenable/startします。
# systemctl enable firewalld
# systemctl start firewalld
Destination NAT先として、まずはPower VSに立てたAIXのIP(192.168.150.195)を指定します。(x86とPower VS間のDL2.0は事前に構成済みとします)
AIXからの戻りパケットが戻ってこられるよう、Source NATも設定します。
# firewall-cmd --permanent --direct --add-rule ipv4 nat PREROUTING 0 -d 172.16.50.100 -j DNAT --to-destination 192.168.150.195
success
# firewall-cmd --permanent --direct --add-rule ipv4 nat POSTROUTING 0 -o eth0 -j SNAT --to 172.16.50.100
success
# firewall-cmd --reload
success
#
# firewall-cmd --direct --get-all-rules
ipv4 nat PREROUTING 0 -d 172.16.50.100 -j DNAT --to-destination 192.168.150.195
ipv4 nat POSTROUTING 0 -o eth0 -j SNAT --to 172.16.50.100
#
アクセス確認
オンプレ側から172.16.50.100にアクセスすると、NATされて192.168.150.195のPower VSにアクセスできます。
# ssh -l root 172.16.50.100 -i ./.ssh/id_key
14362 unsuccessful login attempts since last login.
Last unsuccessful login: Fri Oct 8 01:27:49 CDT 2021 on ssh from 121.125.73.25
Last login: Tue Oct 5 10:26:58 CDT 2021 on /dev/pts/2 from 172.16.50.100
*******************************************************************************
* *
* *
* Welcome to AIX Version 7.2! *
* *
* *
* Please see the README file in /usr/lpp/bos for information pertinent to *
* this release of the AIX Operating System. *
* *
* *
*******************************************************************************
# ifconfig -a
(略)
en1: flags=1e084863,814c0<UP,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST,GROUPRT,64BIT,CHECKSUM_OFFLOAD(ACTIVE),LARGESEND,CHAIN>
inet 192.168.150.195 netmask 0xffffff00 broadcast 192.168.150.255
tcp_sendspace 262144 tcp_recvspace 262144 rfc1323 1
NAT GW上でSource NATしているため、AIX上で確認すると、パケットは172.16.50.100から来ています。
# tcpdump -i en1 icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on en1, link-type EN10MB (Ethernet), capture size 262144 bytes
01:31:57.524877 IP 172.16.50.100 > 192.168.150.195: ICMP echo request, id 268, seq 0, length 64
01:31:57.524900 IP 192.168.150.195 > 172.16.50.100: ICMP echo reply, id 268, seq 0, length 64
01:31:58.511213 IP 172.16.50.100 > 192.168.150.195: ICMP echo request, id 268, seq 1, length 64
01:31:58.511236 IP 192.168.150.195 > 172.16.50.100: ICMP echo reply, id 268, seq 1, length 64
Transit Gateway経由で別アカウントのClassic環境と接続
Transit Gateway経由で別アカウント(冒頭の図のアカウント2)にあるサーバー宛の通信も、同様に設定できます。
事前にアカウント2側でTransit Gatewayを作成し、アカウント1のVPCと接続しておきます。あとは上記と同様のNAT設定で、オンプレ -> アカウント1のVPCでNAT -> アカウント2のClassic の通信が実現できます。
以上です。