データセンターで稼働している PC 群にアクセスするような場合、最近は踏み台サーバーを使った多段SSH接続ではなく、VPN でローカルPC を繋げ、そこから各 PC へアクセスするという方法が多くなってきてる気がします。
世には SSHトンネル未対応のソフトも当然あるので優位性はありそうだし、多段SSH接続と比べデメリットも思いつきません。(というか二者択一のものではないので、両方採用もアリだと思います)
そこで AWS のケースで VPC に VPN で接続する方法です。
AWS Client VPN なんていうサービスも始まってます(が、まだ触ったことないです)し、手段は色々あると思いますが、手っ取り早くかつ高機能だと思う SoftEther を使った例です。ネットには同じような情報が沢山提供されているのでほぼ自分向けの備忘録です。
SoftEther は、有償ソフト(PacketiX)だけになり取っ付きにくくなってしまった時期がありましたが、数年前に無償版が復活しています。
しかもオープンソースで商用利用も可という太っ腹っぷり。開発者様に感謝です。ありがとうございます。
VPNサーバーとなる EC2 の用意と事前準備
- EC2 作成
- SoftEther は linux でも windows でも動かせますが、ココでは CentOS 系の amazon linux2 ということで進めます。
- 外から繋がるようパブリックサブネットでパブリックIPも付けておきます。
- gcc がなければインストール
> sudo yum -y install gcc
- 通信が通るようにしておく。ファイアーウォールとかがあれば適宜対応。
SoftEther VPN Server インストール
> sudo wget https://github.com/SoftEtherVPN/SoftEtherVPN_Stable/releases/download/v4.29-9680-rtm\ /softether-vpnserver-v4.29-9680-rtm-2019.02.28-linux-x64-64bit.tar.gz -P /opt/
- SoftEther のバージョンは一番新しい RTM 版を使っておくのが良いと思います。
> sudo tar zxvf /opt/softether-vpnserver-v4.29-9680-rtm-2019.02.28-linux-x64-64bit.tar.gz -C /opt/ > cd /opt/vpnserver/ > sudo sh .install.sh
- ライセンスの問い合わせがあるので熟読のうえ yes。
自動起動
> sudo vi /etc/systemd/system/vpnserver.service
[Unit] Description=SoftEther VPN Server Service After=network.target [Service] Type=forking ExecStart=/opt/vpnserver/vpnserver start ExecStop=/opt/vpnserver/vpnserver stop WorkingDirectory=/opt/vpnserver/ [Install] WantedBy=multi-user.target
- 漏れや間違いなどあれば御指摘頂きたいです
> sudo systemctl enable vpnserver > sudo systemctl start vpnserver > systemctl status vpnserver ← active になっているか確認
VPNサーバー管理ツール
インストールさえ出来てしまえば、あとは windows のサーバー管理ツールを使って GUI で操作できます。素晴らしいです。SoftEther のアドバンテージの一つです。
もちろんコマンドラインでも操作できると思うのですが自分やり方知らずで・・・
- ローカルPC(windows)に、SoftEther VPN サーバー管理マネージャー をインストールします。管理ツールのみでOKです。
- SoftEther VPN サーバー管理マネージャー を起動したら、新しい起動設定 で EC2 の パブリック IP を指定して接続です。
- 繋がらないようなら EC2 の セキュリティグループやポート(443)が開いているか確認して下さい。
- 最初なのでパスワード設定ダイアログが出ますので設定します。
ローカルブリッジ設定(AWSでは不可)
次に、VPN Server に接続した接続元PCから、VPN Server のある LAN 内の PC (= VPC 内の EC2 ) へのアクセス方法ですが、残念ながら AWS はローカルブリッジが出来ません。
プロミスキャスモードを有効にすることが出来ないので諦める他ありません。
- SoftEther の設定で NoPromiscuousMode というフラグもありますが、制限事項が多々あるという説明の通り、期待した動作はしてくれませんでした。
- プロミスキャスモードが有効な環境であれば、仮想HUB と eth0 をローカルブリッジ機能で繋げることで、手元のローカルPC(接続元 PC) が VPNサーバーのある LAN に繋がることになります。
同じセグメントに繋がるので使い勝手としては最高なのですが、出来ない環境では諦める他ありません。
セキュアNAT
ローカルブリッジが不可な環境では、セキュアNATを使うことが現実的な解になると思います。
- セキュアNAT ってナニ?という疑問には SoftEther のサイトにある丁寧な説明を読むのが吉ですが、ざっくり言うと、VPNサーバーがルーターになり、VPNクライアント(ローカルPC)はその下にぶら下がる感じとのことです。
VMware などの仮想化ソフトによくある NAT 接続も似た感じですね。
- セキュアNAT ってナニ?という疑問には SoftEther のサイトにある丁寧な説明を読むのが吉ですが、ざっくり言うと、VPNサーバーがルーターになり、VPNクライアント(ローカルPC)はその下にぶら下がる感じとのことです。
- SoftEther サーバー管理マネージャー で "仮想 HUB の管理" - "仮想 NAT および仮想 DHCP サーバー機能" を開く
- SecureNAT 機能を有効にする
- SecureNAT の設定
- 仮想 DHCP を ON
- 仮想 NAT を ON
- プッシュする静的ルーティングテーブルの編集 で以下を追加
172.16.0.0/255.255.0.0/192.168.30.1
- 172.16.0.0/255.255.0.0 は VPNサーバー側(VPC)の CIDR で、192.168.30.1 はセキュアNAT 側のゲートウェイアドレスです。適宜合わせて下さい。
VPNクライアント側の設定
VPNサーバーの用意が出来ればクライアントは簡単です。windows なら特に。
サーバー管理マネージャー を見てもらうとわかると思いますが、SoftEther は多くの VPN の方式をサポートしています。
Windows や Android の OS 標準の VPN 接続が使えますし、OpenVPN も対応しています。
SoftEther クライアントアプリをインストールして仮想 NIC 越しの接続もアリです。
それぞれわかりやすい説明もありますので、御随意に選択するのが吉と思います。
注意点
- どういう方式で VPN 接続したとしても、インターネット(外部サイト)への通信経路は要確認です。
VPN を繋げた状態のローカルPC で youtube とかを見たときに VPN を経由しないようにすることが重要で、もし VPN 経由しちゃってると AWS 側の通信量の激増に気が付かずにパケ死の可能性アリです。- クライアント側の設定次第なので、おそらくサーバー側でどうこうするのは難しい気がします。サーバー側での対策例としては、外へのポート80,443は不可にするとかでしょうか。使い勝手が悪くなる気がしますが・・・。
よもやま
SoftEther VPN は GUI ツールが充実しています。しかも画面上に説明が表示されたりと、とても親切でよく出来た UI です。
自分は SoftEther1.0 の頃から触っておりますが、通信も安定していますし、アプリが落ちるとかは遭遇したこともなく、とても品質が良いソフトウェアだと思います。
このような優良なソフトを無償で提供されているっていうのは大変有り難いです。開発者様に感謝です。
がしかし、AWS などクラウドサービスにおいては、自前で頑張るより、胴元(AWS なら amazon 様)が提供するサービスがあるなら、可用性とかサポートも考慮して、まずそれの採用を検討するのが吉と思います。これは VPN に限らず何でも。
今後は、インフラ周りは業者が全て用意するからソフトウェア技術者はアプリ本来の開発だけに注力してね。っていう流れになっていくものだと思いますが、インフラ周りも楽しいですし、色々触ってみるのは良いことだと思います。
Page Info | |
---|---|
Page Name : | 技術系備忘録/AWS/SoftEtherを使ってVPN接続 |
Page aliases : | None |
Page owner : | takatsuka |
Can Read | |
Groups : | All visitors |
Users : | All visitors |
Can Edit | |
Groups : | No one |
Users : | No one |