集合住宅 LAN の内側にサーバを置いた話 (自宅サーバの思い出 Advent Calendar 2016)

[自宅サーバの思い出 Advent Calendar 2016](http://www.adventar.org/calendars/1587l) 7日目です。

引越したらグローバル IP アドレスがもらえない環境になり、そこでなんやかやして自宅サーバに外部から接続できるようにしたという昔語りというか苦労話というかそんな感じのお話です。

## 引越し前は素朴な環境でした

5年ほど前に引っ越しを行ったのですが、その前は ADSL による接続を行っていました。ADSL モデムは設定次第で、直接接続している PC に直接グローバル IP アドレスを付与することができましたので、以下のような素朴な形で外部からサーバに接続できるようにしていました。

![引越し前.png](https://qiita-image-store.s3.amazonaws.com/0/108915/b0667cb9-c4ca-5823-63d3-ea37dd3e4c77.png)


教科書通りの構成にするなら、DMZ を作って、サーバはそちらへ配置とかすべきでしょうけど、機材の場所も取る[^1]し設定も面倒だしということで手抜き仕様です。

[^1]: ルータにしてる PC に LAN ポートひとつ増やすだけなんですけど、ルータ PC に大体 Mini-ITX 品使ってたので増やそうとすると Micro-ATX くらいに大きくするしかなかったのですよ。USB Ethernet 使うのもアレだし。

## 引越しました

さて引っ越しました。部屋がとっても広くなりました。サーバいっぱい置けます。先立つものさえあれば……[^2]
引越し先はインターネット接続環境完備。部屋の隅にあるコネクタに LAN ケーブルを差し込んだらすぐにインターネットにつながる。素晴らしい！
が、ここには落とし穴があったわけです。なんと割り振られるアドレスはプライベートアドレスなわけです。「なんと」とか書きましたが、住人の数を考えると当たり前っちゃ当たり前ですね。
住宅に割り当てられているグローバル IP アドレスにアクセスしたところで、当然自宅 LAN に接続できるわけもなく。これは何とかせねば。

![新居.png](https://qiita-image-store.s3.amazonaws.com/0/108915/11b41a94-720c-e307-1044-957847f26878.png)

[^2]: そんなものはないので相変わらず1台です。

## グローバル IP アドレス付与サービスがあったけどサーバ立て禁止でした

何か手はないかと、サービスの案内を読むと、グローバル IP アドレス付与サービスというものがあるではありませんか。これだ！ と早速申し込み。
数日後に届いたパンフレットの規約を読むと、**サーバ立て禁止**の条項が。
問い合わせたところ、このサービスは、NAT 超えができず、UPnP も使えないような ~~ショボイ~~ ネトゲを遊べるようにするための救済措置であって、サーバを 24 時間運用するような用途は想定していないとのこと。
これは諦めた方がいいかと思いつつも、ダメモトで、通常の (プライベートアドレスが割り振られる) サービスの方にはサーバ禁止条項がないけど、立てていいのかと聞いたところ、そのような想定はしていないけれど、あまり派手にトラフィックを流さなければ別に構わないとのこと。自分と友人が時々アクセスする程度ですので、まず迷惑を掛けるほどのトラフィックは流れません。なので、通常のサービスを利用しつつ自宅内 LAN にアクセスする方法を考えることにしました。

## VPN 立てました

そこで思い付いたのが VPN。固定グローバル IP アドレスを持った VPN サーバを立ち上げ、そこに内部から接続。VPN サーバが適切に LAN へルーティングできるようにすれば VPN サーバ経由で外部からも接続できるという寸法です。
ではその VPN をどう調達するかという問題がありますが、これは VPS を借りることにしました。
VPS を借りるくらいなら、自宅サーバを廃止してもいいじゃないかという意見もあるかもしれませんが、自宅サーバには TB オーダーのデータがありますので移行は見送り。それに自宅サーバってロマンだしね。

![新居+VPS.png](https://qiita-image-store.s3.amazonaws.com/0/108915/7deeaa1f-8ff8-98c6-ac62-ddc75ca43f39.png)

## 接続できるように……なっていませんでした

VPS を借りてルーティングテーブルも設定。これで外部から接続できるようになってるはず、と意気揚々と接続テスト。
が、繋がらず。パケットキャプチャを取得すると、きっちりサーバにパケットは届いていて、応答も返している。
何故？ としばらく考えてはたと気付きました。ルータのデフォルト GW が VPN を通るようになっておらず、異なる IP アドレスで応答が返ってしまっていることに。

![新居+VPS 失敗-編集済.png](https://qiita-image-store.s3.amazonaws.com/0/108915/63b1a904-8f26-2e29-2dae-c11f7e8aa5bf.png)


## ルーティングを工夫しました

さてどうしようとしばし考え。VPS 経由で飛んできたトラフィックは VPS に返したいし、他のトラフィックは通常のゲートウェイ経由で返したい。

リバース NAT で VPS を送信元と偽る……LAN 内のサーバも元々の接続元を知りたいからこれはなし。

ルータ側で iptables 駆使すれば何かできるんじゃね？ ……ごめん分からなかった。

最終的に、LAN 内サーバに別のローカル IP アドレスを割り振ることにしました。ルータが外向きにルーティングする時、送信元が新しく割り振ったものなら VPS 経由、それ以外なら通常のルーティング。これで晴れて正常な応答を返せるようになりました。

![新居+VPS 成功.png](https://qiita-image-store.s3.amazonaws.com/0/108915/feced234-19e8-af74-0166-3192f80cd077.png)


## カオス度が増しました

その後、ConoHa の VPS も借りたので、同様に VPN を構成しました。
また、某所の IPv6 VPN サービスにも申し込み、IPv6 接続もできるように[^3]なって現在に至ります。

![新居+VPS-現在.png](https://qiita-image-store.s3.amazonaws.com/0/108915/c5e19eb9-cb00-467b-795b-ef0cd16f125a.png)

そんなこんなで、サーバひとつを LAN 内に置いているだけにしてはカオスな雰囲気を醸し出している我が家の LAN 構成。
LAN 内への経路が 3 つあるおかげで、多少トラブってもどれかは繋がっていることが多いので、割と快適な自宅サーバ生活を送れています。ただ、ルータが落ちると全部ポシャるので、ここも二重化したいなーと思ったり思わなかったり。昔語りのネタにして終わるのではなく、まだまだやっていきますよー。あ、電気代…… [^4]

[^3]: LAN の各ノードにグローバル IPv6 アドレスが割り振られるようになったので、結局 LAN 内のみんなに自前でファイアウォールを持たせることになりました。
[^4]: 一時期 27K円/月くらいかかっていましたが、最近は 15K円/月程度に収まってますので改善はしてますが……

## おまけ

サーバだルータだなんて書いてますけど、実態はこんな感じです。まるっきりその辺の PC。そして扱いが雑。

![サーバなど.png](https://qiita-image-store.s3.amazonaws.com/0/108915/338675fa-1f57-4984-e0d4-313dd7aa780d.png)