3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

IBM CloudのVPN for VPC(Site-to-Siteタイプ)から入ってきた通信に対しVPCでNATを行う

Last updated at Posted at 2022-06-14

VPN for VPC(Site-to-Siteタイプ)でIBM Cloud環境に接続した後、さらに別の環境にアクセスしたいことがあります。
今回は、PowerVSにアクセスするケースを想定しています。
Direct LinkでIBM Cloudに接続した時の構成はこちらの記事に書きましたが、今回はVPN接続編です。

オンプレミスから最終的な接続先(PowerVS)に直接は行けない(それらへのルーティング情報はオンプレには広告されない)ので、VPCのVSIで、NATを行います。

オンプレ側で宛先に指定するIPアドレスは、VPCでユーザーが定義可能なセグメントから払い出されたものなので、オンプレ側とのIP重複を避けられます。

image.png

(この記事ではNAT定義周りにフォーカスし、オンプレミスとVPC間のIPsec接続と、x86とPowerVS間のCloud Connections[またはDL2.0]は事前に構成済みとします)

NAT GW用のVSIを作成

実際のNAT処理はVSIで行いますので、オーダーします。今回はCentOS 7.xで立てました。

image.png

NAT用サブネットを作成

NAT用IPアドレスとして使うためのサブネットを作成します。この例では、192.168.82.64/26としました。

image.png

VPC上でルーティング・テーブル設定

上記で作成したサブネットにアクセスがあった場合、NATゲートウェイとして立てるVSIにルーティングするよう、ルーティング・テーブルに定義します。

今回は、「オンプレからVPN for VPC経由で入ってくる通信(とその戻りの通信)」と、「VSIでNAT後、PowerVS用のDirect Linkに抜けていく通信(とその戻りの通信)」を制御したいです。

前者は、ルーティング・テーブルのトラフィック・タイプにEgressを選びます。直感的には外部からIPsecトンネルを通ってVPCに入ってくるのでIngressで制御したくなりますが、VPN GatewayはVPC上のプライベートIPアドレスを持っており、オンプレからIPsecトンネルを抜けて来たパケットは「VPC上のコンポーネントから送り出されるパケット」という扱いになるため、Egressで制御することができます。
後者は、トラフィック・タイプはIngress、トラフィック・ソースはDirect Linkを選びます。

EgressもIngressも、宛先CIDRは上記で作成したNAT用サブネットです。ネクスト・ホップには、上記で立てたNAT GW用VSIのIP(今回は192.168.82.4)を指定します。もしNAT GWが壊れてVSIを再作成してIPが変わったとしても、このネクスト・ホップを新しいIPに書き換えることで比較的簡単に対応できると思います。(あるいは最初からNAT GWを2台立てておいて、障害時にネクスト・ホップを切り替えるスクリプトを用意しておくとか。)

これで、このNAT用サブネット宛に来たパケットはNAT GW用VSIにルーティングされるようになりました。

【VPN for VPC用(Egress)】
image.png

【PowerVSとの通信用(Ingress)】
image.png

NAT GW設定

NAT GW用VSIがNATを行えるよう設定します。
まず、VSIのネットワーク・インターフェース定義で、「IP スプーフィングを許可」を有効にします。
image.png

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に定義します。
前の手順のルーティング・テーブルの設定により、192.168.82.64/26宛のパケットはこのVSIにルーティングされて来ますので、それを受けられるように、この範囲のIPを付けます。今回は192.168.82.70を付与します。

# ip addr add 192.168.82.70/32 dev lo

firewalldをenable/startします。

# systemctl enable firewalld
# systemctl start firewalld

Destination NAT先として、まずはPowerVSに立てたAIXのIP(192.168.150.195)を指定します。
AIXからの戻りパケットが戻ってこられるよう、Source NATも設定します。
また、sshの22番ポートを許可する設定も入れます。

# firewall-cmd --permanent --direct --add-rule ipv4 nat PREROUTING 0 -d 192.168.82.70 -j DNAT --to-destination 192.168.150.195
success
# firewall-cmd --permanent --direct --add-rule ipv4 nat POSTROUTING 0 -o eth0 -j SNAT --to 192.168.82.70
success
# firewall-cmd --direct --add-rule ipv4 filter FWDO_public_allow 0 -m tcp -p tcp --dport 22 -j ACCEPT
success
# firewall-cmd --reload
success
# 
設定内容確認
# firewall-cmd --direct --get-all-rules
ipv4 nat POSTROUTING 0 -o eth0 -j SNAT --to 192.168.82.70
ipv4 filter FWDO_public_allow 0 -m tcp -p tcp --dport 22 -j ACCEPT
ipv4 nat PREROUTING 0 -d 192.168.82.70 -j DNAT --to-destination 192.168.150.195
#

アクセス確認

オンプレ側から192.168.82.70にアクセスすると、NATされて192.168.150.195のPowerVSにアクセスできます。

オンプレ側からNAT用IPにping
# ping 192.168.82.70
PING 192.168.82.70 (192.168.82.70) 56(84) bytes of data.
64 bytes from 192.168.82.70: icmp_seq=1 ttl=242 time=11.6 ms
64 bytes from 192.168.82.70: icmp_seq=2 ttl=242 time=11.9 ms
NAT GWでのtcpdump(ping 1往復分)
# tcpdump host 192.168.82.70 -n
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
21:30:44.949833 IP 192.168.72.4 > 192.168.82.70: ICMP echo request, id 12387, seq 1, length 64 ←オンプレサーバーからNAT用IP
21:30:44.949885 IP 192.168.82.70 > 192.168.150.195: ICMP echo request, id 12387, seq 1, length 64 ←NAT GWでDNAT&SNATして、PowerVSに転送
21:30:44.951465 IP 192.168.150.195 > 192.168.82.70: ICMP echo reply, id 12387, seq 1, length 64 ←PowerVSからNAT GWへの戻り
21:30:44.951474 IP 192.168.82.70 > 192.168.72.4: ICMP echo reply, id 12387, seq 1, length 64 ←NAT GWからオンプレへの戻り

NAT GW上でSource NATしているため、AIX上で確認すると、パケットは192.168.82.70から来ています。

オンプレから192.168.82.70にpingしている時のAIX上のtcpdump
# tcpdump -ni 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
17:00:01.423033 IP 192.168.82.70 > 192.168.150.195: ICMP echo request, id 12632, seq 18, length 64
17:00:01.423049 IP 192.168.150.195 > 192.168.82.70: ICMP echo reply, id 12632, seq 18, length 64
17:00:02.425004 IP 192.168.82.70 > 192.168.150.195: ICMP echo request, id 12632, seq 19, length 64
17:00:02.425021 IP 192.168.150.195 > 192.168.82.70: ICMP echo reply, id 12632, seq 19, length 64
オンプレ側からNAT用IPにSSHアクセス
# # ssh -l root 192.168.82.70
Last login: Tue Jun 14 06:25:03 CDT 2022 on /dev/pts/2 from 192.168.82.70
*******************************************************************************
*                                                                             *
*                                                                             *
*  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.                                  *
*                                                                             *
*                                                                             *
*******************************************************************************
# 

PowerVSのLPARが複数ある場合

PowerVSのLPARが複数ある場合、lo interfaceへのIPアドレス定義を追加し、NATルールを追加することで、対応可能です。
この例では、PowerVSに192.168.150.216のLPARをもう1つ立て、NAT用アドレスとして、NAT用サブネット(192.168.82.64/26)の中から、192.168.82.71をNAT GW上に定義追加しています。

image.png

# ip addr add 192.168.82.71/32 dev lo
# firewall-cmd --permanent --direct --add-rule ipv4 nat PREROUTING 0 -d 192.168.82.71 -j DNAT --to-destination 192.168.150.216
success
# firewall-cmd --reload
success
# firewall-cmd --direct --get-all-rules
ipv4 nat POSTROUTING 0 -o eth0 -j SNAT --to 192.168.82.70
ipv4 filter FWDO_public_allow 0 -m tcp -p tcp --dport 22 -j ACCEPT
ipv4 nat PREROUTING 0 -d 192.168.82.70 -j DNAT --to-destination 192.168.150.195
ipv4 nat PREROUTING 0 -d 192.168.82.71 -j DNAT --to-destination 192.168.150.216
# 

オンプレミスから192.168.82.70にアクセスした時と192.168.82.71にアクセスした時で、アクセス先AIXが異なっている。

# ssh -l root 192.168.82.70
Last login: Tue Jun 14 17:27:59 CDT 2022 on /dev/pts/1 from 192.168.82.70
*******************************************************************************
*                                                                             *
*                                                                             *
*  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.                                  *
*                                                                             *
*                                                                             *
*******************************************************************************
# hostname
aix-tmgw01
# ifconfig en1
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
# exit
Connection to 192.168.82.70 closed.
# ssh -l root 192.168.82.71
Last login: Tue Jun 14 17:02:57 CDT 2022 on /dev/pts/1 from 192.168.82.70
*******************************************************************************
*                                                                             *
*                                                                             *
*  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.                                  *
*                                                                             *
*                                                                             *
*******************************************************************************
# hostname
aix-tmgw-02
# ifconfig en1
en1: flags=1e084863,814c0<UP,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST,GROUPRT,64BIT,CHECKSUM_OFFLOAD(ACTIVE),LARGESEND,CHAIN>
        inet 192.168.150.216 netmask 0xffffff00 broadcast 192.168.150.255
         tcp_sendspace 262144 tcp_recvspace 262144 rfc1323 1
# exit
Connection to 192.168.82.71 closed.
# 

以上です。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?