LoginSignup
2
1

More than 5 years have passed since last update.

VPCのSNATゲートウェイの作成手順

Last updated at Posted at 2017-05-15

はじめに

Alibaba CloudのECSを購入するときに、帯域幅を1Mbps以上に設定すると、ElasticIP (グローバルIP)が自動的に付与されます。このIPを経由でサーバーをアクセスし操作することができるのに便利です。その一方、役割により外部からのアクセスが許可しないけれども、外部へアクセスしたい場合があります。例えば、Server Load Balancer 配下のECSサーバーの場合、外部へアクセスしパッケージを更新したいですが、セキュリティ担保のため外部から直接にECSサーバーへアクセスを拒否したい。こういう場合には、ECSサーバーをゲートウェイとして設定すればよいでしょう。

この記事はタイトル通りにSNATゲートウェイの設定手順について書きます。

設定構成

image

設定しようとする構成は上記の図となります。ECS1インスタンスはエラスティックIPを持ち、そのIPを経由しインターネットをアクセスできます。ECS2インスタンスはグローバルIPを持たずに、インターネットへ出たいときには、ECS1経由しなければなりません。ECS2からのパッケージはSNATされてからインターネットをでます。ECS1とECS2は同じVPCネットワークに所属します。

設定手順

前提条件

  • 動作OS: CentOS 7
  • 同じVPCネットワークに所属するサーバー
  • root権限を持つ

ECS2から外部へアクセスできないことを確認

# google ping してみる
$ ping google.com
PING google.com (172.217.25.110) 56(84) bytes of data.

# 疎通が不可能なことを確認

ECS1の設定

この例だと、ECS1のプライベートIPが 10.2.219.106/16となります

# ECSのプライベートIP / インタフェースを確認
$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:16:3e:00:0a:ef brd ff:ff:ff:ff:ff:ff
    inet 10.2.219.106/16 brd 10.2.255.255 scope global eth0
       valid_lft forever preferred_lft forever
$


# IP Forwardingの設定
$ sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 0
$ vim /etc/sysctl.d/10-ipv4forward.conf
net.ipv4.ip_forward = 1
# :wq
$ sysctl -p /etc/sysctl.d/10-ipv4forward.conf
$ sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1
$

# Firewall 起動
$ systemctl start firewalld
$ systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: active (running) since Mon 2017-05-15 10:46:39 CST; 5h 56min ago
     Docs: man:firewalld(1)
 Main PID: 27068 (firewalld)
   CGroup: /system.slice/firewalld.service
           └─27068 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
...
$

# Firewalld NAT設定
$ firewall-cmd --get-active-zones # アクティブゾーンなし
$ firewall-cmd --set-default-zone external
$ firewall-cmd --zone=external --add-interfce=eth0 --permanent
$ firewall-cmd --permanent --direct --passthrough ipv4 -t nat -I POSTROUTING -o eth0 -j MASQUERADE -s 10.2.0.0/16
$

ここでは、10.2.0.0/16はVPCネットワークのプライベートIPレンジです。

VPCの設定

① 2インスタンスが所属しているVPC設定画面へ移動

image

② VRouter設定画面へ移動し、ルートエントリ追加

image

【ルートエントリの追加】ボタンを押し、以下の画面の通りに入力します

  • ① 外部のアドレス。0.0.0.0/0 は外部のすべてという意味です
  • ② ECS1のインスタンスID

image

【OK】を押します

image

新しいルートエントリが追加されることを確認します。

image

ECS2の方で接続が可能となったことを確認

# googleへpingできるようになった
$ ping google.com
PING google.com (216.58.200.174) 56(84) bytes of data.
64 bytes from nrt12s11-in-f174.1e100.net (216.58.200.174): icmp_seq=1 ttl=54 time=1.81 ms
64 bytes from nrt12s11-in-f174.1e100.net (216.58.200.174): icmp_seq=2 ttl=54 time=2.27 ms
^C

# tracepathでECS1のプライベートIPが表示される
$ tracepath google.com
 1?: [LOCALHOST]                                         pmtu 1500
 1:  10.2.219.106                                          0.176ms
 1:  10.2.219.106                                          0.142ms
 2:  no reply
 3:  10.106.205.9                                          5.843ms asymm  2
 4:  no reply

上記の10.2.219.106はECS1のIPアドレスで、10.106.205.9は上流のルータのIPです。

まとめ

VPCのSNATゲートウェイの設定方法について書きました。この方法では、ECS1という踏み台サーバーを構築するこで、エラスティックIPが不要でも外部へアクセス可能となり、セキュリティが強化されます。

参考文献

  1. セキュリティの概要 > ファイアワォールの使用
  2. Alibabaクラウドの公式ドキュメント
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