目的

表題の通り。
「無料インターネット完備」の物件などで二重ルーターとなっている場合、自宅鯖を立てても外部からアクセスさせることは難しい。

そういう事情もあって、俺のmastodon自鯖https://don.neso.techはConoHaのVPS上で動いているわけだが、
例えばデスクトップPCにDebianのVMを立ててそこにブログサービスを立てたいとか、Raspberry PiにNextCloudを入れたのでスマートフォンからでもアクセスできるようにしたいとか、VPSは高いのでどうにかして自宅PCの余剰リソースを活用したい、なんていうケースが今後想定されるので備忘録的書いておく。

OpenVPN鯖を立てるためのVPS

ConoHa VPSの1GBプランがおすすめ。というか他を使ったことがないので比べようがない。

メリット

  • このはちゃんがかわいい。
  • 転送量課金がない。
  • 1時間あたりの課金なのでちょっと生やして実験するのにも使える。
  • 気軽にスケールアップできる。「1GBで始めたけどメモリ足りなくなったから2GBに増やす」ことができる。

デメリット

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.com192.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で反応があれば成功。

というのも過去記事と記憶だけで書いたので...
堪忍してつかあさい。
では。

Next Post Previous Post