おはようございます。インフラ宮下です。
AWSのVPCとオフィスをVPNで接続するケースは良くありますが、構成によってはダウンロードしたconfigではうまく動作しない事があります。 今回は、以下の環境の時に変更しなければいけなかった設定をまとめたいと思います。
1)AWSの接続環境
[shell]リージョン:シンガポール ルータ:YAMAHA RTX 1200 経路情報:Static[/shell]
2)VPNのconfigを確認
VPN Connectionsを作成した後にconfigをダウンロードすると設定項目として、IKE・IPSec・Tunnel Interface・Static Route の4項目がありますのでそれぞれの内容について確認しましょう。
・IKE
[shell] tunnel select 1 ipsec ike encryption 1 aes-cbc ipsec ike group 1 modp1024 ipsec ike hash 1 sha ipsec ike pre-shared-key 1 text y7Nn93e7fJHWQrUaabbccdd112233[/shell]
IKEについては、configそのまま流用で問題ないでしょう。keyは個々に違いますので正しいKeyにしてください。 トンネル番号は、既に「1」を使っている場合は違う数字にしてください。(以降のID表記も忘れずに変える)
・IPSec
[shell] ipsec tunnel 201 ipsec sa policy 201 1 esp aes-cbc sha-hmac ipsec ike duration ipsec-sa 1 3600 ipsec ike pfs 1 on ipsec tunnel outer df-bit clear ipsec ike keepalive use 1 on dpd 10 3[/shell]
変更必須項目はありません。 環境によっては、keepaliveがdpdだと頻繁に落ちる事がありますので、そんな時はicmpに変えても問題はないと思います。 中にはkeepaliveの設定はoffにする人ももいるようです。 keepaliveをicmpに変更する時は下記のように設定をします。
[shell]ipsec ike keepalive use 1 on icmp-echo 169.xxx.xx.xxx(AWS側のIP)[/shell]
ipsec tunnelのIDも使用済の場合は別のIDとしてください。
・Tunnel Interface
[shell] ipsec ike local address 1 aaa.xxx.yyy.xxx(オフィスIP) ipsec ike remote address 1 aaa.xxx.yyy.xxx(AWSIP) ip tunnel address 169.254.yy.xz/30 ip tunnel remote address 169.254.yy.xx ip tunnel tcp mss limit 1387 tunnel enable 1 tunnel select none ipsec auto refresh on[/shell]
東京-シンガポール間をRTX1200でVPN接続すると、AWSインスタンスにログインして「ps」とか「ls」コマンド実行すると途中で応答がなくなってしいました。
オフィスサーバ→AWSインスタンス 応答不可 オフィスサーバ→AWSインスタンス→AWSインスタンス 応答可 オフィスサーバ→AWS別リージョンインスタンス 応答可 オフィスサーバ→AWSインスタンス(別ZONE) 応答不可
と症状を見る限り、オフィスとVPC間の通信に何か問題を抱えている事が予想されます。 切り分けとしてオフィスからAWSインスタンスに向けてPingしてみるとやはりおかしかったです。
[shell] ping -f -l 1387(MTUサイズ) -n 1 接続先IP(オフィスからAWSインスタンス) パケットの断片化が必要ですが、DF が設定されています。[/shell]
試しに色々な環境やリージョンでconfigダウンロードしてみましたが全てmss設定値が1387と固定値になっていました。 なるほど、自分の環境に合わせて修正する必要がありました。
MTU/MSSの最適値を探す方法は、地道にPingでMTUサイズを加減して上限値を探す事になります。
[shell] ping -f -l この値を変える(断片化しない最大値) -n 1 接続先IP(オフィスからAWSインスタンス)
最適値ががわかったら下記公式に合せて、
MTU→最適値+8(ICMPヘッダ)+20(IPヘッダ) MSS→MTU-40(TCP/IPヘッダ)
ルータに設定すべきMTU/MSS値を計算し、その値をconfigに追加します。
[shell] tunnel select 1 ip tunnel mtu 設定するMTU値 ip tunnel tcp mss limit 設置するMSS値[/shell]
改めてリモート接続して同様にコマンド実行をするときちんと表示されていると思います。 (最後に忘れずにsaveをしましょう)
大変参考にさせていただきました。 AWSのVPCにおけるMTUとMSS設定について MTUが小さいVPN間でファイル共有通信をすると通信できなくなる問題