share facebook facebook2 twitter menu hatena pocket slack

2017.06.06 TUE

VPC Peering、Direct Connectで同セグメントの通信を実現する方法。

工藤 淳

WRITTEN BY 工藤 淳

はじめに

くどうです。

今回は、AWSの話です。
VPC同士でVPC Peering、もしくはオンプレミスとDirect Connectで接続して接続する場合の前提条件としてセグメントが被らないようにとあります。
最初からIP設計を行い、接続する分には問題はありません。しかし、最近は構築後に接続要件が出てくるケースがあります。
特にエンタープライズな範囲で、部署間での接続など増えてきています。
そこで、ひとつの解決方法としてProxyを利用した方法を説明していきたいと思います。つまり、ピア通信でないことをご了承ください。
また、例としてVPC Peeringを取り上げています。

概要

本来、実現したかった通信は同セグメントの通信でした。

しかし、実際にはVPC Peeringの設定自体が行えません。

そこで、VPC Peeringを実現するためセグメントの異なるVPCを挟みます。

そこで、発生する問題があります。VPC越えです。

ただ、この場合も実際にはVPC1とVPC3で通信出来ません。

そこでProxyを利用することで通信を実現します。

Peeringの設定

Peeringは、通常通り設定を行います。

Route Table

Route Tableも設定を行います。

VPC1

VPC1は192.168.0.0/24でPeeringを指定します。

VPC2

VPC2では、それぞれ{通信したいインスタンスのIP}/32で指定するのが良いと思います
/32でバッティングしないように制御します。

VPC3

VPC3ではVPC1と同様に192.168.0.0/24でPeeringを指定します。

以上でルーティングに設定は完了です。

Proxyを構築

ProxyですがSOCKS Proxyを利用します。
HTTP/Sとは違い、SOCKSを利用する理由としてはプロトコルに依存しない点です。

利用する、ProxyソフトウェアはDante です。
http://www.inet.no/dante/

インストールはソースから。

# yum install gcc make
# ./configure
# make
# make install

以上で完了するかと思います。

次いで、設定ファイルを用意します。
/ect/sockd.conf

logoutput: syslog stdout /var/log/sockd.log
 debug: 2
 
 internal: eth0 port = 1080
 external: eth0
 socksmethod: username none
 clientmethod: none
 user.privileged: nobody
 user.unprivileged: nobody
 client pass {
     from: 0.0.0.0/0 port 1-65535 to: 0.0.0.0/0
 }
 socks pass {
     from: 0.0.0.0/0 to: 0.0.0.0/0
     protocol: tcp udp
 }

/etc/socks.conf

route {
 from: 0.0.0.0/0 to: 0.0.0.0/0 via: direct
 proxyprotocol: socks_v5
}

起動

# /usr/local/sbin/sockd

停止
Killしましょう。

Security Group

通信するプロトコルによって異なります。
適切な設定をしましょう。

通信の検証

実際に通信を行う場合はどうするか、sftpを例に確認していきます。
VPC1のインスタンスからVPC3のインスタンスへ接続を行います。

ただ、SOCKS Proxyを利用するためconnect-proxyをインストールします。
epelレポジトリを利用します。

# yum install epel-release
# yum install connect-proxy

EC2の場合は秘密鍵の指定が必要となります。
-4でバージョン4を指定しています。5でもできます。

sftp -o ProxyCommand="/usr/bin/connect-proxy -4 -S 192.168.0.xxx:1080 %h %p" -o IdentityFile=.ssh/sftp.pem centos@10.0.0.xxx
Connected to 10.0.0.xxx.
sftp>

以上で接続確認が行えました。
他のアプリケーションでもProxy使えるものならどんなものでも可能かと思います。
Internal ELBを挟むことで冗長化出来たりするかもしれません(未検証

まとめ

今回はVPC越えをするためSOCKS Proxyを利用し実現しました。
セグメントのバッティングは起こりうることなので、一つの方法として考えてもらえればと思います。
ではでは

元記事はこちら

VPC Peering、Direct Connectで同セグメントの通信を実現する方法。

工藤 淳

工藤 淳

cloudpack事業部の本屋ではございません。エンジニアとしてAWSでシステム構築を主に行っています。 個人的に「クラウドっておもしれー」をコンセプトに様々なクラウドを取り扱っています。 また、クラウド、セキュリティ、オープンソース系の勉強会では登壇、スタッフ業に勤しんでいます。