自宅サーバで自由に使えるグローバルIPアドレスが欲しいよね
V6プラスを契約した自宅回線、大学やエンタープライズNWでインターネットに鯖を公開したい人向けの記事です。
事の発端
今まで契約していた光(コラボ)回線を別の光(コラボ)回線に変更したら、契約プロバイダが払い出したPPPoEを使わないで欲しいと言われてしまい、どうしようか途方に暮れたある深夜、AWS経由させれば自由なIP addr手に入るのでは?!と思いついてしまった。
※もちろん、別にフレッツプロバイダ契約してPPPoEすれば済むじゃんというのはごもっともです。ただ、もっと安く、高速に通信出来ないかという検証も含めてこれやってます。
※こんな面倒なことしなくてもたくさんマネージドなVPNサービスはあるので手間省きたい人はそれを使うのが良いと思います。
計画
出来れば、国内の固定IPサービスの最廉価価格帯である 1,100円 を下回りたい。
- AWSに安価にOpenVPNサーバを立てる
- AWS側で固定IPを取得する
- (うちの場合は)Synology DSMにOpenVPN clientを設定する
- いい感じにルーティングしてインターネットからSynology DSMにアクセスする
用意する物
今回は安価に、かつできる限り定額でやっていきたかったので、転送量以外は基本定額なAmazon Lightsailを採用しました。EC2 & Elastic IPでも出来ると思います。(ただちょっとネットワーキングでやること増えそう)
- Amazon Lightsail インスタンスx1 (Amazon Linux, サイズは最小で今回はやりました)
- Lightsail の static IP(アタッチしてる間は無料です)
- V6プラスの回線※
※今回は443ポートしか疎通出来ない厳しいNW環境下で外部と自由にやりとりすることを目的としているので、国外、大学やエンタープライズNWなどでも活用できると思います。
手順
概ね標準的なOpenVPNサーバの構築ですので、詳細な手順は先人達のエントリをご覧頂くとして概要を載せます。
今回は鍵ペアを利用した認証をします。信頼できるCAから証明書類を発行出来る場合は証明書発行うんぬんのところは飛ばして、代わりに証明書を転送しておいて下さい。
- Lightsailインスタンスを作る
詳細は割愛します。私はAmazon Linuxを選択しましたがご自身が一番使いやすいのを選べば良いと思います。ココに乗ってる手順はAmazon Linuxのものです。 - LightsailインスタンスのファイアーウォールをWebUIで操作する。
tcp 443
を開けておく。 - openvpn, EasyRSAをインストールする
3.sudo yum update -y
4.sudo yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
5.sudo yum install openvpn -y
6.sudo yum install easy-rsa --enablerepo=epel -y
- EasyRSAでCAとサーバー証明書、クライアント証明書などを作成
8.easyrsa init-pki
9.easyrsa build-ca
10.easyrsa gen-dh
11.easyrsa build-server-full server nopass
12.easyrsa build-client-full client nopass
- 作った証明書類をOpenVPNの設定ディレクトリへ移動
14.sudo cp pki/ca.crt /etc/openvpn/
15.sudo cp pki/issued/server.crt /etc/openvpn/
16.sudo cp pki/dh.pem /etc/openvpn/dh2048.pem
-
ip a
でサブネット情報を確認しておく
これ次で使うので横着しないで下さい - サーバー設定を変える
sudo vi /etc/openvpn/server.conf
このとき、proto tcp
,port 443
,push "route [インスタンスのプライベートIP] [サブネットマスク]"
を追加しておく。他の設定はお好みで。 - OpenVPNサーバを再起動しておく
sudo service openvpn restart
- クライアントに必要な証明書類を転送しておく
必要なのは、ca.crt
,client.crt
,client.key
です。設定によって、TLS関連のあれこれなども必要になってきます。 - 必要に応じて
.ovpn
ファイルを生成しておく - NATを設定する
20.sudo iptables -t nat -A POSTROUTING -s [OpenVPN ClientのIP] -o eth0 -j MASQUERADE
これで OpenVPN clientがインターネットと疎通出来るようになる
21.sudo iptables -t nat -A PREROUTING -i eth0 -j DNAT --to-destination [OpenVPN ClientのIP]
これでグローバルIPへ着信した接続がOpenVPNのclientへ飛ばされる
今回はインスタンス使い捨てでもいいなと思ったのでこの設定にしてますが、末永く使いたい場合はインスタンスへssh出来るポートを残しておく必要があるのでポート範囲でNATするなり工夫すると良いと思います。 - クライアントから発着疎通確認しておわり。
SynologyDSM OpenVPNの設定について
これはおまけ的な情報ですが、 .ovpn
ファイルに証明書類を一緒くたにして記述する方法はうまくいきませんでした。以下の画面で証明書を一つ一つ指定するとうまくいったので困った人は試してみると良いかもしれません。
注意事項
AWSなのでデータ転送量課金があります。そのため一般公開するようなサーバであれば、コストの見積もりをしっかりしておく必要があります。また、DDoSなどの対応をちゃんとしていないと莫大な請求が来たりするかもしれません。
最安のLightsailインスタンスだと1TBまで無料なので、今回の私のニーズとしては十分だったのでこの手法をとりました。
さいごに
自由なインターネットさいこう。