新しい手法を利用した公開方法を書きました
はじめに
背景
・自宅のネット回線が遅すぎたのでv6プラスに変更したらv6プラスの仕様でWebサーバーが公開出来なくなって詰んだ
・IPv4アドレスのために新規回線を契約するのはアホくさい
・どうにかしてお金を掛けずにWebサーバーを公開したい
最終目標
443番ポート(SSL)でWebサーバーを公開する
ちなみに
SSHとかであればポート変更して対応出来るのでわざわざVPSを契約しなくても良いと思います。
SSLなど絶対に決められたポートでなければいけない、等の理由がない限りはポート変更をして運用することをオススメします。
v6プラスの仕様と解決策
・v6プラスは1つのIPv4アドレスを複数ユーザーで共有しているため、主要ポート(20, 22, 80, 443など)を使うことが出来ない
・しかし1契約につき240個のプロバイダ側で割り振られたポートであれば使用できる
・IPv4アドレスが付いてくる激安VPSを借りて踏み台にすればいいんじゃね?
ルーター側で任意のポートを開く
この記事ではポート開放については記載しません。Google等で「v6プラス ポート開放」で検索し、任意のポートを開放しておいてください。
自宅Webサーバーの設定を変更する
ここではnginxを使用していると仮定して解説していきます。
設定ファイルを開いた後、listenの項目を追加します。
server {
listen 80;
listen [::]:80;
listen 443 ssl;
listen [::]:443 ssl;
# 以下を追加 (ここでは開放したポート番号を4141番とする)
listen 4141;
listen [::]:4141;
# (略)
}
追加したら保存してnginxを再起動してください。
できるだけ安いVPSを借りる
・国内のVPS
・出来るだけ有名所
・月額1000円以下
・転送量無限
...という条件で色々と探したところ、ConohaとWebArenaあたりがベストという結論に至ったので、今回はConohaの512MBのプランを契約しました。(620円/月)
WebArenaのIndigoは350円/月らしいですが比較的マイナーっぽかったので今回はパスしました。あんましこだわりが無いのであればこれでもいいかもしれないです。
VPS側のセットアップをする
ここから先はDebianを使用していると仮定して解説していきます。
まず初期設定を済ませた後にSSHでログインし、certbotをインストールします。
$ sudo apt install certbot
certbotをインストールしたら以下を実行してください (ドメイン部分は置き換えてください)
$ certbot certonly --standalone -d example.com
(表示された指示に従ってメールアドレスを入力し、規約に同意してください)
次にnginxをインストールします
$ sudo apt install nginx
nginxのインストール後、設定ファイルを開いてください
$ sudo nano /etc/nginx/sites-enabled/default
すでに記載されている内容を全て消した後、以下を貼り付けてください
# Connection Upgrade
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
# WebProxy
server {
listen 80 default_server;
listen [::]:80 default_server;
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # 要書き換え
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # 要書き換え
server_name _;
client_max_body_size 2048M;
location / {
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $http_x_forwarded_port;
proxy_read_timeout 1m;
proxy_connect_timeout 1m;
proxy_pass http://12.345.678.90:1234; # ここを 自宅の共有IPv4アドレス:先程開放したポート に書き換えてください
}
}
貼り付けて proxy_pass, ssl_certificate, ssl_certificate_key の項目を編集したらnginxを再起動してください。
$ sudo systemctl restart nginx
以上でVPS側のセットアップは完了です。
DNSの設定を変更する
ここがかなり重要なポイントで、DNSのネームサーバーはCloudflareを使用することを推奨します。
Cloudflareを使用することでSSL証明書の更新の必要が無くなり、なおかつ複数ドメインにも対応出来る為です。(Cloudflareを通すことでCloudflare発行の証明書に置き換わる)
後はVPSのIPv4アドレスをDNSのAレコードに指定すれば完了です。
まとめ
・v6プラス環境でもこれまで通り自宅Webサーバーを公開できた!!
・月に数百円は掛かるものの、新規回線を契約するよりかは遥かに安く、簡単に出来る!
コメント