オンプレサーバから Active Directory を AWS 上に移行するべく、拠点間 IPsec VPN を張りたい。
ヤマハルータ RTX1210 を購入した話で書いたように、先代 RTX1200 で AWS VPN (Amazon Virtual Private Cloud) に接続しようとしたところ、定義を書き換えないとうまくいかないのと、BGP による動的ルーティング情報の交換にも失敗していました。
オンプレサーバから少しずつクラウド上に移行
2009年時点では、Nire.Com は自宅 LAN にある、自作 PC による、100% オンプレサーバでした。
- VM ホスト: 自作 PC 2台 + VMware ESXi
- VM として DNS, メール, Web サーバ (CentOS), Active Directory サーバ (Windows Server) などを並べる
すべて二重化されており、1台がダウンしてもサービスを継続可能という、企業が考えそうな冗長化構成なんだぜと。あくまで自宅で趣味の話ですよ。
これが、何年かかけて DNS は AWS Route 53, メールサーバは G-Suite (Google Apps)、Web サーバも…とクラウド上に段階的に移行済ですが、最後の最後に Windows Server 上で稼働する
Active Directory が残っていました。
Windows Server は DNS, LDAP, Kerberos, そして SMB など色々なプロトコルサーバをかき集めてきてマイグレートしたものです。自宅と DC (AWS) 間に必要な分のポートを開けるのも面倒だし、暗号化されているプロトコルとされていないものが混在しているので、VPN を張った方が手っ取り早く安全と。
拠点間 VPN ネットワーク構成と AD 移行手順
そこで以下のような構成にしようとしていました。
- AWS VPC 側の LAN と、自宅 LAN を VPN (IPsec) で結び、その中で必要なプロトコルを通す
- 自宅側 LAN の出口には NAT gateway がいて、固定 IP 1つを共用している
- IPsec を使うにあたって、ESP が通るかは ASAHI-NET 的に不安が残るので、RTX1210 の NAT Traversal 機能を用いて通す。
- AWS VPC 側はインターネットに出るゲートウェイを持たない。自宅 LAN の出島状態。
- AWS 上の EC2 インスタンスをリージョンに 1つずつ作成
- 自宅 LAN 側の ads-local (仮称) と AWS 上の ads-ap-northeast1, ads-us-west1 を同期させる
- AD x 3台体制で安定したら、ads-local を降格させ ads-ap-northeast1, ads-us-west1 の 2台構成にして完了
ヤマハルータ RTX1210 側の設定は苦難の歴史
AWS の場合ウィザードが手厚く、カスタマーゲートウェイが Yamaha RTX シリーズであることを指定すると、tunnel select 〜の設定が自動生成されます。
ところがそのまま設定しても動作しない代物だったりします。
実際に修正した後の設定です。tunnel は 1つめだけ掲載。tunnel select 2 は割愛。
tunnel 設定
tunnel select 1 ipsec tunnel 201 ipsec sa policy 201 1 esp aes-cbc sha-hmac ipsec ike duration ipsec-sa 1 3600 ipsec ike encryption 1 aes-cbc ipsec ike group 1 modp1024 ipsec ike hash 1 sha ipsec ike keepalive use 1 on dpd 10 3 ipsec ike local address 1 192.168.0.1 ipsec ike local id 1 192.168.0.1 ipsec ike nat-traversal 1 on ipsec ike pfs 1 on ipsec ike pre-shared-key 1 textipsec ike remote address 1 55.66.77.88 ipsec tunnel outer df-bit clear ip tunnel address 169.254.33.44/30 ip tunnel remote address 169.254.77.88 ip tunnel tcp mss limit 1460 tunnel enable 1
NAT 設定
nat descriptor type 2 masquerade nat descriptor address inner 2 192.168.0.1-192.168.0.254 nat descriptor masquerade static 2 16 192.168.0.1 udp 500 nat descriptor masquerade static 2 17 192.168.0.1 udp 4500
BGP 設定
bgp use on bgp autonomous-system 65000 bgp log neighbor packet bgp neighbor 1 10124 169.254.77.88 hold-time=30 local-address=169.254.33.44 bgp router id 192.168.0.1 bgp preference 10001 bgp import filter 1 equal 0.0.0.0/0 bgp import 10124 static filter 1
AWS 側の定義から書き換えが必要な箇所
書き換えた箇所は以下の通り。
AWS からダウンロードした定義:
ipsec ike local address 1 11.22.33.44
書き換え後:
ipsec ike local address 1 192.168.0.1 ipsec ike local id 1 192.168.0.1
グローバル IP アドレスなのですが、NAT Traversal が間に入っている場合は、ローカル側の IP アドレスを lan 側、プライベート IP アドレスにしないと動作しませんでした。
AWS による定義:
ip tunnel tcp mss limit 1379
書き換え後:
ip tunnel tcp mss limit 1460
MTU (MSS) を適切に設定しないと VPN 通信ができないといったブログをいくつか見かけるので、手動で設定。
ip tunnel tcp mss limit auto
でも大丈夫なはずです。
BGP セッションが確立せず
この状態で VPN セッション自体は確立するのですが、ルーティング情報を交換する BGP ((Border Gateway Protocol)) のセッションが確立しないのです。BGP にはセッションが確立するまでにいくつかの状態が存在します。RTX1200 側のログを確認すると、Idle / Active を繰り返していることは分かるのですが、Established にならない。
ヤマハルータの課題として、VPN セッションの接続状態が分かりにくかったり、コマンドでセッションを再確立させるのがやりにくかったりします。
セッション切れてるんじゃない? ということで、keepalive も見直しました。
AWS による定義:
ipsec ike keepalive use 1 on dpd 10 3
書き換え後 (非推奨):
ipsec ike keepalive use 1 on icmp-echo
これは効果なし。
この後
- プロバイダを変更 (ASAHI-NET を interlink に)
- ヤマハルータ RTX1200 を RTX1210 に変更し、最新ファームウェアでトライ
の順に試してみましたが、BGP はやっぱりだめ。
結局、BGP 部分の定義をバッサリ削り、静的ルーティングに直して事なきを得ましたが、
ip route 10.0.0.0/16 gateway tunnel 1
同時に GCP (Google Computing Platform) での VPN を同時に試しており、GCP VPN の方が実はいいんじゃないかと思い始めました 🙂
まあそれは別エントリで。
つづく。
0件のコメント
1 件のピンバック