ぶろとよ

ネットワーク系クラウドエンジニア(AWS)の技術ブログ。自動化に興味があるためAWS CLIを勉強&アウトプット中。

AWS~自宅ルータNAT経由~YAMAHA RTX810でSite-to-Site VPN接続する

最近、現場でオンプレミスとAWSとのVPN接続を担当することが多くなったのですが、AWS側ばかり担当しているのでオンプレミス側ネットワーク機器の設定があんまり解っていない・・・。

そんなこんなから自宅NetworkでもAWSとVPN接続してみたい、ネットワーク機器側での設定や出力を見てみたいと思い立ち、中古のYAMAHA RTX810を購入してみました!頑張ってVPN接続してみます。

構築方法はGUIとAWS CLIの両方を書くようにしています。


構成図

※IPアドレス等は実際に利用したものを記載しています。VPN構成はもう削除してあるため、リソースはリリース済みです。

目次

検証環境

  • 検証日: 2022/8/27
  • PC環境:
    • Windows10 Home Ver21H1
      • Google Chrome: バージョン: 100.0.4896.127(Official Build) (64 ビット)
  • ネットワーク環境
    • 構成図を参照

注意事項

  • 本記事のAWS CLIは東京リージョンCloudShellで検証しています。
  • コマンド内の変数やパラメータやは検証で使用したものを記載しています。ご自身の環境に合わせ、書き換えて使用してください。
  • 個人で検証しているため実行結果に責任は持てません。必ずご自身でも検証してから使用してください。


1. 自宅Routerの設定

自宅Routerは「NEC Aterm WG2600HS2」を使用しています。
VPN接続に関係のある設定項目だけを記載します。

1.1. 動作モード(WAN側の接続方法)

最初にハマったのですが、我が家では動作モードをIPv6接続の「クロスパス(Xpass)」にしていたため、ポートマッピング機能が使えず、VPN接続ができませんでした。

動作モードを「PPPoEルータ」にすることで、ポートマッピング機能が使えるようになり、VPN接続が使えるようになりました。

・・・ただし、クロスパスの方が通信速度出るのでVPN検証が終わったらクロスパスに戻してます(汗)

www.aterm.jp


1.2. VPNパススルー機能

今回、「AWS ~ 自宅Routerを経由 ~ YAMAHA RTX810」でVPNを接続するため、自宅RouterでVPNパススルーが有効になっている必要があります。

ただ、自宅Routerの「NEC Aterm WG2600HS2」ではデフォルトでVPNパススルー機能が有効になっているため、気にする必要はありませんでした。

www.aterm.jp


1.3. ポートマッピング設定

「AWS ~ 自宅Routerを経由 ~ YAMAHA RTX810」でのIPsec接続をするために、自宅Routerでポートマッピング設定(ポート転送)を行う必要があります。

■ 設定方法 URL先の「設定例2」に設定例があります。 www.aterm.jp

■ 追加する転送設定

転送先のLAN側IP プロトコル ポート番号 用途
192.168.0.2 UDP 500 IKE(isakmp)
192.168.0.2 UDP 4500 IPsec NAT-Traversal※1

※1:IPsec - NATトラバーサルとは(仕組み)


1.4. 自宅RouterのGlobal IPは可変です

一般家庭用のひかり回線を利用していますし、流石にそこまでお金掛けたくないので、Global IPは可変です。再起動等で再接続するたびに変わります。

そのため、VPN接続は繋ぎっぱなしにせず、検証のたびに作り直しています。

※この記事はそのための備忘です。


2. AWSの設定

AWS Site-to-Site VPNの設定方法は、AWSドキュメントを参考に作成していきます。

docs.aws.amazon.com

2.1. VPC/サブネット/EC2

下記のAWSリソースは作成済みのものを利用。

AWSリソース Name CIDR/IP 用途
VPC blog-P1x-Vpc 10.0.0.0/16
サブネット blog-P1a-Sub-Pub01 10.0.11.0/24 パブリック
ルートテーブル blog-P1x-Rtb-Pub01 パブリック
EC2 blog-P1a-Ec2-Nat-NatServer 10.0.11.4 NATインスタンス


2.2. カスタマーゲートウェイを作成する

最初、「カスタマーゲートウェイ」って何?となったのですが、「AWSから見てVPN接続する対向ネットワーク機器の情報を入力するとこ」が自分の中でしっくり来ました。

今回は「自宅Networkの YAMAHA RTX810」が該当します。

■ 作成するAWSリソース

AWSリソース Name 用途
カスタマーゲートウェイ blog-P1x-Cgw-RTX810 VPN接続するルータの情報

■ 作成方法

  1. 東京リージョン > VPC > カスタマーゲートウェイ
  2. 「カスタマーゲートウェイを作成」をクリックする
  3. パラメータを入力して作成する
    • 名前タグ: blog-P1x-Cgw-RTX810
    • BGP ASN: 64513
    • IP アドレス: a.a.a.a ※自宅RouterのWAN側Global IP
    • デバイス - オプション: YAMAHA RTX810

■ (参考) 東京リージョンCloudShell AWS CLIコマンド

create-customer-gateway — AWS CLI 2.7.27 Command Reference

describe-customer-gateways — AWS CLI 2.7.27 Command Reference

## 作成
cgw_name="blog-P1x-Cgw-RTX810"
bgp_asn_cgw="64513"  #YAMAHA RTX810側のAS番号
jitaku_ip_address="122.208.220.101"  #自宅RouterのWAN側Global IP
device_name="YAMAHA RTX810"  #オプション - 機器名

aws ec2 create-customer-gateway \
    --region "ap-northeast-1" \
    --bgp-asn "${bgp_asn_cgw}" \
    --ip-address "${jitaku_ip_address}" \
    --type "ipsec.1" \
    --device-name "${device_name}" \
    --tag-specifications "ResourceType=customer-gateway, \
        Tags=[{Key=Name,Value=${cgw_name}}]"


## 確認(NameタグでFilter)
cgw_name="blog-P1x-Cgw-RTX810"

aws ec2 describe-customer-gateways \
    --filters \
        "Name=state,Values=available" \
        "Name=tag:Name,Values=${cgw_name}"


2.3. ターゲットゲートウェイを作成する

ターゲットゲートウェイと言われると「AWSから見て対向のネットワーク機器??」と思ってしまいましたが、「仮想プライベートゲートウェイ」や「Transit Gateway 」のことです。・・・わかりづらい(汗)

今回は「仮想プライベートゲートウェイ」を使用するので、作成していきます。

2.3.1. 仮想プライベートゲートウェイの作成

■ 作成するAWSリソース

AWSリソース Name 用途
仮想プライベートゲートウェイ blog-P1x-Vgw VPN接続するAWS側のルータみたいなもの

■ 作成方法

  1. 東京リージョン > VPC > 仮想プライベートゲートウェイ
  2. 「仮想プライベートゲートウェイを作成」をクリックする
  3. パラメータを入力して作成する
    • 名前タグ: blog-P1x-Vgw
    • 自律システム番号 (ASN): カスタム ASN
    • カスタム ASN の入力: 64512

■ (参考) 東京リージョンCloudShell AWS CLIコマンド

create-vpn-gateway — AWS CLI 2.7.27 Command Reference

describe-vpn-gateways — AWS CLI 2.7.27 Command Reference

## 作成
vgw_name="blog-P1x-Vgw"
bgp_asn_vgw="64512"  #AWS側のAS番号

aws ec2 create-vpn-gateway \
    --region "ap-northeast-1" \
    --type "ipsec.1" \
    --amazon-side-asn ${bgp_asn_vgw} \
    --tag-specifications "ResourceType=vpn-gateway, \
        Tags=[{Key=Name,Value=${vgw_name}}]"

## 確認(NameタグでFilter)
vgw_name="blog-P1x-Vgw"

aws ec2 describe-vpn-gateways \
    --filters \
        "Name=state,Values=available" \
        "Name=tag:Name,Values=${vgw_name}"


2.3.2. VPCへアタッチ

作成した仮想プライベートゲートウェイは、VPCに接続(アタッチ)しないと使用できないので、アタッチします。

■ 対象AWSリソース

AWSリソース Name
VPC blog-P1x-Vpc
仮想プライベートゲートウェイ blog-P1x-Vgw

■ アタッチ方法

  1. 東京リージョン > VPC > 仮想プライベートゲートウェイ
  2. 作成した仮想プライベートゲートウェイを選択する
  3. アクション > VPCへアタッチ
  4. 「使用可能な VPC」からアタッチ対象のVPCを選択してアタッチする

■ (参考) 東京リージョンCloudShell AWS CLIコマンド

## NameタグからIDの取得
vpc_name="blog-P1x-Vpc"
vgw_name="blog-P1x-Vgw"

vpc_id=$(aws ec2 describe-vpcs \
    --filters "Name=tag:Name,Values=${vpc_name}" \
    --query "Vpcs[].VpcId" \
    --output text) \
    && echo ${vpc_id}

vgw_id=$(aws ec2 describe-vpn-gateways \
    --filters \
        "Name=state,Values=available" \
        "Name=tag:Name,Values=${vgw_name}" \
    --query "VpnGateways[].VpnGatewayId" \
    --output text) \
    && echo ${vgw_id}

## VPCへアタッチ
aws ec2 attach-vpn-gateway \
    --vpc-id ${vpc_id} \
    --vpn-gateway-id ${vgw_id}


2.4. ルーティングを設定する

ルーティングを動的(BGP)にする場合、BGPで受信したルート情報をルートテーブルに載せるためには「ルート伝搬をON」にする必要があります。

今回は、既存のルートテーブルを使用するので、そちらの設定を変更します。

■ 対象AWSリソース

AWSリソース Name 備考
ルートテーブル blog-P1x-Rtb-Pub01 ルート伝播の有効化
仮想プライベートゲートウェイ blog-P1x-Vgw AWS CLIで指定

■ 設定変更方法

  1. 東京リージョン > VPC > ルートテーブル
  2. 対象のルートテーブルを選択する
  3. 「ルート伝播」タブを選択する
  4. 「ルート伝播の編集」をクリックする
  5. 「伝播」を有効化して保存する

■ (参考) 東京リージョンCloudShell AWS CLIコマンド

enable-vgw-route-propagation — AWS CLI 2.7.27 Command Reference

describe-route-tables — AWS CLI 2.7.27 Command Reference

## NameタグからIDの取得
vgw_name="blog-P1x-Vgw"
rtb_name="blog-P1x-Rtb-Pub01"

vgw_id=$(aws ec2 describe-vpn-gateways \
    --filters \
        "Name=state,Values=available" \
        "Name=tag:Name,Values=${vgw_name}" \
    --query "VpnGateways[].VpnGatewayId" \
    --output text) \
    && echo ${vgw_id}

rtb_id=$(aws ec2 describe-route-tables \
    --filters "Name=tag:Name,Values=${rtb_name}" \
    --query "RouteTables[].RouteTableId" \
    --output text) \
    && echo ${rtb_id}

## ルート伝播の有効化
aws ec2 enable-vgw-route-propagation \
    --gateway-id ${vgw_id} \
    --route-table-id ${rtb_id}


2.5. セキュリティグループを更新する

環境によって設定内容が異なるため、詳細は割愛します。

今回は、「EC2 NATインスタンス」へ「自宅Network 172.16.0.0/24 からのHTTP & HTTPS通信」をインバウンド許可しました。


2.6. Site-to-Site VPN 接続の作成

注意!お金掛かります、結構高い!使い終わったら削除。
VPN 1本、 0.048USD / 時間(月730H稼働で 35USD、為替137円で約4,800円)

VPN接続のトンネルオプションですが、AWS側では色々なパラメータ候補がデフォルトで設定されていて、カスタマーゲートウェイ側の設定に合わせたものをNegotiationして選択されるようです。
ただし、どのトンネルパラメータが選択されているかはAWS側で分からないため、カスタマーゲートウェイ側の機器での確認が必要です。

AWS側で利用可能なトンネルオプションはこちらのリンクを参照。

Site-to-Site VPN 接続のトンネルオプション - AWS Site-to-Site VPN

■ 作成するAWSリソース

AWSリソース Name 用途
VPN接続 blog-P1x-Vpn-RTX810

|仮想プライベートゲートウェイ|blog-P1x-Vgw|AWS CLIで指定| |カスタマーゲートウェイ|blog-P1x-Cgw-RTX810|VPN接続するルータの情報|

■ 作成方法

  1. 東京リージョン > VPC > Site-to-Site VPN 接続
  2. 「VPN接続を作成する」をクリックする
  3. パラメータを入力して作成する
    • 名前タグ: blog-P1x-Vpn-RTX810
    • ターゲットゲートウェイのタイプ: 仮想プライベートゲートウェイ
    • 仮想プライベートゲートウェイ: blog-P1x-Vgw を選択
    • カスタマーゲートウェイ: 既存
    • カスタマーゲートウェイ ID: blog-P1x-Cgw-RTX810 を選択
    • ルーティングオプション: 動的 (BGP が必要)

■ (参考) 東京リージョンCloudShell AWS CLIコマンド

create-vpn-connection — AWS CLI 2.7.27 Command Reference

modify-vpn-tunnel-options — AWS CLI 2.7.27 Command Reference

describe-vpn-connections — AWS CLI 2.7.27 Command Reference

## 変数
vpn_name="blog-P1x-Vpn-RTX810"
vgw_name="blog-P1x-Vgw"
cgw_name="blog-P1x-Cgw-RTX810"

## IDの取得
vgw_id=$(aws ec2 describe-vpn-gateways \
    --filters \
        "Name=state,Values=available" \
        "Name=tag:Name,Values=${vgw_name}" \
    --query "VpnGateways[].VpnGatewayId" \
    --output text) \
    && echo ${vgw_id}

cgw_id=$(aws ec2 describe-customer-gateways \
    --filters \
        "Name=state,Values=available" \
        "Name=tag:Name,Values=${cgw_name}" \
    --query "CustomerGateways[].CustomerGatewayId" \
    --output text) \
    && echo ${cgw_id}

## VPN作成
aws ec2 create-vpn-connection \
    --vpn-gateway-id ${vgw_id} \
    --customer-gateway-id ${cgw_id} \
    --type "ipsec.1" \
    --tag-specifications "ResourceType=vpn-connection, \
        Tags=[{Key=Name,Value=${vpn_name}}]"

## 確認
vpn_name="blog-P1x-Vpn-RTX810"

aws ec2 describe-vpn-connections \
    --no-cli-pager \
    --filters \
        "Name=state,Values=available" \
        "Name=tag:Name,Values=${vpn_name}"


2.7. 設定ファイルをダウンロードする

VPN設定を行った後、カスタマーゲートウェイ側ネットワーク機器用にサンプル設定ファイルをダウンロードできるようになります 。

■ 設定ファイルの取得方法

  1. 東京リージョン > VPC > Site-to-Site VPN 接続
  2. 対象のVPNを選択する
  3. 「設定をダウンロードする」をクリックする
  4. サンプルが欲しい機器情報を入力してダウンロードする
    • 今回は「Yamaha」「ikev2」を指定してダウンロード

■ 設定ファイルを出力できるベンダー/機器

こちらのAWSドキュメントを参考にしてください。

docs.aws.amazon.com

他にはAWS CLIで一覧を出力することも可能です。

aws ec2 get-vpn-connection-device-types --output table


2.8. (任意) 新機能、VPNログ記録の有効化

AWSドキュメントの手順外ですが、最近のアップデートでVPN接続のログが取得できるようになったようです。
これまで、ログが取れないから状態分からない、、、と嘆いていたのが過去になるのか!?

dev.classmethod.jp


2.8.1. CloudWatch Logsロググループの作成

CloudWatch Logsへログ保存できるとのことなので、専用にロググループを作成します。
ロググループは保管料が掛かるので、14日経ったら古いログが消えるようにしておきます。

■ 作成するAWSリソース

AWSリソース Name ログ保持期間 用途
ロググループ /aws/blog-P1x-Vpc/vpnlogs 14日 VPN接続ログの保存

■ 作成方法

  1. 東京リージョン > CloudWatch > ログ > ロググループ
  2. 「ロググループを作成」をクリックする
  3. パラメータを入力して作成する
    • ロググループ名: /aws/blog-P1x-Vpc/vpnlogs
    • 保持期間の設定: 2週間(14日間)
    • タグ: {Name: /aws/blog-P1x-Vpc/vpnlogs}

■ (参考) 東京リージョンCloudShell AWS CLIコマンド

# 変数
cwl_name="/aws/blog-P1x-Vpc/vpnlogs"
retention_days="14"   #選択値: 1, 3, 5, 7, 14, 30, 60, 90, 120, 150, 180, 365, 400, 545, 731, 1827, 3653

# 作成
aws logs create-log-group \
    --log-group-name "${cwl_name}" \
    --tags "Name=${cwl_name}"

# ログ保持期間の設定(今回は14日間)
aws logs put-retention-policy \
    --log-group-name "${cwl_name}" \
    --retention-in-days "${retention_days}"

# 確認
aws logs describe-log-groups \
    --log-group-name-prefix "${cwl_name}"


2.8.2. VPNログ記録の有効化

■ 有効化の方法(設定変更)

Tunnel 1本毎に設定変更が必要なので、下記を2本分実行します。

  1. 東京リージョン > VPC > Site-to-Site VPN 接続
  2. 対象のVPN接続を選択する
  3. アクション > VPNトンネルオプションを変更する
  4. 「IP アドレス外の VPN トンネル」で2つIPアドレスが表示されるので1本目を選択
  5. パラメータを入力して変更を保存する
    • トンネルアクティビティログ: ■ 有効化
    • Amazon CloudWatch ロググループ: /aws/blog-P1x-Vpc/vpnlogs
    • 出力形式: json or テキスト ※お好みで選択

■ (参考) 東京リージョンCloudShell AWS CLIコマンド

新しいもの好きで、VPNログ記録をAWS CLIで適用したいがために、めんどくさいコマンドになってます(汗)

最初に、CloudShell AWS CLI v2を最新化する必要がありました。
VPNログ記録は2022/08/19頃?に出てきたばかりのため、そこの部分は最新のAWS CLIじゃないと対応していません。 aws ec2 modify-vpn-tunnel-options helpを打っても、途中にLogOptionsの塊がない場合はAWS CLIが古いです。

検証の時のAWS CLIがaws-cli/2.7.24だったのですが、最新化してaws-cli/2.7.27にしたところ、無事に設定コマンドが通るようになりました。
ただ、CloudShellへ繋ぐたびにVersionが戻ってるなぁ、、、。

# ----- CloudShell AWS CLI v2の最新化 -----
aws --version

cd /tmp
curl -s "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip -q awscliv2.zip
sudo ./aws/install --update
cd ~

aws --version



# ----- VPNログ記録 -----

# ※VPNのステータスが「available」になってから実施すること

## 変数
vpn_name="blog-P1x-Vpn-RTX810"
cwl_name="/aws/blog-P1x-Vpc/vpnlogs"

## VPN-IDの取得
vpn_id=$(aws ec2 describe-vpn-connections \
    --filters \
        "Name=state,Values=available" \
        "Name=tag:Name,Values=${vpn_name}" \
    --query "VpnConnections[].VpnConnectionId" \
    --output text) \
    && echo ${vpn_id}

## CloudWatch Logs ロググループのARNを取得
## ※そのままARNを取得すると末尾の「:*」が邪魔なので消しています。
cwl_arn=$(aws logs describe-log-groups \
    --log-group-name-prefix "${cwl_name}" \
    --query "logGroups[].arn" \
    --output text)
cwl_arn=$(echo "${cwl_arn}" | sed -e "s/\:\*//") && echo "${cwl_arn}"


## Tunnelの外部IPアドレスを取得
tunnel1_outside_ip=$(aws ec2 describe-vpn-connections \
    --filters \
        "Name=state,Values=available" \
        "Name=tag:Name,Values=${vpn_name}" \
    --query "VpnConnections[].Options[].TunnelOptions[0].OutsideIpAddress" \
    --output text) \
    && echo ${tunnel1_outside_ip}

tunnel2_outside_ip=$(aws ec2 describe-vpn-connections \
    --filters \
        "Name=state,Values=available" \
        "Name=tag:Name,Values=${vpn_name}" \
    --query "VpnConnections[].Options[].TunnelOptions[1].OutsideIpAddress" \
    --output text) \
    && echo ${tunnel2_outside_ip}

## VPNログ記録を追加
## ※AWS CLI v2の最新化が必要
## ※ダブルクォーテーションの入れ子の書き方で迷った・・・(汗)
### Tunnel 1 側
aws ec2 modify-vpn-tunnel-options \
    --no-cli-pager \
    --vpn-connection-id "${vpn_id}" \
    --vpn-tunnel-outside-ip-address "${tunnel1_outside_ip}" \
    --tunnel-options "LogOptions={CloudWatchLogOptions={LogEnabled=true,LogGroupArn=\"${cwl_arn}\",LogOutputFormat=json}}"


#  ※連続で設定はできません。VPNのステータスが「available」になってから実施すること


### Tunnel 2 側
aws ec2 modify-vpn-tunnel-options \
    --no-cli-pager \
    --vpn-connection-id "${vpn_id}" \
    --vpn-tunnel-outside-ip-address "${tunnel2_outside_ip}" \
    --tunnel-options "LogOptions={CloudWatchLogOptions={LogEnabled=true,LogGroupArn=\"${cwl_arn}\",LogOutputFormat=json}}"

## 確認
vpn_name="blog-P1x-Vpn-RTX810"

aws ec2 describe-vpn-connections \
    --no-cli-pager \
    --filters \
        "Name=state,Values=available" \
        "Name=tag:Name,Values=${vpn_name}"


3. YAMAHA RTX810の設定

3.1. VPN設定追加前のshow config

基本的な設定だけの状態から開始します。
※YAMAHA初心者の簡易設定だけです(汗)

# show config
# RTX810 Rev.11.01.34 (Tue Nov 26 18:39:12 2019)
# MAC Address : ac:44:f2:aa:aa:aa, ac:44:f2:bb:bb:bb
# Memory 128Mbytes, 2LAN
# main:  RTX810 ver=00 serial=S3K3***** MAC-Address=ac:44:f2:aa:aa:aa MAC-Address=ac:44:f2:bb:bb:bb
# Reporting Date: Aug 28 13:49:32 2022
login user testuser*
console columns 150
console lines infinity
console prompt vpn-router
login timer 3600
ip route default gateway 192.168.0.1
ip lan1 address 172.16.0.1/24
ip lan2 address 192.168.0.2/24
provider lan1 name LAN:naibu
provider lan2 name WAN:gateway
telnetd host lan
dns server 1.1.1.1
sshd service on
sshd host key generate *


3.2. 先ずはAWSからダウンロードした設定を投入

AWSからダウンロードしたままの設定をそのまま使用したあと、変更が必要な箇所の変更を行います。

  1. ターミナルソフトでYAMAHA RTX810へ接続し、Administratorにログインする
  2. ダウンロードしたテキストファイルをエディタで開く
  3. Ctrl + A (全選択)
  4. Ctrl + C (コピー)
  5. ターミナルソフトへ戻り、コピーした設定を丸ごと貼り付ける
    • 設定ファイル内の説明書き等は「#」でコメントアウトされているのでそのまま貼り付けることができます。


3.3. 変更が必要な箇所の修正

3.3.1. ポート転送しているのでLocal IPアドレス書き換え

今回、自宅側が自宅Routerでポート転送して、YAMAHA RTX810とVPN接続するため、Local IPアドレス部分の書き換えが必要です。

今回で言うと「自宅RouterのGlobal IP」で設定されている箇所を「YAMAHA RTX810のLAN2(WAN)」に変更です。

## 変更対象 ※「自宅RouterのGlobal IP」の箇所
~~~途中略~~~
ipsec ike local address 1 <自宅RouterのGlobal IP>
ipsec ike local name 1 <自宅RouterのGlobal IP> ipv4-addr
~~~途中略~~~
ipsec ike local address 2 <自宅RouterのGlobal IP>
ipsec ike local name 2 <自宅RouterのGlobal IP> ipv4-addr
~~~途中略~~~

## 変更コンフィグ ※「YAMAHA RTX810のLAN2(WAN)」に変更
## ※上書き可能なので、no コマンド不要
ipsec ike local address 1 192.168.0.2
ipsec ike local name 1 192.168.0.2 ipv4-addr

ipsec ike local address 2 192.168.0.2
ipsec ike local name 2 192.168.0.2 ipv4-addr


3.3.2. (任意) BGPでAWSへ送る経路情報を指定する

AWSの設定ファイルをそのまま設定すると、YAMAHA RTX810からAWSへデフォルトルートの「0.0.0.0/0」を送ります。

自分の環境の問題ですが、AWS側のEC2がNATインスタンスのためインターネットへ接続できるように「0.0.0.0/0 宛先: InternetGateway」を書いてしまっています(汗)

同じプレフィックスのルートが存在する場合の優先度ですが、今回はインターネット向けのルートが「静的」、VPNで追加したルートが「動的」なため前者が勝ってしまい、自宅側と通信できません・・・・。

ルートテーブルを設定する - Amazon Virtual Private Cloud

そのため、YAMAHA RTX810からAWSへは「172.16.0.0/24」のみを送るように書き換えます。

# BGPへ取り込むルートの変更
no bgp import filter 1 equal 0.0.0.0/0
bgp import filter 1 equal 172.16.0.0/24

# 設定の反映
bgp configure refresh

変更後、ルートテーブル側を確認すると「172.16.0.0/24」が伝播されてきたことが分かります。


3.4. VPN設定追加後のshow config

長いので折りたたみます、クリックで展開

# show config
# RTX810 Rev.11.01.34 (Tue Nov 26 18:39:12 2019)
# MAC Address : ac:44:f2:aa:aa:aa, ac:44:f2:bb:bb:bb
# Memory 128Mbytes, 2LAN
# main:  RTX810 ver=00 serial=S3K3***** MAC-Address=ac:44:f2:aa:aa:aa MAC-Address=ac:44:f2:bb:bb:bb
# Reporting Date: Aug 28 14:21:33 2022
login user toyokky *
console columns 150
console lines infinity
console prompt vpn-router
login timer 3600
ip route default gateway 192.168.0.1
ip lan1 address 172.16.0.1/24
ip lan2 address 192.168.0.2/24
provider lan1 name LAN:naibu
provider lan2 name WAN:gateway
tunnel select 1
 ipsec tunnel 201
  ipsec sa policy 201 1 esp aes-cbc sha-hmac
  ipsec ike version 1 2
  ipsec ike duration ipsec-sa 1 3600
  ipsec ike duration isakmp-sa 1 28800
  ipsec ike encryption 1 aes-cbc
  ipsec ike group 1 modp1024
  ipsec ike hash 1 sha
  ipsec ike keepalive use 1 on rfc4306 10 3
  ipsec ike local address 1 192.168.0.2
  ipsec ike local name 1 192.168.0.2 ipv4-addr
  ipsec ike pfs 1 on
  ipsec ike message-id-control 1 on
  ipsec ike child-exchange type 1 2
  ipsec ike pre-shared-key 1 *
  ipsec ike remote address 1 3.113.97.185
  ipsec ike remote name 1 3.113.97.185 ipv4-addr
  ipsec ike negotiation receive 1 off
 ipsec tunnel outer df-bit clear
 ip tunnel address 169.254.26.82/30
 ip tunnel remote address 169.254.26.81
 ip tunnel tcp mss limit auto
 tunnel enable 1
tunnel select 2
 ipsec tunnel 202
  ipsec sa policy 202 2 esp aes-cbc sha-hmac
  ipsec ike version 2 2
  ipsec ike duration ipsec-sa 2 3600
  ipsec ike duration isakmp-sa 2 28800
  ipsec ike encryption 2 aes-cbc
  ipsec ike group 2 modp1024
  ipsec ike hash 2 sha
  ipsec ike keepalive use 2 on rfc4306 10 3
  ipsec ike local address 2 192.168.0.2
  ipsec ike local name 2 192.168.0.2 ipv4-addr
  ipsec ike pfs 2 on
  ipsec ike message-id-control 2 on
  ipsec ike child-exchange type 2 2
  ipsec ike pre-shared-key 2 *
  ipsec ike remote address 2 35.79.134.19
  ipsec ike remote name 2 35.79.134.19 ipv4-addr
  ipsec ike negotiation receive 2 off
 ipsec tunnel outer df-bit clear
 ip tunnel address 169.254.81.50/30
 ip tunnel remote address 169.254.81.49
 ip tunnel tcp mss limit auto
 tunnel enable 2
bgp use on
bgp autonomous-system 64513
bgp neighbor 1 64512 169.254.26.81 hold-time=30 local-address=169.254.26.82
bgp neighbor 2 64512 169.254.81.49 hold-time=30 local-address=169.254.81.50
bgp import filter 1 equal 172.16.0.0/24
bgp import 64512 static filter 1
ipsec use on
ipsec auto refresh on
telnetd host lan
dns server 1.1.1.1
sshd service on
sshd host key generate *


4. 接続確認

4.1. AWS側:GUIで確認

  1. 東京リージョン > VPC > Site-to-Site VPN 接続
  2. 対象のVPN接続を選択する
  3. 「トンネルの詳細」タブを選択し、トンネルの状態でステータスが「Up」であることを確認する

4.2. AWS側:VPNログ記録で確認

「2.8. (任意) 新機能、VPNログ記録の有効化」で機能を有効化している場合は、こういったログが見れるようです。
IKEが「established"」しているのが分かります。


4.3. YAMAHA RTX810側:showコマンド

検証の時に使用した確認コマンドを載せます。

# TunnelやIPsecの確認
show status tunnel 1
show status tunnel 2
show ipsec sa
show ipsec sa gateway 1 detail
show ipsec sa gateway 2 detail

# ルート情報の確認
show ip route

# BGPの確認
show status bgp neighbor
show status bgp neighbor | grep "BGP neighbor is"
show status bgp neighbor <IP_ADDRESS> received-routes
show status bgp neighbor <IP_ADDRESS> advertised-routes


4.4. クライアントPCからEC2へPing確認

試験用にPCを用意するのが面倒で、Pingだけできれば良いと思いCisco 892ルータを代替で使用しました。

VPN接続により、クライアントPCからEC2へPing疎通することを確認しました。