LoginSignup
2
1

More than 5 years have passed since last update.

iptablesでNATしてVPC内リソースにアクセスする

Posted at

はじめに

この記事はZenelo Advent Calendar 2018の22日目(完全に遅刻だけどね)の記事です。

やりたいこと

外部ネットワークからVPC内のリソースにアクセスする。
例えば、

  • ElastiCache
  • RDS
  • Elasticsearch

とか。

どうやるの?

iptablesでNATでしょ!(nginxとかhaproxyとかでも全然いけると思う)

手順

セキュリティグループの準備

  • セキュリティグループ作成
    • 許可するネットワーク(例えば会社の拠点IPとか)からのみ特定ポート(RDSだったら3306、memcachedだったら11211とか)にアクセスを許可する
  • アクセスしたいリソースのセキュリティグループのインバウンドに上記で作成したセキュリティグループを追加する

EC2インスタンスの準備

  • コンソールからEC2インスタンスを立ててElasticIPをつける

iptablesでルーティング

  • 上記で作成したEC2インスタンスにsshログインする
  • iptablesコマンドが入ってなければインストール
sudo yum install iptables bind-utils tcpdump # 必要コマンドとついでにtcpdumpも入れたければ入れとく
  • カーネルパラメータの設定
sysctl -w net.ipv4.ip_forward=1 # フォワーディングの有効化
vi /etc/sysctl.conf # 該当箇所を修正して設定を永続化
-> net.ipv4.ip_forward=0となっているところをnet.ipv4.ip_forward=1に修正する、なければ追記する
  • 対象リソースのIP確認
nslookup <対象リソースのエンドポイント名(コンソールで確認しとく)>
  • iptablesでルーティング設定
    • netfilterとかiptablesでのルーティングについて知りたければ下の補足へ
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 3306 -j DNAT --to <上記で確認した対象リソースのIP>:3306 # RDSの場合
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 11211 -j DNAT --to <上記で確認した対象リソースのIP>:11211 # memcachedの場合
vi /etc/sysconfig/iptables # 永続化のために上記の設定を追記

疎通確認

  • 外部ネットワークからtelnetなりcurlなりmysqlコマンドなりでElastiIPへアクセス!応答が返ってくるはず
  • NATサーバー上でtcpdumpするとNATしてる様子が見れますね

補足

2
1
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
2
1