VPN(Virtual Private Network)構築編


2.kernelの再構築とLinux FreeS/WAN及びPoPToPのインストール
今回構築するVPNの構成をもう一度確認しておきましょう。



それでは、この図にあるAのLinux ServerとEのLinux Serverに以下の作業を行います。



(1)再起動用ブートフロッピーディスクの作成
すぐにでも kernel の再構築を始めたいところですが、もし再構築に失敗した場合、Linuxが起動しなくなる恐れがあります。
そこで、現在稼動中の kernel で再起動用のブートフロッピーを作成しておきましょう。
新しいフロッピーディスクを用意し、ドライブに差し込んでおいてください。
そして、

  # uname -r

で kernel のバージョンを確認します。(ここでは、「2.4.18-19.7.x 」と返ってきたとします。)

次に、以下のコマンドを入力して、表示されたメッセージに対し <Enter> キーを押せばブートフロッピーの完成です。

  # mkbootdisk  --device  /dev/fd0  2.4.18-19.7.x
  Insert a disk in /dev/fd0. Any information on the disk will be lost.
  Press <Enter> to continue or ^C to abort:




(2)kernelの展開
それでは、ダウンロードしてきた linux-2.4.19.tar.gz を /usr/src/ のディレクトリで展開しましょう。
  # cp  /(ダウンロードした場所)/linux-2.4.19.tar.gz  /usr/src/
  # cd  /usr/src/
  # tar  xvzf linux-2.4.19.tar.gz

これにより、/usr/src/linux-2.4.19 というディレクトリが作成され、そこにソースが展開されます。
次に、 /usr/src/linux というディレクトリがあるかどうかを確認し、次のように処理します。

 @ /usr/src/linux というディレクトリが無かった場合
  # ln -s /usr/src/linux-2.4.19 /usr/src/linux

 A /usr/src/linux というディレクトリがシンボリックリンクであった場合
  # rm -f /usr/src/linux
  # ln -s /usr/src/linux-2.4.19 /usr/src/linux


 B /usr/src/linux というディレクトリが実体のあるディレクトリであった場合
  # mv /usr/src/linux /usr/src/linux-2.4.18-19.7.x
   (新しいディレクトリはそのkernelのバージョン名を使用する)
  # ln -s /usr/src/linux-2.4.19 /usr/src/linux

これは、これからの一連の処理が /usr/src/linux というディレクトリにあるソースに対して行わなければエラーとなるためです。

さて、デフォルトの状態のままで kernel を再構築すると /boot/ ディレクトリに vmlinuz-2.4.19 というkernel が作成されるとともに、そのkernelに対応した各種モジュールが /lib/modules/2.4.19/ のディレクトリにインストールされます。
ところが、kernel のバージョンが linux-2.4.19 のままで、PPTPやIPsecの新しいパッチを適用して再構築すると、やはり/boot/ ディレクトリに vmlinuz-2.4.19 という kernel と /lib/modules/2.4.19 というモジュールディレクトリが作成されます。
すなわち、新しいものに置き換わってしまうということです。

これは、ちょっとまずいことになります。
それまでの vmlinuz-2.4.19 の kernel では正しく起動していたLinuxが、新しいパッチを適用したために正しく起動しないかもしれません。

こうしたことが起こらないように、今回構築する kernel のバージョン名を少し変えておくことにします。
方法は簡単です。
/usr/src/linux/ のディレクトリにある Makefile の「 EXTRAVERSION 」の値を適当なエディタで修正するだけです。
具体的には、

  # cd  /usr/src/linux/
  # vi  Makefile

で開いて、先頭から4行目にある「 EXTRAVERSION = 」(デフォルトでは「=」の後ろには何も書かれていません)に適当な文字(今回は「-VPN」)を追加して保存します。

  VERSION = 2
  PATCHLEVEL = 4
  SUBLEVEL = 19
  EXTRAVERSION = -VPN

これで、今回構築する kernel は /boot/vmlinuz-2.4.19-VPN となり、モジュールのディレクトリも /lib/modules/2.4.19-VPN/ となります。
もし、linux-2.4.19 を使ってもう一度別の kernel を再構築する場合には、「 EXTRAVERSION 」の値を違ったものにすれば、今回構築する kernel( vmlinuz-2.4.19-VPN ) や モジュール( /lib/modules/2.4.19-VPN )はそのまま残るので、安心できます。



(3)カーネル・パラメータの設定
さて、kernel を再構築する場合、一番の難関がカーネル・パラメータの設定です。
カーネル・パラメータの項目は数百個もあり、これをいちから設定していくのは至難の業です。
そこで、既存のカーネル・パラメータの設定(ここではRedHat Linux が設定しているカーネル・パラメータ)を引き継ぎ、新たに必要な項目だけ設定するようにすれば簡単かつ確実です。

この場合、今までにカーネルのソースをインストールしていれば非常に簡単な処理で済みます。
現在のkernel が2.4.18-19.7.x で、/usr/src/linux-2.4.18-19.7.x/ というディレクトリがあった場合、そのディレクトリにある「.config」というファイルを利用します。
この /usr/src/linux-2.4.18-19.7.x/.config というファイルを /usr/src/linux/ のディレクトリにコピーするだけです。

  # cp  /usr/src/linux-2.4.18-19.7.x/.configure  /usr/src/linux/

もし、今までにカーネルのソースをインストールしたことがなければ、ここでインストールしてください。
linux-2.4.18-19.7.x のソースは、kernel-source-2.4.18-19.7.x.i386.rpm です。
これを、RedHat社 のErrata・アップデートAbout Rpmfind.Net Server からダウンロードし、

  # rpm  -ivh  /(保存したディレクトリ)/kernel-source-2.4.18-19.7.x.i386.rpm

とすると、/usr/src/linux-2.4.18-19.7.x/configs/ のディレクトリにいくつかの「.config」ファイルもインストールされます。
そこで、自分のマシンに適したものを /usr/src/linux/ にコピーします。
例えば、「 kernel-2.4.18-i686.config 」を使う場合には、

  # cp  /usr/src/linux-2.4.18-19.7.x/kernel-2.4.18-i686.config  /usr/src/linux/.config

とします。



(4)PPTPのパッチ適用
それでは、PPTPのパッチを適用しましょう。(現在のディレクトリは、/usr/src/linux/ です。)
AのLinuxサーバーにPoPToP(pptp)の機能が不要な場合は、次の「(5)Linux FreeS/WANのインストールとkernelのコンパイル」に進んでください。


  # cp /(保存していたディレクトリ)/linux-2.4.19-openssl-0.9.6-mppe.patch.gz  ./
  # zcat  linux-2.4.19-openssl-0.9.6-mppe.patch.gz  |  patch  -p1

それでは、パッチが正しく適用されたか確認してみましょう。

  # make  menuconfig

とすると、以下のメニューが表示されます。

kernel_config_1

このメニューの「Network device support  ---> 」を選択し、「 PPP (point-to-point protocol) support 」の項目が次のようになっていればパッチが正しく適用されたことになります。

kernel_config_2

確認後、2度 < Exit > を選択し、「 Do you wish to save your new kernel configuration? 」という問い合わせに <Yes > を選択し、設定内容を保存します。



(5)Linux FreeS/WANのインストールとkernelのコンパイル
それでは、Linux FreeS/WANのインストールを始めましょう。
但し、タイトルに書きましたように、Linux FreeS/WANのインストールは、同時に kernel のコンパイルも行います。

ここで重要な点は、ダウンロードしてきたLinux FreeS/WANを /usr/src/ のディレクトリで展開することです。
そうしないと、/usr/src/linux/ のディレクトリにある kernel のソースに正しくパッチが適用されません。
なお、今回はX.509公開鍵証明書に対応した freeswan-1.99-x509-0.9.19.tar.gz を使用してみることにしました。

  # cd  /usr/src/
  # cp /(保存していたディレクトリ)/freeswan-1.99-x509-0.9.19.tar.gz  ./
  # tar xvzf  freeswan-1.99-x509-0.9.19.tar.gz

以上により、/usr/src/freeswan-1.99 というディレクトリが作成され、その中にソースファイルが展開されます。
次に、

  # cd  freeswan-1.99
  # make  menugo

とすると、再度menuconfig の画面が表示されますので、 このメニューの「Networking Options  ---> 」を選択し、「 IP Security Protocol (FreeS/WAN IPSEC) 」の項目が次のようになっていることを確認します。

kernel_config_3

確認後、2度 < Exit > を選択し、「 Do you wish to save your new kernel configuration? 」という問い合わせに <Yes > を選択し、設定内容を保存すると、続いて自動的に kernel のコンパイルが始まります。
つまり、通常 kernel をコンパイルする場合の処理である

  # make  dep
  # make  clean
  # make  bzImage

が行われるわけです。
ちなみに、私のマシン(CPU=Pentium U 350MHz、MEM=128MB)のマシンではおよそ2時間かかりました。(~_~;)

コンパイルの結果は、( /usr/src/freeswan-1.99 )/out.kbuild というファイルに出力されますので、

  # .utils/errchk  out.kbuild

として、何も出力されなければ無事にコンパイルが終了したことになります。

<補足> ---------------------------------------------------------------------------
最新バージョンの「linux-2.4.20.tar.gz」を使いコンパイルした場合、途中でエラーとなり、そのエラーメッセージが次のように出力されました。

[root@ms1 freeswan-1.99]# ./utils/errcheck out.kbuild
***ERRORS DETECTED in out.kbuild (examine file for details):
/usr/src/linux-2.4.20/include/linux/hp_sdc.h:288:2: #error No support for device
registration on this arch yet.

原因は 2.4.20 のバージョンで新たに追加された「HP i8042 System Device Controller」にあるようですが、これを無効にして config する方法が今のところわかりません。(ーー;)

------------------------------------------------------------------------------------

エラーが無いことを確認すれば、

  # make  kinstall

を実行します。
これは、通常の kernel をコンパイルするときの、

  # make  modules
  # make  modules_install
  # make  install

と同じことを実行します。
この処理も私のマシンでは1時間ほどかかりました。

先ほどと同様に、コンパイルの結果は、( /usr/src/freeswan-1.99 )/out.kinstall というファイルに出力されますので、

  # .utils/errchk  out.kinstall

として、何も出力されなければ無事にコンパイルが終了したことになります。

kernel再構築の最後の処理は、ブート・ローダーの設定です。
ベースとなったRedHat Linux 7.3では、GRUB(GRand Unified Bootloader)を使用していますので、

  # vi  /boot/grub/grub.conf

で開き、下記の赤字で示した行を追加します。

# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/hda3
# initrd /initrd-version.img
#boot=/dev/hda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz

title Red Hat Linux (2.4.19-VPN)
root (hd0,0)
kernel /vmlinuz-2.4.19-VPN ro root=/dev/hda3

title Red Hat Linux (2.4.18-19.7.x)
root (hd0,0)
kernel /vmlinuz-2.4.18-19.7.x ro root=/dev/hda3
initrd /initrd-2.4.18-19.7.x.img

以上で、Linux FreeS/WANのインストールとPPTP及びIPsecに対応した kernel の再構築が完了しました。



(6)PPPのアップデート及びPoPToPのインストール
これは簡単です。
ダウンロードしてきた ppp-2.4.1-3mppe.i386.rpm と pptpd-1.1.3-1.i386.rpm の2つのファイルをいつものコマンドでインストールするだけです。

  # rpm  -Fvh ppp-2.4.1-3mppe.i386.rpm
  # rpm  -ivh  pptpd-1.1.3-1.i386.rpm



(7)Linuxの再起動
以上で全てのインストール作業は終了しました。
新しい kernel でLinuxを再起動させましょう。

  # shutdwon  -r  now



back HOME