自宅サーバを構築したいけれど、マンションのネット回線だとできない...そんな悩みを抱えている人も少なくないはずです。今回はそんな環境でも自宅サーバを構築することができたのでまとめてみます。
問題
- サーバーを公開したいのに、二重ルータのため公開できませんでした。
- Hamachiは M1 macには対応していませんでした。(2021年5月現在)
- クライアント側のポートが固定できませんでした。1
解決策
事前準備
自宅サーバのIPアドレス固定
初期設定では機器のIPアドレスが動的に変更されてしまうのでIPアドレスを固定します。
システム環境設定>ネットワーク>Wi-Fi>詳細...>TCP/IP と進み、以下のように設定します。
VPN構築
VPS上でVPNサーバを構築する
コスパがとても良かったので、ConoHaのVPSを借りました。こちらの記事を参考にOpenVPNをVPSにインストールしました。CentOS8だと動かなかったためCentOS7にしました。2
ポートフォワードの設定
外部からWebサーバへのトラフィックを自宅サーバに流すように設定します。
こちらの記事のClientPCをVPSのグローバルIP、WebServerを自宅サーバに読み替えてください。
今回は4230/udpを使用したので、以下のように設定しました。
external (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: ssh
ports: 1194/udp 4230/udp
protocols:
masquerade: no
forward-ports: port=4230:proto=udp:toport=4230:toaddr=10.8.0.2
source-ports:
icmp-blocks:
rich rules:
internal (active)
target: default
icmp-block-inversion: no
interfaces: tun0
sources:
services: dhcpv6-client mdns samba-client ssh
ports:
protocols:
masquerade: yes
forward-ports:
source-ports:
icmp-blocks:
rich rules:
自宅サーバ編
そのままの設定だとサーバとしては動作するものの、ブラウザやzoomなど、他のソフトウェアが一切使えなくなってしまいました。完全にサーバ専用にするつもりはなかったため、サーバーとしての通信以外はVPNを経由しないようにしました。
OpenVPNのコンフィグ設定
OpenVPNのクライアント(自宅サーバに該当)のルーティングテーブル設定は、VPN接続中のみトラフィックがVPN経由になるよう変更されます。どのような設定になっているかは、VPN接続中にnetstatコマンドで確認します。
$ netstat -rn
Routing tables
Internet:
Destination Gateway Flags Netif Expire
0/1 10.8.0.1 UGSc utun6
default 192.168.0.1 UGSc en1
128.0/1 10.8.0.1 UGSc utun6
VPNの初期設定の場合、0/1 10.8.0.1
128.0/1 10.8.0.1
とあるため、ルーティングテーブルの他の項目に当てはまらない通信はVPN(10.8.0.1)に転送されていることがわかります。
そこで、VPNサーバの設定を変更します。
/etc/openvpn/server.conf
のredirect-gatewayの設定をコメントアウトしました。
# push "redirect-gateway def1 bypass-dhcp"
VPNサーバを再起動して適用します。自分が試した時はfirewallが再始動せず、VPNに接続できませんでした。その場合はfirewallも再始動させてください。
まとめ
ここまでの設定で通常のPCとしての使用をしつつ、サーバとして公開したいポートのみ公開することが出来るようになりました。
助けてくれた人たち
@YYBatt さん : 色々なアドバイス、デバッグ等、全体的に助けてもらいました。
きょー。 / Yukiho さん : ConoHaへのOpenVPN構築/Firewall設定で助けてもらいました。
-
UDPホールパンチングができなかった ↩