2020年10月23日金曜日

宅内LAN配線してIPv6とIPv4を両立してVPNサーバを立ててみた

今年の秋についに一軒家を購入したので、家庭内のLANを構築しなおしました。
備忘録を兼ねてゼロからLANケーブルを壁内配線してネットワークを構築するまでをまとめます。

やっぱり高速なIPv6(IPoE)で有線LANを引き回したいし、VPNもつなぎたい

宅内でLANを引き回すからにはなるべく高速で快適な環境を作りたいですね。
インターネットの接続はPPPoE方式ではなくIPoE方式とします。
IPoE方式などはこちらが参考になりました。

IPoE方式についていろいろ調べてみると、サーバの公開やVPNサーバがそのままではできないことが分かり、先人たちが二重ルータにしたりいろいろ試行錯誤されていることも分かりました。
要はIPv4ネットワークとIPv6ネットワークを共存させれば何とかなりそうです。
今回はIPoEオプションが2020年1月から無料になったということでIIJのmioひかりを契約しました。

有線を宅内に配線する

インターネットへの接続方法が決まったところで、宅内に有線LANを張り巡らせる方法を考えます。
壁内に配線管(CB管)をあらかじめ用意しておき、そこにLANケーブルを通すのが理想的ですが、私が購入した家はそのような配線管はありません。
そうなるとLANケーブルを引き回すには部屋の中にモールを設置してそのモールの中をLANケーブルを通すか、どうにかして壁内を引き回す必要があります。
モールは簡単でよいのですが、見栄えが良くありません。
ということで、大変そうですが壁内にLANケーブルを通すことにしました。

住宅の構造がどうなっているのか調べてみた

今回LANケーブルを引き回す我が家はいわゆる在来工法(木造軸組構法)です。
在来工法は木で柱と梁で構造をつくり、そこに壁を張っていきます。
梁の両側に壁を張るため、壁と壁の間にスペースができます。そのままでは断熱効果が弱いので断熱材をこの壁の間に敷き詰める構造になっています。
上から見た断面図はこんな感じです。

今回、この壁と断熱材の間にLANケーブルを通していきます。

我が家はロフトのような屋根裏収納があり、そこから点検口を通じて屋根裏に入ることができます。
この屋根裏収納を簡易サーバルーム(夏は暑いのであまりよくないですが...)にするため、屋根裏と各部屋にLANケーブルを配線します。
LANケーブルはコンセントに接続口を設ける形にします。

屋根裏から壁の中へ通線ワイヤを通す

壁内を通すといっても、壁の中へ入ったりすることはできないので、何らかの方法で屋根裏からコンセントまでLANケーブルを通す必要があります。
今回は通線ワイヤを用意して作業することにしました。壁の中を通すためになるべくスリムなものをということで、ジェフコムのDENSAN BX4030Jを用意しました。
ケース付きでお買い得です。



作戦としては、屋根裏からコンセントにつながる電力線(VVFケーブル)を探し、その電力線伝いに通線ワイヤを壁の中に通していきます。
屋根裏はこんな感じでした。下に見えている白いものが断熱材です。断熱材の下は天井なので、体重をかけたら天井が抜けて下に落ちます。柱の上を通って電力線を辿っていきますが、柱と柱の間隔が空いているところがあるので、近所のホームセンターで2×10の木材を買ってきて足場にしました。


通線前にあらかじめコンセントのふた(?)を開けておきます。
天井裏から壁の中に通線ワイヤを通し、ワイヤの先が目的のコンセントまで到達したら、その先にLANケーブルを取り付けて屋根裏に引っ張り上げて作業完了です。
ワイヤの先が目的のコンセントにうまくいくかは運次第です。何度もワイヤを出し入れしてようやく目的のコンセントまで届きました。


ここまでくれば後は通線ワイヤの先にLANケーブルを括り付けて天井裏に引っ張り上げるだけです。
これを繰り返して必要な部屋にLANケーブルを配線しました。

コンセントのLANケーブルの接続口はぐっどすを使いました。
LANケーブルのコネクタは結構つけるのが大変なイメージがありましたが、工具もいらず楽ちんです。
こんな感じでLANケーブルの口を取り付けることができました。


CD管を通しているわけではないので、交換することはしばらくないだろうと思い贅沢にCAT6のケーブルを通しました。

外からVPNでつなげるようIPv4を共存させる

さて、物理的な接続ができたところで宅外からつなぐ用のIPv4とインターネットに高速に接続するためのIPv6を共存させる方法を考えます。
以前やっていたように、外部にVPNサーバを立てて家庭内のサーバからブリッジを張るという方法もあり、これでもうまくいきそうな気がしましたが、なんだか複雑になってしまいそうなので、なるべくシンプルにしたいところです。

いろいろ調べてみると、以下の記事が見つかりました。

これはいいなということで、こちらの記事を参考にネットワークを構築することにしました。

VPNがつながらない

ubuntuマシンにSoftether VPNサーバを立てて、ルータの設定をしてみました。
構成は以下のような感じです。



上記の記事にあるようにルータ側の設定でVPNサーバからの通信はIPoEではなくPPPoEで接続するように設定してあげます。
こうすることでVPNサーバからの通信はPPPoEによるIPv4接続、ほかのPCやスマートフォンからの接続はIPv6接続できるようです。

しかし、LAN内部から外部にIPv6で出ていくことはできるのですが、外部からVPNサーバへの接続ができません。
ためしにルータの接続方式をPPPoE(IPv4)に変えると外部からVPN接続できました。
どうやらVPNサーバ自体は正常に動いているようです。
ルータの設定を色々変えて試してみましたが、結局IPoEにして外部からVPNサーバへ接続することはできませんでした。
何日か悩んで結局うまくいかず諦めました。

二重ルータにしてみる

ルータを一台の構成は諦めて、ルータを2台使用する方法を試してみました。
構成はこんな感じです。


ルータ1はIPoEで接続するルータで、PPPoEパススルー(Baffuloはこういう設定名のようです。PPPoEブリッジとか呼ばれる場合もあるようです)設定しておきます。
もう一台のルータ2PPPoEで接続するルータです。
また、この2台のルータのLAN側を接続して同じLANセグメントとしておきます。
(この時、片方のDHCPサーバ機能はOFFにする必要があります)
ルータ1,2どちらをデフォルトゲートウェイに設定するかでIPv4ネットワークに繋ぐか、IPv6ネットワークに接続するかを選択できます。

この構成で試してみたところ、やはり外部からVPNで接続することができませんでした。
今回はIPv4の方は固定IPではないためDDNSを使用する方法にしていましたが、どうやらIPv4のDDNSサーバにアクセスができていないようでした。

IPv6用のルータ1の設定をPPPoE(IPv4)にすると正常に接続できるので、おそらくIPv4用のルータ2でに出て行くことができていないと思われます。

ONUからスイッチングハブでIPv4とIPv6用のルータで分けてみる

ルータを2台でPPPoEパススルーを使用する構成はうまくいかなかったため、ONUからの配線をスイッチングハブで2台のルータにそれぞれ分ける方法をとってみました。

構成は以下の感じです。

先ほどとの違いは、ルータ1はPPPoEパススルー機能が必要ないということです。
ルータ1,2のWAN側はスイッチングハブ(HUB)に、ルータ1,2のLAN側をそれぞれ接続して同じセグメントにしておきます。

この構成にしても、二重ルータにする方法と同じ結果で、デフォルトゲートウェイをIPv4側にしてもIPv6で接続しているようでした。
いろいろルータの設定をいじりながら悩みましたが、結果的にIPv6側のルータで送信元のIPがVPNサーバのものは全て無視するようにパケットフィルタリングの設定をしたところ、無事にVPN接続ができるようになりました。
おそらくVPNサーバからDDNSサーバにパケットを送るときにIPv6側のルータを通ってしまっていたためと思われます。(ルーティングの問題?)

VPNサーバ自体でPPPoE接続してみた

何とかルータ2台とスイッチングハブを使用して目的は達成できましたが、外からVPNサーバに接続するためだけにルータを一台用意するのはあまりスマートとは言えないですね。
どうにかもっとシンプルにできないかと考えていたところ、PPPoEで接続するためにルータを用意するのであれば、VPNサーバ自体がPPPoEで接続すれば良いのではと思いつきました。
調べてみるとRaspberry Pi 4で同じようなことをやっている方がいました。

こちらの記事を参考にさせていただきました。
(ほとんど丸ごとコピペです)

最終的な構成は以下のようになりました。結局、最終的に考えていた構成と同じでかなりシンプルです。



VPNサーバにpppoeとpppoeconfをインストールして、PPPoE接続している時のデフォルトルートを変更しておきます。忘れずにルータのPPPoEパススルーも有効にしておきます。
VPNサーバに直接グローバルIPが割り振られることになるのでファイヤーウォールの設定もしておく必要があります。今回はVPN接続に必要なポートと、SSH用のポートのみ開放としておきました。

おうちネットワークは楽しい

引越しを機に久しぶりにネットワークの構築を行ってみました。
LANケーブルの引き回しやIPv6についてなど、初めてのことが沢山ありますとても勉強になりました。何より自分で何かを作っていくのは楽しいですね。

2020年1月4日土曜日

M5Balaのサンプルプログラムを動かすまでの顛末

あけましておめでとうございます。

本業のほうがかなり忙しく、年末まで個人的な開発はほとんどできない状況でした。
今年の年末年始はM5Balaを買ったのでこれを題材に制御のお勉強をしたいと思います。
M5Stack自体は以前から触ってはいたのですが、今回は本格的に開発したいということでPlatformIOの開発環境を整えてM5Balaのサンプルプログラムを動かしてみます。
この過程でかなりはまった点があり、これについても記載します。