SSブログ

Raspberry Pi (の6) [プログラム]

IPsecは断念しましたので、openvpnを入れてみました。

IPsecのときに作った証明書などをそのまま流用しましょう。というか、もともと、openvpn用に作ったものだけど。/usr/share/doc/openvpn/easy-rsa/を使って作りました。
openvpnサーバとして足りないものは、
    server.key,crt  (クライアントでなくサーバとして; クライアント用のが流用できたりするのでしょうかね?)
    dh1024.pem      (2048bitにするのもよいですが、相当な時間がかかります)
    tls-ta.key      (あまり使われてないようですが、使いましょう。サーバに入るためのパスワード代わりです)
です。いずれも期限は10年くらいにしておいたほうがよいです。でないと、1年後に動かなくなって、慌てることになりかねません。

私はtunよりもtapの方を好みます。それはユーザにとって単純だからです。少し語ってみましょう。お急ぎの方はここを飛ばしてください。

使う方から言えば、tunはP2Pデバイスで、tapはイーサネットデバイスです。つまり、tunはルータみたいなもの、tapはハブみたいなものです。ルータって、設定が面倒ですよね。最近は半自動になりつつありますが。そんな設定をやりたくない、ハブだったらつなぐだけじゃん、という人向け。ユーザから見たら、そのイーサネットのコネクタが、こっちと100km離れてるかもしれない向こうのイーサネットコネクタが、同一のハブのコネクタとして使えるのです。簡単ですよね、その仮想のハブにつなぐだけで向こう側につながるのですから。tapなら、iptablesの設定も難しくありません。暗号化されたデータしか流れない物理デバイスと、通常のデータしか流れないtapデバイスと完全に分けて考えることができるからです。単純で簡単でしょ。
…とか言っておきながら、最後にはルータ化してしまうのですから、統一感のない曖昧なポリシーです(笑)。でも、単純なパーツを組み合わせて複雑にするのと、元々複雑なものを組み合わせるのを考えると、前者が圧倒的に簡単で間違いなく実行できることは明らかですよね。この、単純なパーツを組み合わせて複雑なことをする、というのは、まさに*nixのポリシーでもあるわけですし。

さて、必要なファイルを置いて、openvpnを起動すると、難なく動き出します。あとは、iptablesの設定とroutingの設定、それから、どうやってopenvpnを立ち上げるかとかです。
簡単なものから始めましょう。

  1. openvpnの立ち上げ
    本体を起動直後にopenvpnを自動起動する方法は最近ではいくつかあるようです。昔ながらの/etc/init.d(rc*.d)から起動する方法、/etc/network/interfacesにopenvpnで起動する方法、など。後者の方法では、インターフェースがアップしたときにopenvpnが起動されますから、常時起動していないと言う点でセキュリティ上のアドバンテージが少しあります。
    今回は、24時間稼働ですので、起動時にinitから起動する方法にしてしまいます。これは、
           # update-rc.d openvpn defaults
    で完了です。
  2. routingの設定
    tapなので、eth0などと同じような感じで設定すればよろしい。単純。
  3. iptablesの設定
    これは、openvpnの運用方針にも絡むので、個別に設定するしかありませんが、ここでもやはり、tapなので、eth0などと同じような感じで設定すればよろしい、単純、ということです。
    今回つくろうとしているものでも、firewall機能も入れようとしているので、上流側(インターネットルータ側)と下流側(LAN側)では、iptablesの設定が異なりますし。firewall機能を入れない、本当の仮想ハブにするなら、ブリッジにしてしまえばよいわけで(物理デバイスとtapをbrctlでつないでしまう)、iptablesを使うこともなく、簡単にできるでしょう。
    firewall機能を入れると上下が非対称になるので、いくつか考えないといけません。どこをMASQにするのか、とか。基本的には、上流でルータ側に出ていくときにMASQしてやればOKで、あとは、どれだけ守るかの設定になります。例えば、WAN側から新規に入ろうとしてくるのはすべて遮断とか、暗号路ではopenvpnのポート以外はすべて遮断とか。下流側では、さほど守る必要がなければ(LAN側なので)、単なるゲートウェイ設定だけで終わりです。iptablesを使って、入ってくるのを守るのもよいでしょうし、tapへ出て行くときにMASQするのもよいでしょう。
    このように、openvpnでtapを使うと、直感的にroutingとiptablesの設定ができ、非常に簡単で、簡単に動作します。



上記のように設定したのですが、openvpnでtcp-tlsを使いました。

openvpnのサーバを複数設定して使っている場合、同じCA局を使うと、どちらのサーバへも接続できてしまいます。なんで? openvpnの認証は、「サーバが知っているCA局が署名したクライアント公開鍵が正しければ、そのクライアントに接続を許可する」ようになっているようです。(公開鍵なんだから、他人がそれをコピーして使ったら? いえいえ、秘密鍵がないと、公開鍵で復号可能な暗号文を作成できません。ですので、暗号文がサーバで復号化できないので、やはり接続できないのです。) CA局は同一でも、サーバで接続するクライアントを制限したい、となると、いくつか方法があります。その中でもtls-serverで制限するのが簡単でしょう。DoS攻撃も防げますし。


次は、無線+openvpnでの通信速度を測定してみましょう。



共通テーマ:パソコン・インターネット

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。