目的
表題の通り。
「無料インターネット完備」の物件などで二重ルーターとなっている場合、自宅鯖を立てても外部からアクセスさせることは難しい。
そういう事情もあって、俺のmastodon自鯖https://don.neso.techはConoHaのVPS上で動いているわけだが、
例えばデスクトップPCにDebianのVMを立ててそこにブログサービスを立てたいとか、Raspberry PiにNextCloudを入れたのでスマートフォンからでもアクセスできるようにしたいとか、VPSは高いのでどうにかして自宅PCの余剰リソースを活用したい、なんていうケースが今後想定されるので備忘録的書いておく。
OpenVPN鯖を立てるためのVPS
ConoHa VPSの1GBプランがおすすめ。というか他を使ったことがないので比べようがない。
メリット
- このはちゃんがかわいい。
- 転送量課金がない。
- 1時間あたりの課金なのでちょっと生やして実験するのにも使える。
- 気軽にスケールアップできる。「1GBで始めたけどメモリ足りなくなったから2GBに増やす」ことができる。
デメリット
- DDoSに弱い。
- (512MBプランに限る) あとからのスケールアップができない。(スナップショットを取って1GBインスタンスに書き戻す方法がなくもないが)
OpenVPN鯖を立てる
大筋の立て方は以前書いた。
注) 上ではWindowsでOpenVPNを繋ぐのにvpnuxを使ったが、その後でWindows用のOpenVPN Clientを使って接続する方法も書いている。
注2) Windows ServerでないWindowsをサーバー用途に使うとライセンス違反になる。俺はオンラインゲームのPingを安定させるためにVPNを使っている.
そんなこんなでサーバーは生えるがドメイン宛のアクセスをVPN鯖にぶら下がっているデバイスに向けるようにしていく。
mydns.jp はいいぞ
なにーっ、ドメインがない?
https://www.mydns.jpで取得するヨロシね。
cronで定期的に生存報告をするのを忘れずに。
nginxの設定
/etc/nginx/conf.d/example.com.conf
とかを作っておいて
server {
server_name example.com;
location / {
proxy_pass http://192.0.2.0;
}
}
というのを最低限書いておけばお家の外からでも自宅のマシンに接続できるようになる。
SSL化もできる。
ぼくは前段のVPN鯖でLEを使って証明書をとってる。
sudo apt install certbot python-certbot nginx
sudo certbot certonly --nginx -d example.com -m someone@example.com
で取れる。
前段でSSL化する場合は、
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name example.com;
location / {
proxy_pass http://192.0.2.0;
}
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}
でHTTPSのみで接続できるようになる。
example.com
や192.0.2.0
は例示用のものなので、適宜読み替えてね。
ちなみにsudo sed -i /etc/nginx/conf.d/example.com.conf -e "s/example.com/sub.example.com/g
で一括置換もできる。
VPN鯖にぶら下がっているマシンのIPアドレス(ここでは192.0.2.0)はsudo cat /etc/openvpn/ipp.txt
で確認できる。
おわりに
proxy_set_header
ディレクティブを書いて後段にある本命のアクセスログにも接続元IPアドレスを記録する方法があるらしいけど、まだよくわかってないのでここでは割愛。
たぶんここまでで、ドメインだけで自宅PCに接続できるようになっているはず。
ping example.com
で反応があれば成功。
というのも過去記事と記憶だけで書いたので...
堪忍してつかあさい。
では。