redunduncy of nat instance on aws/vpc
TRANSCRIPT
![Page 1: Redunduncy of NAT instance on AWS/VPC](https://reader034.vdocuments.site/reader034/viewer/2022052507/558ded9c1a28ab1b7e8b4577/html5/thumbnails/1.jpg)
NATインスタンス冗長化の深淵な話
AWS Casual Talks#12013-11-01
ひろせまさあき@hirose31大剣使い
![Page 2: Redunduncy of NAT instance on AWS/VPC](https://reader034.vdocuments.site/reader034/viewer/2022052507/558ded9c1a28ab1b7e8b4577/html5/thumbnails/2.jpg)
VPCにおけるNAT冗長化の話
VPC 10.0.0.0/16
Subnet 10.0.0.0/24
VPC Router
Internet GW
EC2 w/ EIP NAT w/ EIP
EC2 w/o EIP
ここ!
![Page 3: Redunduncy of NAT instance on AWS/VPC](https://reader034.vdocuments.site/reader034/viewer/2022052507/558ded9c1a28ab1b7e8b4577/html5/thumbnails/3.jpg)
NATの冗長化といえば
![Page 4: Redunduncy of NAT instance on AWS/VPC](https://reader034.vdocuments.site/reader034/viewer/2022052507/558ded9c1a28ab1b7e8b4577/html5/thumbnails/4.jpg)
安心のCDP/Ninja of Threeクオリティ
![Page 5: Redunduncy of NAT instance on AWS/VPC](https://reader034.vdocuments.site/reader034/viewer/2022052507/558ded9c1a28ab1b7e8b4577/html5/thumbnails/5.jpg)
糸冬了
![Page 6: Redunduncy of NAT instance on AWS/VPC](https://reader034.vdocuments.site/reader034/viewer/2022052507/558ded9c1a28ab1b7e8b4577/html5/thumbnails/6.jpg)
…とはいかない深淵な理由が…
![Page 7: Redunduncy of NAT instance on AWS/VPC](https://reader034.vdocuments.site/reader034/viewer/2022052507/558ded9c1a28ab1b7e8b4577/html5/thumbnails/7.jpg)
(再掲)
VPC 10.0.0.0/16
Subnet 10.0.0.0/24
VPC Router
Internet GW
EC2 w/ EIP NAT w/ EIP
EC2 w/o EIP
![Page 8: Redunduncy of NAT instance on AWS/VPC](https://reader034.vdocuments.site/reader034/viewer/2022052507/558ded9c1a28ab1b7e8b4577/html5/thumbnails/8.jpg)
(再掲)
VPC 10.0.0.0/16
Subnet 10.0.0.0/24
VPC Router
Internet GW
EC2 w/ EIP NAT w/ EIP
EC2 w/o EIP
![Page 9: Redunduncy of NAT instance on AWS/VPC](https://reader034.vdocuments.site/reader034/viewer/2022052507/558ded9c1a28ab1b7e8b4577/html5/thumbnails/9.jpg)
(再掲)VPC 10.0.0.0/16
Subnet 10.0.0.0/24
VPC Router
Internet GW
EC2 w/ EIP NAT w/ EIP
EC2 w/o EIP
![Page 10: Redunduncy of NAT instance on AWS/VPC](https://reader034.vdocuments.site/reader034/viewer/2022052507/558ded9c1a28ab1b7e8b4577/html5/thumbnails/10.jpg)
_人人人人人人_> publicサブ <> ネットのみ < ̄^Y^Y^Y^Y^Y^ ̄
![Page 11: Redunduncy of NAT instance on AWS/VPC](https://reader034.vdocuments.site/reader034/viewer/2022052507/558ded9c1a28ab1b7e8b4577/html5/thumbnails/11.jpg)
_人人人人人人_> まさに <> 公私混同 <> パターン < ̄^Y^Y^Y^Y^Y^ ̄
@Yuryu(C)
![Page 12: Redunduncy of NAT instance on AWS/VPC](https://reader034.vdocuments.site/reader034/viewer/2022052507/558ded9c1a28ab1b7e8b4577/html5/thumbnails/12.jpg)
第二部唯一つの
サブネットを胸に
![Page 13: Redunduncy of NAT instance on AWS/VPC](https://reader034.vdocuments.site/reader034/viewer/2022052507/558ded9c1a28ab1b7e8b4577/html5/thumbnails/13.jpg)
どうしてpublic, private、2つのサブネットを切らなかったのか?
![Page 14: Redunduncy of NAT instance on AWS/VPC](https://reader034.vdocuments.site/reader034/viewer/2022052507/558ded9c1a28ab1b7e8b4577/html5/thumbnails/14.jpg)
深淵な理由↓
![Page 15: Redunduncy of NAT instance on AWS/VPC](https://reader034.vdocuments.site/reader034/viewer/2022052507/558ded9c1a28ab1b7e8b4577/html5/thumbnails/15.jpg)
深淵な理由↓
めんどくさそうだったから /⌒ ⌒\
/( ●) (●)\ /::::::⌒(__人__)⌒::::: \ <で? | mj |ー'´ | \ 〈__ノ / ノ ノ
![Page 16: Redunduncy of NAT instance on AWS/VPC](https://reader034.vdocuments.site/reader034/viewer/2022052507/558ded9c1a28ab1b7e8b4577/html5/thumbnails/16.jpg)
NATインスタンスってただのNATしてるLinuxサーバーだしぃサブネットひとつの方がシンプルだしぃオンプレでもPublic/Privateなんかでサブネットわけてないしぃ
![Page 17: Redunduncy of NAT instance on AWS/VPC](https://reader034.vdocuments.site/reader034/viewer/2022052507/558ded9c1a28ab1b7e8b4577/html5/thumbnails/17.jpg)
深淵な理由↓
ない! /⌒ ⌒\ /( ●) (●)\ /::::::⌒(__人__)⌒::::: \ <ふ〜ん | mj |ー'´ | \ 〈__ノ / ノ ノ
![Page 18: Redunduncy of NAT instance on AWS/VPC](https://reader034.vdocuments.site/reader034/viewer/2022052507/558ded9c1a28ab1b7e8b4577/html5/thumbnails/18.jpg)
第二部唯一つの
サブネットを胸に
![Page 19: Redunduncy of NAT instance on AWS/VPC](https://reader034.vdocuments.site/reader034/viewer/2022052507/558ded9c1a28ab1b7e8b4577/html5/thumbnails/19.jpg)
1.構成・設定は?2.どやってフェイル オーバーすんの?3.なにを異常とみなすか?
![Page 20: Redunduncy of NAT instance on AWS/VPC](https://reader034.vdocuments.site/reader034/viewer/2022052507/558ded9c1a28ab1b7e8b4577/html5/thumbnails/20.jpg)
構成図
NATActive
Private IP ! : 10.0.0.21Secondary IP!: 10.0.0.254
EIP ! : 54.X.X.31
NATStandby
Private IP ! : 10.0.0.22
default GW ! : 10.0.0.1 default GW ! : 10.0.0.254
Private IP ! : 10.0.0.101default GW ! : 10.0.0.254
w/oEIP
VPC Router ! : 10.0.0.1
Subnet 10.0.0.0/24
VPC 10.0.0.0/16
![Page 21: Redunduncy of NAT instance on AWS/VPC](https://reader034.vdocuments.site/reader034/viewer/2022052507/558ded9c1a28ab1b7e8b4577/html5/thumbnails/21.jpg)
設定Source / Dest Check OFF (standby, too)Secondary Private IP: $NAT_VIP (=10.0.0.254)Elastic IP Associate with $NAT_VIP (≠Primary Private IP) Allow Reassociation
sysctl -w net.ipv4.ip_forward=1sysctl -w net.netfilter.nf_conntrack_max=262144
iptables -t nat -A POSTROUTING -s 10.0.0.0/16 -o eth0 -j SNAT --to-source $NAT_VIP
ip addr add $NAT_VIP dev eth0 label eth0:natip route add default via 10.0.0.1 dev eth0 src $NAT_VIP
AWS
Linux, sysctl
Linux, iptables
ちなみにAWS側の2nd IP設定せずにLinux側だけでIP Aliasした場合、arp解決ができなくて疎通できません
![Page 22: Redunduncy of NAT instance on AWS/VPC](https://reader034.vdocuments.site/reader034/viewer/2022052507/558ded9c1a28ab1b7e8b4577/html5/thumbnails/22.jpg)
フェイルオーバーの流れiptables -t nat -F POSTROUTINGiptables -t nat -A POSTROUTING -s 10.0.0.0/16 -o eth0
-j SNAT --to-source $NAT_VIPip addr add $NAT_VIP/24 dev eth0 label eth0:natip route del defaultip route add default via $I_GW dev eth0 src $NAT_VIP
iptables -t nat -F POSTROUTINGip addr del $NAT_VIP/24 dev eth0 label eth0:natip route del defaultip route add default via $NAT_VIP dev eth0
新Active
aws ec2 assign-private-ip-addresses--network_interface_id $ENI_ID_of_NEW_ACTIVE--private_ip_addresses $NAT_VIP--allow-reassignment
AWS API
旧Active (if possible)
![Page 23: Redunduncy of NAT instance on AWS/VPC](https://reader034.vdocuments.site/reader034/viewer/2022052507/558ded9c1a28ab1b7e8b4577/html5/thumbnails/23.jpg)
フェイルオーバー没案
![Page 24: Redunduncy of NAT instance on AWS/VPC](https://reader034.vdocuments.site/reader034/viewer/2022052507/558ded9c1a28ab1b7e8b4577/html5/thumbnails/24.jpg)
1. VIP使わずに、NATが切り替わったらEIPなしインスタンスのデフォゲを必死で変えてまわる
![Page 25: Redunduncy of NAT instance on AWS/VPC](https://reader034.vdocuments.site/reader034/viewer/2022052507/558ded9c1a28ab1b7e8b4577/html5/thumbnails/25.jpg)
_人人人人人人_> ありえ <> ない < ̄^Y^Y^Y^Y^Y^ ̄
![Page 26: Redunduncy of NAT instance on AWS/VPC](https://reader034.vdocuments.site/reader034/viewer/2022052507/558ded9c1a28ab1b7e8b4577/html5/thumbnails/26.jpg)
2. ENIをも1こつけて、それをVIP的に移動させ
る
![Page 27: Redunduncy of NAT instance on AWS/VPC](https://reader034.vdocuments.site/reader034/viewer/2022052507/558ded9c1a28ab1b7e8b4577/html5/thumbnails/27.jpg)
Secondary IP+IP Aliasでいけたしあんま調べてないけど、EIPをeth1にヒモ付けた場合、自分が外へ出ていけなかった(ような気がする)ポリシールーティングとか駆使すればいけるのかも
![Page 28: Redunduncy of NAT instance on AWS/VPC](https://reader034.vdocuments.site/reader034/viewer/2022052507/558ded9c1a28ab1b7e8b4577/html5/thumbnails/28.jpg)
なにを異常とみなすか?
•異常とは?
•NATサーバーが生きてるかどうか、ではない
•フリーズしてSSHで入れなくてもパケット転送ができてればいい
•☛非EIPインスタンスが外部へ疎通できないのが異常である
![Page 29: Redunduncy of NAT instance on AWS/VPC](https://reader034.vdocuments.site/reader034/viewer/2022052507/558ded9c1a28ab1b7e8b4577/html5/thumbnails/29.jpg)
なにを異常とみなすか?
• 外部の疎通対象をどうするか?
• 自由に気兼ねなくping打っていいホストがあればいいのだけど…
• 一応ある
• ping.mesh.ad.jp
JANOG28 到達性確認手段共有BoF
http://tools.bgp4.jp/index.php?janog28
• とりあえず にpingを…
![Page 30: Redunduncy of NAT instance on AWS/VPC](https://reader034.vdocuments.site/reader034/viewer/2022052507/558ded9c1a28ab1b7e8b4577/html5/thumbnails/30.jpg)
なにを異常とみなすか?
• が落ちたら?
•間隔置いて何回かリトライする
• はわりと一時的に不通になるにょ
•それでもダメなら別のところにセカンダリーチェックする
![Page 31: Redunduncy of NAT instance on AWS/VPC](https://reader034.vdocuments.site/reader034/viewer/2022052507/558ded9c1a28ab1b7e8b4577/html5/thumbnails/31.jpg)
なにを異常とみなすか?
•監視元の非EIPインスタンスが落ちたら?
•複数インスタンスから外部への疎通監視する
![Page 32: Redunduncy of NAT instance on AWS/VPC](https://reader034.vdocuments.site/reader034/viewer/2022052507/558ded9c1a28ab1b7e8b4577/html5/thumbnails/32.jpg)
なにを異常とみなすか?
•誤検知したら?
•監視(非EIPインスタンス)に加えて調停役を立てて投票制(quorum)にする
•調停役がAWSのAPIを叩くなどしてF/Oする
•なので調停役はEIP付インスタンスで動かす必要がある←意外とワナい
![Page 33: Redunduncy of NAT instance on AWS/VPC](https://reader034.vdocuments.site/reader034/viewer/2022052507/558ded9c1a28ab1b7e8b4577/html5/thumbnails/33.jpg)
なにを異常とみなすか?•監視ノードのお仕事
•調停役にステータスを送る
•起動時: JOINを送る
•定期的に: pingの結果を送る OK/NG
•終了時: LEAVEを送る
•送信データ=ステータス、自ホスト名、時刻
• 3台ぐらい立ててる
•msgpack RPCで送ってる
![Page 34: Redunduncy of NAT instance on AWS/VPC](https://reader034.vdocuments.site/reader034/viewer/2022052507/558ded9c1a28ab1b7e8b4577/html5/thumbnails/34.jpg)
なにを異常とみなすか?• 調停役ノードのお仕事
• 監視ノードからデータが来たら
• 内部的に持ってる情報を更新
• 数秒間隔で定期的に
• 突然死した監視ノードがいないかチェック
• 最終更新時刻をみてしばらく更新されてないやつはLEAVE(投票数にはカウントしない)とみなす
• 上記でステータスがNG or LEAVEのがいたら
• ステータスが全部NG(外部疎通できるやつがいない)かつ、稼働中の監視ノード数が定足数以上なら、フェイルオーバー発動!!!
• PerlのAnyEvent::MPRPC::Serverで実装
• 今ならSerf http://www.serfdom.io/ でサクッと実現できるかもですね
![Page 35: Redunduncy of NAT instance on AWS/VPC](https://reader034.vdocuments.site/reader034/viewer/2022052507/558ded9c1a28ab1b7e8b4577/html5/thumbnails/35.jpg)
まとめ
![Page 36: Redunduncy of NAT instance on AWS/VPC](https://reader034.vdocuments.site/reader034/viewer/2022052507/558ded9c1a28ab1b7e8b4577/html5/thumbnails/36.jpg)
サブネット分けてCDPのように
VPC Routerの設定を変えてフェイルオーバー
![Page 37: Redunduncy of NAT instance on AWS/VPC](https://reader034.vdocuments.site/reader034/viewer/2022052507/558ded9c1a28ab1b7e8b4577/html5/thumbnails/37.jpg)
深淵な理由でサブネット切ってない場合は…
![Page 38: Redunduncy of NAT instance on AWS/VPC](https://reader034.vdocuments.site/reader034/viewer/2022052507/558ded9c1a28ab1b7e8b4577/html5/thumbnails/38.jpg)
今回紹介したNAT VIPの移動
![Page 39: Redunduncy of NAT instance on AWS/VPC](https://reader034.vdocuments.site/reader034/viewer/2022052507/558ded9c1a28ab1b7e8b4577/html5/thumbnails/39.jpg)
ではなく!
![Page 40: Redunduncy of NAT instance on AWS/VPC](https://reader034.vdocuments.site/reader034/viewer/2022052507/558ded9c1a28ab1b7e8b4577/html5/thumbnails/40.jpg)
_人人人人人人_
>全インスタンスに<
> EIPを付ける!!<
 ̄^Y^Y^Y^Y^Y^ ̄
![Page 41: Redunduncy of NAT instance on AWS/VPC](https://reader034.vdocuments.site/reader034/viewer/2022052507/558ded9c1a28ab1b7e8b4577/html5/thumbnails/41.jpg)
ご清聴ありがとうございました