はじめに
くどうです。
今回は、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を利用し実現しました。
セグメントのバッティングは起こりうることなので、一つの方法として考えてもらえればと思います。
ではでは