vpc
ECS
sbcloud
AlibabaCloud
SNAT

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

More than 1 year has passed since last update.


はじめに

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クラウドの公式ドキュメント