treedown’s Report

システム管理者に巻き起こる様々な事象を読者の貴方へ報告するブログです。会社でも家庭でも"システム"に携わるすべての方の共感を目指しています。

※https化しました。その影響でしばらくリンク切れなどがあるかもしれませんが徐々に修正していきます。 リンク切れなどのお気づきの点がございましたらコメントなどでご指摘いただけますと助かります。

RaspberryPiでSoftetherで必須なtapデバイス

こないだからRaspberryPiの記事ばっかりで他の話題を期待されている方には申し訳ないことになっております。
今日はRaspberryPi3でSoftetherを動作させる場合に重要となるtapデバイスについてのご報告です。

分かりにくいtapデバイス

RaspberryPi 3を含む全てのRaspberryPiでSoftetherを構成してVPN、というのはもう何を今更な感じで各サイトに情報はあふれかえっています。
単純にSoftetherを構成して接続できるようにするだけならこれらの先人の知恵をお借りすればOKなのですが、この際に重要になる知識が

  • ブリッジ(ブリッジング)
  • tapデバイス

の二点です。
これ、分かりにくくないですか?いやそんなことないのですかしら。

個人的には把握するまでちょっと時間が掛かったのでここでまとめておこうと思った次第です。

tapデバイスの構成

まず結論からどういう構成になるか、と言うところを図にしてみましょう。
図:構成図

f:id:treedown:20160909090513p:plain


Softetherをインストールするにあたり、tapデバイスを利用するためNICの内部でブリッジを作成することになります。これを実現する機能を、
$ sudo apt-get install bridge-utils
と実行して「bridge-utils」のインストールを事前に済ませます。
「/etc/network/interfaces」をお望みのように編集して通信できるようにするわけです。実際にユーザになる我々が使うのはeth0やbr0に設定されたIPアドレスを参照して使うことになります。※正直どっちを使うのかというところはまだ調べていません。
ただ、softetherがサイト間接続で参照するのは各1号機/2号機のtapデバイスで、ブリッジネットワークとしてtapデバイスからtapデバイスへ接続を行うことでサイト間接続を実現することになります。

要するに「bridge-utils」をインストールすることによって、softetherが生成するtapデバイスとeth0を内部的にブリッジ=L2で接続することによってsoftetherの通信もサーバに向けた通信も同じように受け取って上手いこと処理してくれることになります。

f:id:treedown:20160909091129p:plain
この画面で追加したtapデバイスを以下のように内部的に接続しています。

----------------------------------------------
$ sudo ip tuntap
tap_vlan: tap
$ sudo brctl addif br0 tap_vlan
$ sudo brctl show br0
bridge name  bridge id        STP enabled   interfaces
br0      8000.00aca5eeebce   no        eth0
                          tap_vlan

----------------------------------------------
これで内部的にeth0がtapデバイスがブリッジされるようになるので、softetherの通信が成立するようになります。

課題

br0とeth0の使い分けがよく分かっていない、というところはあります。
サイト間接続以外の機能を利用する場合にはどっちにIPを振ったらいいのか、という点とか、そもそもaptでアップデートとかアラートメール発行とかするときはどのNIC?⇒br0?ないしeth0?というところです。

サイト間接続でブリッジしようとしているので、DHCPは1台だけで賄う必要があるのですが、この場合、ブリッジ接続が有効なネットワークとそうでないローカルエリア(ルーティングしない別のセグメント)をどう分解するかもちょっとした課題です。
※今、頭の中こんがらがり中

なかなか難しいもんですね。

※頭の中を整理しました⇒続編

blog.treedown.net