LANDISK を PPTP サーバにする

[戻る]

はじめに

外から自宅の LANDISK (HDL-160U) に入れたファイルをアクセスしたいことがあります. ftp を使うとか WebDav を使うとかいう方法もありますが, せっかくなので 家庭内 LAN 全般にアクセスできるよう, 噂に聞いた pptp を入れてみました.

バイナリの作り方

以下に手順を示しますが, 思い出しながら書いてます. やったけど忘れた重要な手順とか, 不必要だった手順があるかもしれません. また, 私の LANDISK は過去にいろいろいじくったのでもしかしたら, ノーマルの LANDISK では本手順では上手くいかないかもしれません.

とにかく, 作るのは結構大変だったので一応バイナリを用意しました. バイナリがあればいいという方はこの章は読み飛ばしてかまいません (次の章で作ったモジュールを置いておきます). .

必要なもの

ちなみにカーネルソースは ここから拾いました. pppd は仮想ルートにもとから入っていますが, 暗号化に対応してないバージョンなので作り直す必要があります.

実行モジュール生成

まずは get したソースをコンパイル, インストールしていきます.

  1. 初期設定

    仮想ルートに入り,
    # PATH=$PATH:/usr/local/bin
    と入力

  2. ppp をコンパイル

    と言っても ppp を作るためには libpcap が要り, libpcap を作るためには flex が要り, flex を作るためには yacc, yacc のためには m4 と次から次へ必要なものが出てきますので m4, yacc, flex, libpcap, ppp の順に作っていく必要があります.

    手順は
    # tar xvf [tar.gz ファイル] | tar xvf -
    # cd [展開されたディレクトリ]
    # ./configure
    # make
    # make install
    といった感じでしょうか. もしかしたら, flex までは Debian のパッケージにあったかもしれません.

  3. PoPToP, patch のコンパイル

    手順は上記と同じです. 順番は特に関係ありません.

  4. 必要なカーネルモジュールの作成
    1. 展開

      # tar xvf HDLSRC42.TGZ | tar xvf -
      kernel のソースはその下の kernel/031225/linux-2.4.21-iodata にあります.

    2. パッチ

      手順 2 における ppp のディレクトリのさらにその下の linux/mppe まで行って
      # ./mppeinstall.sh [上記の kernel ソースディレクトリ]
      と打ち込みます. この時点で手順 3 で作った patch が必要です.

    3. コンフィグ

      # make config
      と打って以下の物をモジュール (m) に設定する.

      CONFIG_PPP
      CONFIG_PPP_ASYNC
      CONFIG_PPP_DEFLATE
      CONFIG_PPP_BSDCOMP
      CONFIG_PPP_MPPE
      ちなみにその他の設定は ここの USB 関係のハック記事を参照しました.

    4. モジュール作成

      # make depend
      # make modules
      # make modules_install
      なお, 不安なら Makefile に INSTALL_MOD_PATH = /tmp と書き加える といい (上記ページの受け売り, 本行はもともと存在しないので文字通り『加える』)

インストール

とまぁ結構大変だったので生成物をここに 置いておきます (/mnt/hda3/pptp の下にでも展開して置いてください). ここからの説明はこいつを使っておこないますが, 律儀に作った方は 適当にディレクトリを読み替えてください. 以下の説明は仮想ルートでなく, 本来のルートの話です.

  1. ルートを書き込み可能にする
  2. モジュールのコピー

    # cd /lib/modules/2.4.21/kernel/drivers/net
    # cp /mnt/hda3/pptp/lib/modules/drivers/net/*.o .
    # cd ../..
    # cp -R /mnt/hda3/pptp/lib/modules/lib .
    自分でバイナリを作った方は, 生成された上記ディレクトリ相当にいろいろ不要なものも入ってますので ワイルドカードを使わず一個一個コピーした方がいいでしょう.

  3. オブジェクトのコピー

    めんどうなのでシンボリックリンクで済ませます.
    # ln -s /mnt/hda3/pptp/bin/pppd /usr/sbin/pppd
    # ln -s /mnt/hda3/pptp/bin/pptpd /usr/sbin/pptpd
    # ln -s /mnt/hda3/pptp/bin/pptpctrl /usr/local/sbin/pptpctrl
    もちろんコピーしてもかまいません.

  4. pptpd の設定

    /etc/pptpd.conf を作り以下のような感じで書く

    option /etc/ppp/options
    localip 192.168.0.5
    remoteip 192.168.0.200-210
    詳細な意味を知りたい方は各自調べて頂くとして, 要は localip, remoteip は pptpd が使う IP アドレスです. 既にあるものと重複しないものを使えばいいでしょう.

  5. ppp の設定
    1. /etc/ppp ディレクトリを掘る
    2. /etc/ppp/options を作り以下のような感じで書く

      refuse-mschap
      name landisk
      auth
      require-mschap-v2
      require-mppe-128
      proxyarp
      name は必要に応じ適当に書き換えてください.

    3. /etc/ppp/chap-secrets を作り以下のような感じで書く

      myname landisk paswwd *
      意味は一番目からユーザ名, 上記の name と同一のもの, ユーザ名のパスワード, おまけのアスタリスク (と言っていいでしょう) です.

    4. 以下のコマンドを打つ
      # mknod /dev/ppp c 108 0

動作試験

  1. 起動

    ここまで来たらためしに動かしてみます.
    # echo 1 > /proc/sys/net/ipv4/ip_forward
    # /sbin/insmod /lib/modules/2.4.21/kernel/lib/zlib_deflate/zlib_deflate.o
    # /sbin/insmod /lib/modules/2.4.21/kernel/lib/zlib_inflate/zlib_inflate.o
    # /sbin/insmod /lib/modules/2.4.21/kernel/drivers/net/slhc.o
    # /sbin/insmod /lib/modules/2.4.21/kernel/drivers/net/ppp_generic.o
    # /sbin/insmod /lib/modules/2.4.21/kernel/drivers/net/ppp_deflate.o
    # /sbin/insmod /lib/modules/2.4.21/kernel/drivers/net/bsd_comp.o
    # /sbin/insmod /lib/modules/2.4.21/kernel/drivers/net/ppp_async.o
    # /sbin/insmod /lib/modules/2.4.21/kernel/drivers/net/ppp_mppe.o
    # /usr/sbin/pptpd
    としたときエラーが出ないか確認します. さらに
    # ps -aux | grep pptpd
    とでもしてみて, pptpd が走り続けているか確認します.

  2. 接続

    無事動いているようでしたら, いよいよ接続試験です. Windows Xp で説明しますが, 他の OS の場合は適当に読み替えてください.

    まず, PC を同じ LAN に繋げます. その PC で 「ネットワーク接続」を開き, [新しい接続を作成する] をクリックします. ウィザードが現れますので, [職場のネットワークへ接続する]→ [仮想プライベートネットワーク接続]を選び ([接続名]は適当, 最初の接続では ダイヤルしない) [VPN サーバの選択] で LANDISK の IP アドレスを指定します. 後は, 接続のダイアログでユーザ名とパスワードに /etc/ppp/chap-secrets で 設定した物を入れてみます.

    無事に接続できたら成功です. うまく行かなかったら /hosts.allow, /hosts.deny が原因かもしれません (うちの LANDISK は思いっきり解放しているので良く分からん).

    さらに, telnet で LANDISK に入れるかとか, LANDISK のトップページが見られるか, LAN に繋がった別の PC にアクセスできるか等も確認してみてください (ネットワークコンピュータ一覧を除く).

運用

上手く出来たなら, LANDISK 起動時に上記手順を自動実行すため 動作試験 1 の echo で始まる一連のコマンド群を /etc/rc.d/rc.local の最後にでも加えます.

続いて, 外部からの接続を LANDISK で受け持つようにします. ブロードバンドルータを設定し, TCP 1723 を LANDISK に回すようにします. そうそう, ブロードバンドルータは vpn パススルーとか pptp 対応とか 謳っているものじゃないと駄目かもしれません.

後は 何らかの手段でブロードバンドルータのインターネット上の IP アドレス を知り, ホストをそれにすると外から家庭内 LAN に繋がります. 「DynamicDNS」という単語を知らなければ検索してみるのもいいでしょう (多少古いし pptp ではないですが ここも 参考になるかもしれません).

なお, pptp はブロードキャストを通さないようです. そのためブロードキャストを使ってネット上にどのコンピュータが居るか知る 「ネットワークコンピュータ」の一覧が得られません. 「コンピュータの検索」で家庭内 LAN 上の IP アドレスを 指定しなければ目的の PC にたどり着けません.

というわけでネットワークコンピュータ周りを使うにはちょっと不便です. ただ, この件に関してはいろいろ技があるようですので 「vpn」, 「pptp」, 「名前解決」あたりで検索をかけてみてください.

最後に

インターネット上にポートを空けて待ち受けるということは, それだけクラッカーの攻撃を受けるの危険性が増すことになります. 今回用いた pptp, ppp 等のバージョンに対し, 将来何らかのセキュリティホールが発見され, そこを突かれる可能性は皆無とは言えません. また, あなたが設定した ID やパスワードがバレることだってありますし... その辺は自己責任で管理してください.

あっそれから苦労して LANDISK を VPN サーバに仕立てなくても, 世の中にはそういうハードが売られていますので, そういう選択肢も考える価値はあるでしょう. 「VPN」「ブロードバンドルータ」あたりで検索してみてください (本文執筆時点で 1 万 2 〜 3 千円で買えるようです) .


2005.3