<!doctype linuxdoctr system>
<article>
<title>VPN HOWTO</title>
<author>Matthew D. Wilson, <url url="mailto:matthew@shinythings.com" name="matthew@shinythings.com"></author>
<date>v 1.0, Dec 1999</date>

<trans>宮田 剛, <url url="mailto:t-miya@rb3.so-net.ne.jp" name="t-miya@rb3.so-net.ne.jp"></trans>
<tdate>v1.0j, 18 August 2000</tdate>

<abstract>
<!-- This HOWTO describes how to set up a Virtual Private Network with Linux. -->
この HOWTO は、いかにして Linux で仮想プライベートネットワーク (VPN) を構築するかということについて記述されたものです。
</abstract>

<toc>

<!-- <sect>Introduction<label id="Introduction"> -->
<sect>序文<label id="Introduction">
<!-- <sect1>Why I wrote this HOWTO -->
<sect1>なぜこの HOWTO を書いたか
<p>
<!--
I work Real Networks, and we needed VPN service.  This was my first real
project, and I truly learned more about Linux with this than with any
other task.  I ended up using my experience with that project to write
this document, to share with others what I learned, so that they can do
ultra-nifty things with Linux too!
-->
私はリアルネットワークスに勤務しており VPN サービスを必要としていました。
これは私にとって初めての現実のプロジェクトで、他の仕事に比べると、ここから Linux について
本当に多くを学びました。私は、学んだことを他のみんなと共有し、彼らもまた
Linux でとても素晴らしいことが出来るよう、そのプロジェクトによる
経験を使ってこのドキュメントを執筆しました。
</p>
<!-- <sect1>Acknowledgements and Thanks -->
<sect1>感謝とお礼
<p>
<!--
I want to first and foremost thank my wife Julie, without her, I
wouldn't be where I am today.  I also want to thank Arpad Magosanyi, the
author of the first VPN mini-howto and pty-redir, the utility that makes
all of this possible.  Jerry, Rod, Glen, Mark V., Mark W., and David, You
guys rock!  Thanks for all your help.
-->
まず、真っ先に我が妻 Julie に感謝します。彼女なくして今日の私は無かったでしょう。
また、この全てを可能にした物、最初の VPN mini-howto and pty-redir の
執筆者である Arpad Magosanyi にもお礼を言いたいと思います。Jerry, Rod, Glen, 
Mark V., Mark W., それから David, イかしてるぜ。みなさんの協力に感謝します。
</p>
<!-- <sect1>Format of this document -->
<sect1>このドキュメントの形式
<p>
<!-- This document is broken down into 5 sections. -->
このドキュメントは 5つのセクションに分かれています。
</p><p>
<descrip>
<p><tag>
<!-- Section 1: Introduction -->
セクション1 - 序文
   </tag>
このセクション
</p>
<p><tag>
<!-- Section 2: Theory -->
セクション2 - 理論
   </tag>
<!--
Basic VPN theory.  What is a VPN, and how does it work.  
Read this if you are entirely new to VPN.
-->
VPN の基本的理論です。VPN とは何か、どのように動作するのか。
もし VPN について全くの初めてなら、ここを読んでください。
</p>
<p><tag>
<!-- Section 3: Server -->
セクション3 - サーバ
   </tag>
<!--
This section describes how a VPN server is set up.
-->
このセクションでは VPN サーバの設定法について述べます。
</p>
<p><tag>
<!-- Section 4: Client -->
セクション4 - クライアント
   </tag>
<!--
This section describes how a VPN client is set up.
-->
このセクションでは VPN クライアントの設定法について述べます。
</p>
<p><tag>
<!-- Section 5: Implementation -->
セクション5 - 実行
   </tag>
<!--
A step by step implementation of a sample VPN setup.
-->
サンプルとなる VPN の設定を手順を踏んで実行してみます。
</p>
<p><tag>
<!-- Section 6: Addenda -->
セクション6 - 付記
   </tag>
<!--
Other bits and pieces of info that you might find helpful.
-->
あなたの助けになるかもしれない、その他のちょっとした情報です。
</p>
</descrip>
</p>
<!-- <sect1>Copyright and Disclaimer -->
<sect1>著作権および免責事項
<p>
以下の文は参考のため訳文を挙げますが、原文が優先されます。

Copyright (c) by Matthew Wilson. This document may be distributed only
subject to the terms and conditions set forth in the LDP License at <url
url="http://www.linuxdoc.org/COPYRIGHT.html"
name="http://www.linuxdoc.org/COPYRIGHT.html">, except that this document
must not be distributed in modified form without the author's consent.

著作権は Matthew Wilson にあります。このドキュメントは<url
url="http://www.linuxdoc.org/COPYRIGHT.html"
name="http://www.linuxdoc.org/COPYRIGHT.html">にある LDP ライセンスの配布条件
および約定に従う場合にのみ、配布することができますが、著者の同意なく
改変を加えられた場合には配布することは出来ません。
</p>
<p>
The author assumes no responsibility for anything done with this document,
nor does he make any warranty, implied or explicit.  If you break it, it's
not my fault.  Remember, what you do here could make very large holes in
the security model of your network.  You've been warned.

著者は、暗黙であるか明白であるかの如何にかかわらず、このドキュメントによる
どのような事象に対しても責任を負いませんし、また如何なる保証もしません。
あなたが被害を被ったとしても、それは私の失敗ではありません。
あなたがここでやることが、ネットワークのセキュリティモデルに
非常に大きな穴を開け得るということを覚えておいてください。警告しましたからね？
</p>
<!-- <sect1>Document History -->
<sect1>文書履歴
<p>
以下の文は参考のため訳文を挙げますが、原文が優先されます。

The original VPN mini-HOWTO was written by <url
url="mag@bunuel.tii.matav.hu" name="Arpad Magosanyi"> in 1997.  He has
since allowed me to take up the document and extend it into a full
HOWTO.  All of this would not be possible without his original document.
Thanks again Arpad. :)

オリジナルの VPN mini-HOWTO は <url url="mag@bunuel.tii.matav.hu" name="Arpad Magosanyi">
によって 1997 年に記述されました。彼は私がこのドキュメントを取り上げ、完全な
HOWTO に拡張することを許してくれました。全ては彼のオリジナルのドキュメント
無くしては為し得なかったことでしょう。再度 Arpad に感謝します。:)
</p><p>
<!-- Version 1.0 of this HOWTO was completed on December 10, 1999. -->
この HOWTO のバージョン 1.0 は 1999 年 12 月 10 日に完成しました。
</p>
<!-- <sect1>Related Documents -->
<sect1>関連ドキュメント
<p>
<itemize>
<item><url url="http://www.linuxdoc.org/HOWTO/Networking-Overview-HOWTO.html" name="Networking Overview HOWTO">
<item><url url="http://www.linuxdoc.org/HOWTO/NET3-4-HOWTO.html" name="Networking HOWTO"> 
&lsqb;訳注：日本語訳は <url url="http://www.linux.or.jp/JF/JFdocs/NET3-4-HOWTO.html"> にあります。&rsqb;
<item><url url="http://www.linuxdoc.org/HOWTO/VPN-Masquerade-HOWTO.html" name="VPN-Masquerade HOWTO">
</itemize>
</p>

<!-- <sect>Theory -->
<sect>理論
<sect1>VPNとは何か？
<p>
<!--
VPN stands for Virtual Private Network.  A VPN uses the Internet as it's
transport mechanism, while maintaining the security of the data on the VPN.
-->
VPN とは仮想プライベートネットワーク (Virtual Private Network) を意味しています。
VPN はデータの安全性を確保しつつ、その輸送機構としてインターネットを利用します。
</p>
<!-- <sect2>But really, what IS a VPN? -->
<sect2>で、実際のところ、VPN とは？
<p>
<!--
Well, there are several answers to that question.  It really depends on
your network layout.  The most common configuration is to have a single
main internal network, with remote nodes using VPN to gain full access
to the central net.  The remote nodes are commonly remote offices or
employees working from home.  You can also link two smaller (or even
larger!) networks to form an even larger single network.
-->
その質問にはいくつもの答えがあります。それは正にネットワークレイアウト次第です。
もっとも一般的な構成は、ひとつのメイン内部ネットワークを持ち、
VPN を使った離れた所にあるノードを中央ネットワークへ完全にアクセスできるように
するものです。離れた所にあるノードというのは、通常、
離れたオフィスか自宅から作業を行う従業員などです。二つの、
より小さな (あるいは大きな!) ネットワークを繋いで、さらに大きな
単一のネットワークとすることも出来ます。
</p>
<!-- <sect2>So how does it work? -->
<sect2>それでどういう風に動作するの？
<p>
<!--
Put simply, to make a VPN, you create a secure tunnel between the two
networks and route IP through it.  If I've lost you already, you should
read <url
url="http://www.linuxdoc.org/HOWTO/Networking-Overview-HOWTO.html"
name="The Linux Networking Overview HOWTO"> to learn about networking
with Linux.
-->
VPN を構築するためには単に、二つのネットワーク間に安全の確保されたトンネルを
作り、それを通るように IP の経路を定めます。もし、既に私の言うことが
理解できないのでしたら、<url
url="http://www.linuxdoc.org/HOWTO/Networking-Overview-HOWTO.html"
name="The Linux Networking Overview HOWTO"> を読んで Linux における
ネットワークについて勉強してください。

</p>
<p>
<!-- Please bear with me, my ASCII art could use some work. -->
我慢してください。私のアスキーアートは何かに使えますから。
</p>
<p>
<!--
<verb>
                                \          \
                 &#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;       /          /      &#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;
   Remote ______| Client |______\ Internet \_____| Server |______ Private
   Network      | Router |      /          /     | Router |       Network
                 &#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;       \          \      &#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;
                                /          /


                         Client Router
               &#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;
              |   /->    10.0.0.0/255.0.0.0   \                    |
  Remote      |  |&#045;&#045;>  172.16.0.0/255.240.0.0  |&#045;&#045;> Tunnel >&#045;&#045;-\   |
  Network >&#045;&#045;-|&#045;&#045;|&#045;&#045;> 192.168.0.0/255.255.0.0 /                 |&#045;&#045;|&#045;&#045;&#045;&#045;> Internet
 192.168.12.0 |  |                                              |  |
              |   \&#045;&#045;&#045;&#045;-> 0.0.0.0/0.0.0.0 &#045;&#045;> IP Masquerade >&#045;&#045;/   |
               &#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;


                        Server Router
             &#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;
            |                   /->    10.0.0.0/255.0.0.0    \   |
            |   /&#045;&#045;> Tunnel >&#045;&#045;|&#045;&#045;>  172.16.0.0/255.240.0.0   |&#045;&#045;|&#045;&#045;&#045;&#045;> Private
Internet >&#045;&#045;|&#045;&#045;|                \&#045;&#045;> 192.168.0.0/255.255.0.0 /   |      Network
            |  |                                                 |     172.16.0.0/12
            |   \&#045;&#045;&#045;&#045;-> 0.0.0.0/0.0.0.0 &#045;&#045;&#045;&#045;-> /dev/null         |    192.168.0.0/16
             &#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;&#045;
</verb>
-->
<verb>
                                      \          \
                   --------------     /          /    --------
     リモート  ___| クライアント |____\ インター \___| サーバ |______ プライベート
   ネットワーク   |    ルータ    |    /   ネット /   | ルータ |       ネットワーク
                   --------------     \          \    --------
                                      /          /


                         クライアントルータ
                  -----------------------------------------------------
                 |   /->    10.0.0.0/255.0.0.0   \                     |
 リモート        |  |-->  172.16.0.0/255.240.0.0  |--> トンネル >--\   |
  ネットワーク>--|--|--> 192.168.0.0/255.255.0.0 /                  |--|----> インターネット
 192.168.12.0    |  |                                               |  |
                 |   \-----> 0.0.0.0/0.0.0.0 --> IPマスカレード >--/   |
                  -----------------------------------------------------


                           サーバルータ
                   ------------------------------------------------------
                  |                     /->    10.0.0.0/255.0.0.0    \   |
                  |   /--> トンネル >--|-->  172.16.0.0/255.240.0.0   |--|--> プライベート
インターネット >--|--|                  \--> 192.168.0.0/255.255.0.0 /   |    ネットワーク
                  |  |                                                   |   172.16.0.0/12
                  |   \-----> 0.0.0.0/0.0.0.0 -----> /dev/null           |  192.168.0.0/16
                   ------------------------------------------------------
</verb>
</p>
<p>
<!--
The above diagram shows how the network might be set up.  If you don't
know what IP Masquerade is, you probably shouldn't be here.  Go read the
<url url="/HOWTO/Networking-Overview-HOWTO.html"
name="The Linux Networking Overview HOWTO"> and come back once you've
figured it out.
-->
上の図はネットワークをどの様に構築し得るかを示しています。
もし IP マスカレードが何であるか分からないのなら、ここにいるべきでは
ありません。
<url url="http://www.linuxdoc.org/HOWTO/Networking-Overview-HOWTO.html"
name="The Linux Networking Overview HOWTO">を読んで、それを理解してから
戻って来てください。
</p>
<p>
<!--
The Client Router is a Linux box acting as the gateway/firewall for the
remote network.  As you can see, the remote network uses the local net
192.168.12.0.  For the sake of a simple diagram, I let out the local
routing information in the routers.  The basic idea is to route traffic
for all of the private networks (10.0.0.0, 172.16.0.0, and 192.168.0.0)
through the tunnel.  The setup shown here is one way.  That is, while
the remote network can see the private network, the private network
cannot necessarily see the remote network.  In order for that to happen,
you must specify that the routes are bidirectional.
-->
クライアントルータはリモートネットワークに対するゲートウェイ/ファイアウォール
として動作する Linux ボックスです。見て分かるように、リモートネットワークは
ローカルネットワーク 192.168.12.0 を使用しています。図を簡略化するため、
ルータ内のローカルなルーティング情報を表に出しました。基本的な考えは、
プライベートネットワーク全て (10.0.0.0, 172.16.0.0, 192.168.0.0) に対する
トラフィックがトンネルを通るように経路を定めるということです。
ここで示したものは一方通行です。
つまり、リモートネットワークからプライベートネットワークが見えるからといって、
プライベートネットワークからリモートネットワークが見えるとは限りません。
そうするためには経路が双方向となるよう指定しなくてはなりません。
</p>
<p>
<!--
From the diagram you should also note that all of the traffic coming out
of the client router appears to be from the client router, that is, it's
all from one IP address.  You could route real numbers from inside your
network but that brings all sorts of security problems with it.
-->
図より、クライアントルータを通って出たトラフィック全てはクライアントルータから
来ている、つまり全てが一つの IP アドレスから来ていることが分かるでしょう。
実際のあなたのネットワーク内からの数だけ経路を設定することも出来ますが、
そうするとあらゆる種類のセキュリティ問題が発生することになります。
</p>
<!-- <sect1>SSH and PPP -->
<sect1>SSHとPPP
<p>
<!--
The system that I describe to implement VPN uses SSH and PPP.  Basically
I use ssh to create a tunnel connection, and then use pppd to run TCP/IP
traffic though it. That's what makes up the tunnel.
-->
VPN として、SSH および PPP を用いたシステムについても記しておきます。
基本的に私はトンネル接続するために ssh を使い、それを通して TCP/IP の送受信を
行うために、pppd を使っています。それがトンネルの作り方です。
</p>
<p>
<!--
The real trick to getting ssh and pppd to play well together is the
utility written by Arpad Magosanyi that allows the redirection of
standard in and standard out to a pseudo tty.  This allows pppd to talk
through ssh as if it were a serial line.  On the server side, pppd is
run as the users shell in the ssh session, completing the link.  After
that, all you need to do is the routing.
-->
ssh と pppd を一緒に動かす実際のうまい方法は、Arpad Magosanyi に
よって書かれた役にたつ文書で、それに従えば疑似端末の標準入出力を
リダイレクトすることが出来ます。これによって pppd は、
sshを通してあたかもそれがシリアル回線であるかのように通信することが
出来るようになります。サーバ側では、pppd は ssh セッションにおける
ユーザのシェルのように動作しており、リンクを確立しています。
あとは経路の設定を行うだけです。
</p>
<!-- <sect1>Alternative VPN Systems -->
<sect1>その他の VPN システム
<p>
<!--
There are of course other ways of setting up a VPN, here are a couple of
other systems.
-->
もちろん、VPN を構築するための他の方法もあります。ここでは他のシステムのうち
3つを示します。
<sect2>PPTP
<p>
<!--
PPTP is a Microsoft protocol for VPN.  It is supported under Linux, but
is known to have serious security issues.  I do not describe how to use
it here since it is covered by the <url
url="http://www.linuxdoc.org/HOWTO/VPN-Masquerade-HOWTO.html"
name="Linux VPN Masquerade HOWTO">.
-->
PPTP はマイクロソフトの VPN のためのプロトコルです。それは Linux で
サポートされていますが、深刻なセキュリティ上の問題を抱えていることが
分かっています。どのように使用するかは <url
url="http://www.linuxdoc.org/HOWTO/VPN-Masquerade-HOWTO.html"
name="Linux VPN Masquerade HOWTO"> に示されているので、ここでは説明しません。
</p>
<sect2>IP Sec
<p>
<!--
IP Sec is a different set of protocols from SSH.  I don't actually know
all that much about it, so if someone wants to help me out with a
description, I'd be most appreciative.  Again, I do not describe how to
use it here since it is covered by the <url
url="http://www.linuxdoc.org/HOWTO/VPN-Masquerade-HOWTO.html"
name="Linux VPN Masquerade HOWTO">.
-->
IP Sec は SSH とは異なるプロトコルのセットです。私は、実はそれについて
あまりよく知らないので、誰かが説明の手助けをしてくれるなら非常に
ありがたいです。再度、その使い方については<url
url="http://www.linuxdoc.org/HOWTO/VPN-Masquerade-HOWTO.html"
name="Linux VPN Masquerade HOWTO">に示されているので、ここでは説明しない
ことにします。
</p>
<sect2>CIPE
<p>
<!--
CIPE is a kernel level network encryption system that may be better
suited to enterprise setups.  You can find out more about it at <url
url="http://sites.inka.de/sites/bigred/devel/cipe.html" name="the CIPE
homepage">.  I plan on looking into it more, so maybe I'll have info
about it here someday.
-->
CIPE は、企業向けの設定に適した、カーネルレベルのネットワーク暗号化システム
です。より詳しい内容は<url
url="http://sites.inka.de/sites/bigred/devel/cipe.html" name="the CIPE
homepage">にあります。これについてはもう少し詳しく調べようと思っているので、
いつかここで情報を示すことができるでしょう。
</p>

<!-- <sect>Server -->
<sect>サーバ
<p>
<!--
This section tells you how to set up the server side of things, I
figured that this should go first since without a server, your client is
kind of useless.
-->
サーバ無しではクライアントは何の役にも立たないので、このセクションでは
最初にやるべきいくつかのことを、サーバ側でいかに設定するか述べることにします。
</p>
<!-- <sect1>Security - keeping people out -->
<sect1>セキュリティ − 人々を締め出す
<p>
<!--
Security is very important for a VPN.  That's why you're building one in
the first place, isn't it?  You need to keep a few things in mind while
setting up your server.
-->
VPN にとってセキュリティは非常に重要です。第一、だからこそ VPN を構築して
いるんですよね？ サーバを設定するにあたっては、いくつかのことを心に留めておく必要があります。
</p>
<!-- <sect2>Trim your daemons -->
<sect2>デーモンを減らせ
<p>
<!--
Since this server is going to be on both sides of your firewall, and set
up to forward traffic into your network, it's a good idea to secure the
box as well as you possibly can.  You can read up more on Linux security
in the <url url="/HOWTO/Security-HOWTO.html" name="Linux Security
HOWTO"> For my purposes, I've killed everything but sshd and a Roxen Web
server. I use the web server to download a couple of files (my scripts,
etc) for setting up new machines to access the VPN.  I don't use an FTP
server since it's harder to configure one to be secure than it is to
just make a few files available with a web server.  Plus, I only need to
be able to download files.  If you really want to run different servers
on your gateway, you might want to think about restricting access to them
to only those machines on your private network.
-->
このサーバはファイアウォールの両側に置かれ、トラフィックを
ネットワークの中へ転送するように設定されているので、可能な限り
その箱を安全にするというのは良い考えです。Linux のセキュリティについては
<url url="http://www.linuxdoc.org/HOWTO/Security-HOWTO.html" name="Linux Security HOWTO">
でさらに調べることができます。 &lsqb; 訳注：日本語訳は <url 
url="http://www.linux.or.jp/JF/JFdocs/Security-HOWTO.html"> にあります。&rsqb;
目的のために、私は sshd と Roxen Web server
以外の全てを kill しました。VPN にアクセスする新しいマシンを設定するため、 
2つのファイル（スクリプト、その他）をダウンロードする目的でウェブサーバを利用しています。
FTP サーバは使いません。それは、ウェブサーバ経由で多少のファイルを見える
ようにするのに比べ、FTP サーバ経由で同じことを安全にできるように設定するのは
難しいからです。それに、単にファイルをダウンロード
できればいいのです。もし本当にゲートウェイで別々のサーバを
走らせたいと思っているのであれば、プライベートネットワークにあるマシン以外、
それらのサーバにアクセスできないよう制限すべきかも知れません。
</p>
<!-- <sect2>Don't allow passwords -->
<sect2>パスワードを許すな
<p>
<!--
Yes, it sounds kind of silly, but it got your attention, didn't it?  No,
you don't use passwords, you disable them completely.  All
authentication on this machine should be done via ssh's public key
authentication system.  This way, only those with keys can get in, and
it's pretty much impossible to remember a binary key that's 530
characters long.
-->
そう、それは馬鹿げたことに聞こえます。けれども気になるでしょう？
パスワードは使わず、それを完全に無効にしてしまうのです。
このマシンの全ての認証は ssh の公開鍵認証システムを通して行われるべきです。
この方法ではキーを持った者だけが入ることができますが、530 文字もの長さのバイナリ
のキーを覚えることは、殆ど不可能です。
</p><p>
<!--
So how do you do that?  It requires editing the /etc/passwd file.  The
second field contains either the password hash, or alternatively 'x'
telling the authentication system to look in the /etc/shadow file.  What
you do is change that field to read '*' instead.  This tells the
authentication system that there is no password, and that none should be
allowed.
-->
では、そのためにはどうすれば良いのでしょう？/etc/passwd ファイルを編集
することが必要です。2 番目のフィールドはパスワードハッシュ、あるいは
認証システムに /etc/shadow ファイルを見るよう指示する 'x' のいずれかが
含まれています。しなくてはならないことは、そのフィールドを
 '*'に書きかえることです。これは認証システムに対して、パスワードは無しで、
何も許されるべきでないということを示します。
</p>
<p><label id="passwd">
<!-- Here's how a typical /etc/passwd file looks: -->
典型的な /etc/passwd ファイルの形式を次に示します。
<verb>
....
nobody:x:65534:100:nobody:/dev/null:
mwilson:x:1000:100:Matthew Wilson,,,:/home/mwilson:/bin/bash
joe:*:504:101:Joe Mode (home),,,:/home/vpn-users:/usr/sbin/pppd
bill:*:504:101:Bill Smith (home),,,:/home/vpn-users:/usr/sbin/pppd
frank:*:504:101:Frank Jones (home),,,:/home/vpn-users:/usr/sbin/pppd
....
</verb>
<!--
Note that I've done more than just editing the second field.  I'll say
more about the other fields later on.
-->
私が 2番目のフィールドを編集するだけでなく、もっと手を加えたということを
覚えておいてください。他のフィールドについては後述します。
</p>

<!-- <sect1>User Access - letting people in -->
<sect1>ユーザアクセス - みんなを中へ
<p>
<!--
User access is done via ssh's authentication scheme.  As I've stated
above, this is how users get access to the system, while maintaining a
high level of security.  If you're not familiar with ssh, check out <url
url="http://www.ssh.org/" name="http://www.ssh.org/"> Note that I am
using ssh version 1, not version 2.  There is a big difference, notably
that version 1 is free, and 2 isn't.
-->
ユーザアクセスは ssh の認証スキームを通して為されます。上で述べたように、
これが高レベルのセキュリティを維持しつつ、ユーザがシステムにアクセスする
方法です。もし ssh に馴染みがなければ、<url
url="http://www.ssh.org/" name="http://www.ssh.org/">をチェックしてみてください。
私が ssh のバージョン 2 でなくバージョン 1 を使っているということに注意して
ください。特に、バージョン 1 はフリーで、2 はそうでないという大きな違いが
あります。
</p>
<!-- <sect2>Configuring <tt>sshd</tt> -->
<sect2><tt>sshd</tt> を設定する
<p>
<!--
You'll need to configure sshd.  The following options should be present.
The idea is to disable password authentication and rhosts
authentication. The following options should be present in your
<tt>/etc/sshd_config</tt> file.
-->
あなたは sshd を設定する必要があるでしょう。オプションには次のような
ものがあります。意図しているのはパスワード認証および rhosts 認証を不可に
するということです。/etc/sshd_config ファイルには、次に挙げるような
オプションがあります。
</p><p>
<verb>
PermitRootLogin yes
IgnoreRhosts yes
StrictModes yes
QuietMode no
CheckMail no
IdleTimeout 3d
X11Forwarding no
PrintMotd no
KeepAlive yes
RhostsAuthentication no
RhostsRSAAuthentication no
RSAAuthentication yes
PasswordAuthentication no
PermitEmptyPasswords no
UseLogin no
</verb>
</p>
<!-- <sect1>Restricting Users -->
<sect1>ユーザを制限する
<p>
<!--
Now that you're keeping the bad people out, and only letting the good people
in, you may need to make sure that the good people behave themselves.  This is
most easily done by not letting them do anything except run pppd.  This may
or may not be necessary.  I restrict users because the system that I maintain
is dedicated to VPN, users have no business doing anything else on it.
-->
これで悪い人たちは締め出され、良い人だけがアクセスを許される
ようになったので、今度は良い人たちが悪さをしないように
手を打っておくべきかもしれません。
これは彼らに pppd 以外のものを起動させないということで、極めて簡単に実行できます。
これは必要かもしれませんし、必要でないかもしれません。私はユーザを制限
しています。それは、保守しているシステムが VPN 専用であり、ユーザは
その上でその他のことをする必要がないためです。
</p>
<!-- <sect2>sudo or not sudo -->
<sect2>sudo か否か
<p>
<!--
There is this neat little program called sudo that allows the admin on a
Unix system to grant certain users the ability to run certain programs
as root.  This is necessary in this case since pppd must be run as root.
 You'll need to use this method if you want to allow users shell access.
 Read up on how to setup and use sudo in the sudo man page.  Using sudo
is best on multi-use systems that typically host a small number of
trusted users.
-->
Unix システムの管理者が、あるユーザが特定のプログラムを root 権限で
実行できるよう許可を与える、 sudo と呼ばれる小さくて素敵なプログラム
があります。pppd は root として実行する必要があるので、この場合には必要です。
ユーザにシェルアクセスを
許可しようとする場合には、この方法を使う必要があるでしょう。sudo を
どのように設定し、sudo をどのように使うかは sudo のマニュアルページで
調べてください。概して、少数の信頼できるユーザに使われるような
複数利用システムにおいて、sudo を使うことは最善の方法です。

</p><p>
<!--
If you decide to not allow users to have shell access, then the best way
to keep them from gaining it is to make their shell be pppd.  This is
done in the /etc/passwd file. You can see <ref id="passwd" name="above">
that that is what I did for the last three users.  The last field of the
/etc/passwd file is the user's shell.  You needn't do anything special
to pppd in order to make it work.  It gets executed as root when the
user connects.  This is certainly the simplest setup to be had, as well
as the most secure. It's the ideal for large scale and corporate
systems.  I describe exactly what all needs to be done later in this
document.  You can <ref id="user-accounts" name="jump ahead"> if you
like.
-->
ユーザにシェルアクセスを許可しないことを決めたならば、そこに侵入させずにおく
もっとも良い方法は、彼らのシェルを pppd にすることです。これは /etc/passwd
ファイルによって実現できます。私が最後の 3 人のユーザにしたことは
<ref id="passwd" name="上にある記述"> で見ることが出来ます。/etc/passwd の
最後のフィールドはユーザのシェルです。pppd を動かすために
特別なことをする必要はありません。それはユーザが接続すると root として
実行されます。これは最も安全であると同時に、為し得るうちの間違いなく
最も単純な設定方法です。それは大規模でまとまったシステムに対しては
理想的です。やるべきことはこのドキュメントの後の方できちんと説明します。
お望みであれば <ref id="user-accounts" name="そちらを先に読む"> こともできます。 
</p>
<!-- <sect1>Networking -->
<sect1>ネットワーキング
<p>
<!--
Now that your users have access to the system, we need to make sure that
they have access to the network.  We do that by using the Linux kernel's
firewalling rules and routing tables.  Using the <tt>route</tt> and
<tt>ipfwadm</tt> commands, we can set up the kernel to handle network
traffic in the appropriate ways.  For more info on <tt>ipfwadm</tt>,
<tt>ipchains</tt> and <tt>route</tt> see the <url
url="http://www.linuxdoc.org/HOWTO/Linux-Networking-HOWTO.html"
name="Linux Networking HOWTO">.
-->
これでユーザはシステムにアクセス出来るようになったわけですが、
彼らがネットワークにアクセスできることは確認する必要があります。
私たちは Linux カーネルのファイアウォールのルールとルーティングテーブル
によってそれを行います。<tt>route</tt> および <tt>ipfwadm</tt> コマンドを
使うと、ネットワークトラフィックを適切な方法で扱うようカーネルを設定
することができます。これ以上の <tt>ipfwadm</tt>, <tt>ipchains</tt>
それから <tt>route</tt> についての情報のためには<url
url="http://www.linuxdoc.org/HOWTO/Linux-Networking-HOWTO.html"
name="Linux Networking HOWTO"> を参照してください。
</p>
<!-- <sect2>The Kernel -->
<sect2>カーネル
<p>
<!--
In order for any of this to work, you must have your kernel configured
correctly.  If you don't know how to build your own kernel, then you
should read the <url
url="http://www.linuxdoc.org/HOWTO/Kernel-HOWTO.html" name="Kernel
HOWTO">. You'll need to make sure that the following kernel options
are turned on in addition to basic networking.  I use a 2.0.38 kernel
in my system.
-->
このいくつかを動作させるためには、カーネルを正しく設定しなくてはなりません。
もし自分のカーネルをどのように構築すればよいか分からないなら、<url
url="http://www.linuxdoc.org/HOWTO/Kernel-HOWTO.html" name="Kernel
HOWTO">を読むべきです。基本ネットワークに加えて、次に示す
カーネルオプションがオンになっていることを確認する必要があるでしょう。
私は自分のシステムで 2.0.38 カーネルを使っています。
</p><p>
<!-- For 2.0 kernels: -->
 2.0 カーネルにおいて - 
<itemize>
<item>CONFIG_FIREWALL
<item>CONFIG_IP_FORWARD
<item>CONFIG_IP_FIREWALL
<item>CONFIG_IP_ROUTER
<item>CONFIG_IP_MASQUERADE (optional)
<item>CONFIG_IP_MASQUERADE_ICMP (optional)
<item>CONFIG_PPP
</itemize>
</p><p>
<!-- For 2.2 kernels: -->
 2.2 カーネルにおいて - 
<itemize>
<item>CONFIG_FIREWALL
<item>CONFIG_IP_ADVANCED_ROUTER
<item>CONFIG_IP_FIREWALL
<item>CONFIG_IP_ROUTER
<item>CONFIG_IP_MASQUERADE (optional)
<item>CONFIG_IP_MASQUERADE_ICMP (optional)
<item>CONFIG_PPP
</itemize>
</p>
<!-- <sect2>Filter Rules -->
<sect2>フィルタ規則
<p>
<!--
First, we write firewall filter rules that allow our users to access our
internal nets, while restricting them from accessing the outside
internet. If this sounds wierd, but think about it this way: they
already have access to the internet, so why let them use the tunnel to
access the net?  It wastes both our bandwidth and processor.
-->
まず、外側のインターネットへのアクセスを制限しつつ、ユーザが内部ネットワークへ
アクセス出来るよう、ファイアウォールのフィルタ規則を記述しましょう。
もしこれが奇妙に聞こえるなら、
それについてはこう考えてみてください - 彼らは既にインターネットに
アクセスできる状態にあり、それでなぜ彼らがネットにアクセスする際にトンネルを
使わせるのか。それは帯域幅とプロセッサの無駄遣いです。
</p><p>
<!--
The filter rules that we use depend upon which internal nets we use. 
But basically they say: "Allow traffic coming from our VPNs that is
destined for our internal nets to go there."  So how do we do that?
As always, it depends.  If you are running a 2.0 kernel, you use the
tool called <tt>ipfwadm</tt>, if on the other hand you are using a
2.2 kernel, you use the utility called <tt>ipchains</tt>.
-->
適用されるフィルタ規則は利用する内部ネットワークに依存しています。
しかし実際、ユーザは言います - "VPN の外側から、内部ネットに
向かって来ているトラフィックを許可しなさい"。ではどうしたら良いのでしょうか？
いつものように、それは場合によるのです。もし 2.0 カーネルを
動かしているならば、<tt>ipfwadm</tt> と呼ばれるツールを使います。
一方、もし 2.2 カーネルを動かしているのなら、<tt>ipchains</tt> と
呼ばれるユーティリティを使います。
</p><p>
<!--
To set the rules with <tt>ipfwadm</tt>, run it with options similar to
the following:
-->
<tt>ipfwadm</tt> で規則を設定するためには、次に示すようなオプションで
それを実行してください。
</p><p>
<verb>
# /sbin/ipfwadm -F -f
# /sbin/ipfwadm -F -p deny
# /sbin/ipfwadm -F -a accept -S 192.168.13.0/24 -D 172.16.0.0/12
</verb>
</p><p>
<!--
To set the rules with <tt>ipchains</tt>, run it with options similar to
the following:
-->
<tt>ipchains</tt> で規則を設定するためには、次に示すようなオプションで
それを実行してください。
</p><p>
<verb>
# /sbin/ipchains -F forward
# /sbin/ipchains -P forward DENY
# /sbin/ipchains -A forward -j ACCEPT -s 192.168.13.0/24 -d 172.16.0.0/12
</verb>
</p><p>
<!--
For those using 2.2 kernels, please read <ref id="ipv4forwarding" name="this">.
-->
2.2 カーネルを使っている人は<ref id="ipv4forwarding" name="ここ">を
読んでください。
</p>
<!-- <sect2>Routing -->
<sect2>ルーティング
<p>
<!--
So, now our users are allowed to access our nets, now we need to tell
the kernel where to send the packets.  On my system, I have two ethernet
cards, one is on the external network, while the other is on the
internal network. This helps keep things secure, as outbound traffic is
masqueraded by our gateway, and any incoming traffic is filtered and
routed by our Cisco.  For most setups, the routing should be simple.
-->
ユーザはネットへのアクセスを許されますので、今度は
カーネルに、パケットを送る場所を指示しなければなりません。
システムにおいて、私は 2 つのイーサネットカードを持っています。
一方は外部ネットワークに対するもの、もう一方は内部ネットワークに
対するものです。このことは、外に向かうトラフィックはゲートウェイで
マスカレードされ、中に入ってくる全てのトラフィックは Cisco で
取り除かれ 経路を定められるので、安全性を保つのに役立ちます。
大部分の設定において、経路設定はシンプルであるべきです。
</p><p>
<!--
What we do is route all traffic destined for the private networks out the
internal interface, and all other traffic out the external interface.  The
specific routing commands depend on which internal nets you are using.
Below is an example of what they might look like.  These lines are of course
in addition to your basic routes for your local nets.  I also doubt that you
are using all 3 groups of internal numbers.
-->
これからやるのは、内部インターフェースから出てプライベートネットワークに
向かって来る全てのトラフィック、それから外部インターフェースから出る
その他 全てのトラフィックの経路を設定するということです。
特定の経路設定コマンドは利用している内部ネットに依存しています。
以下はそれがどのようなものであるかの一つの例です。これらの行は
もちろん、ローカルネットの基本経路に付け加えられます。
それに、あなたは 内部番号の 3 グループ全てを使っているわけではないでしょう。
</p><p>
<!--
<verb>
Assuming that 172.16.254.254 is our internal gateway:

&num; /sbin/route add -net 10.0.0.0 netmask 255.0.0.0 gw 172.16.254.254 dev eth1
&num; /sbin/route add -net 172.16.0.0 netmask 255.240.0.0 gw 172.16.254.254 dev eth1
&num; /sbin/route add -net 192.168.0.0 netmask 255.255.0.0 gw 172.16.254.254 dev eth1
</verb>
-->
<verb>
172.16.254.254 が内部ゲートウェイであるとすると - 

# /sbin/route add -net 10.0.0.0 netmask 255.0.0.0 gw 172.16.254.254 dev eth1
# /sbin/route add -net 172.16.0.0 netmask 255.240.0.0 gw 172.16.254.254 dev eth1
# /sbin/route add -net 192.168.0.0 netmask 255.255.0.0 gw 172.16.254.254 dev eth1
</verb>
</p><p>
<!--
One additional note on routing.  If you are using two way routing for
say, a remote office, then you will need to do one more thing.  You'll
need to set up routes on the server that point back to the client.  The
easiest way to accomplish this is to run a cron job every minute that
quietly sets back routes.  It's not a big deal if the client isn't
connected, <tt>route</tt> will just spit out an error (that you've
conveniently sent to <tt>/dev/null</tt>.)
-->
経路の設定における付加的な注意です。
もし、例えば離れた所にあるオフィスなど双方向の経路設定を使っている
のなら、もう一つしなくてはならないことがあります。
サーバにおいて、クライアントへ戻る経路を設定する必要があります。
これをやり遂げる最も簡単な方法は、静かに戻りの経路を設定するような
cron ジョブを 1 分毎に実行することです。クライアントが接続していなくても
たいした問題ではなく、<tt>route</tt> はエラー（あなたが都合のいいように
 <tt>/dev/null</tt> に送った）を吐くだけです。

</p>

<!-- <sect>Client -->
<sect>クライアント
<p>
<!--
Now we examine the client end.  In practice, when used to allow access
to a remote network, this box can easily serve as a Samba (Windows
Networking) server, DHCP server, and even an internal web server.  The
important thing to remember is that this box should be as secure as
possible, as it runs your whole remote network.
-->
さてクライアントの方を調べてみましょう。実際、リモートネットワークに対して
常にアクセスを許すときには、この箱は簡単に Samba（Windows ネットワーク）サーバ、
DHCP サーバ、それから内部のウェブサーバにできます。
覚えておかなくてはならない重要なことは、この箱はリモートネットワーク全体で
動作するのですから、可能な限り安全であるべきだということです。
</p>
<!-- <sect1>The Kernel -->
<sect1>カーネル
<p>
<!--
First things first, you must have ppp available in your kernel.  If you are
going to allow multiple machines to use the tunnel, then you need to have
firewalling and forwarding available too.  If the client is going to be a single
machine, ppp is enough.
-->
重要なものから先に話しておくと、あなたはカーネルの中で ppp を有効にして
おく必要があります。もし複数のマシンに対してトンネルの使用を許そうと
しているのであれば、ファイアウォール、フォワーディングも有効にしておく
必要があります。
クライアントが単一のマシンであるなら、ppp だけで十分です。
</p>
<!-- <sect1>Bring up the link -->
<sect1>リンクを確立する
<p>
<!--
The link is created by running <tt>pppd</tt> through a pseudo terminal that is
created by <tt>pty-redir</tt> and connected to <tt>ssh</tt>.  This is done with
something similar to the following sequence of commands:
-->
リンクは、擬似端末を通して動作している <tt>pppd</tt> によって生成されます。
（その擬似端末は）<tt>pty-redir</tt> によって生成され、<tt>ssh</tt> に接続
されています。これは次に示すようなコマンド列によって実現されます - 
</p><p>
<verb>
# /usr/sbin/pty-redir /usr/bin/ssh -t -e none -o 'Batchmode yes' -c blowfish -i /root/.ssh/identity.vpn -l joe > /tmp/vpn-device
# sleep 10

# /usr/sbin/pppd `cat /tmp/vpn-device`
# sleep 15

# /sbin/route add -net 172.16.0.0 gw vpn-internal.mycompany.com netmask 255.240.0.0
# /sbin/route add -net 192.168.0.0 gw vpn-internal.mycompany.com netmask 255.255.0.0
</verb>
</p><p>
<!--
Simply, what this does is run ssh, redirecting it's input and output to
pppd.  The options passed to ssh configure it to run without escape
characters (-e), using the blowfish crypto algorithm (-c), using the
identity file specified (-i), in terminal mode (-t), with the options
 'Batchmode yes' (-o).  The sleep commands are used to space out the
executions of the commands so that each can complete their
startup before the next is run.
-->
単にこれがやるのは ssh を実行し、その入出力を pppd にリダイレクト
するということです。ssh に渡されるオプションは、それをエスケープ
キャラクタなしで動作し (-e) 、 blowfish 暗号化アルゴリズム
を使い (-c)、指定した認証ファイルを使って (-i)、ターミナルモードで (-t)、
さらに 'Batchmode yes' オプションつきで (-o) 実行するよう設定します。
sleep コマンドは、それぞれがその次のコマンドの実行前に起動を完了
できるように、コマンドの実行の間隔をあけるために使用されます。
</p>
<!-- <sect1>scripting -->
<sect1>スクリプトを書く
<p>
<!--
Of course you don't want to have to type those commands in every time
that you want to get the tunnel running.  I've written a set of bash
scripts that keep the tunnel up and running.  You can download the
package from <url url="http://www.shinythings.com/vpnd/vpnd.tar.gz"
name="here">. Just download that an uncompress it into /usr/local/vpn.
Inside you'll find three files:
-->
もちろん、あなたはトンネルを通過させたいときに、その都度それらのコマンドを
入力したくはないでしょう。私はトンネルをそのまま通れるようにしておく
ような bash スクリプトのセットを書きました。パッケージは 
<url url="http://www.shinythings.com/vpnd/vpnd.tar.gz"
name="ここ">からダウンロードできます。ダウンロードして /usr/local/vpn に
伸長してください。その中には 3 つのファイルがあります - 
</p><p>
<itemize>
<!--
<item>vpnd: The script that controls the tunnel connection.
<item>check-vpnd: a script to be run by cron to check that vpnd is still up.
<item>pty-redir: a small executable needed to initialize the tunnel.
-->
<item>vpnd - トンネル接続を制御するスクリプト
<item>check-vpnd - vpnd が起動しているかどうかをチェックするために cron に
                   よって実行されるスクリプト
<item>pty-redir - トンネルを初期化するために必要な、小さな実行ファイル
</itemize>
</p><p>
<!--
You'll need to edit the <tt>vpnd</tt> script to set things like the client's
username and the server's names.  You may also need to modify the starttunnel
section of the script to specify which networks you are using.  Below is a copy of the script
for your reading enjoyment.  You'll note that you could put the script in a
different directory, you just need to change the VPN_DIR variable.
-->
クライアントのユーザ名やサーバの名前というようなことを設定するためには
<tt>vpnd</tt> を編集する必要があるでしょう。また利用している
ネットワークを指定するために、スクリプトの starttunnel セクションを編集
する必要もあるでしょう。以下はあなたに喜んで読んでもらうための、スクリプトの
コピーです。スクリプトは別なディレクトリに入れておくことができ、
そのためには VPN_DIR 変数を変更すればよいということを覚えておいてください。
</p><p>
<label id="vpnd-script"><verb>

#! /bin/bash
#
# vpnd: Monitor the tunnel, bring it up and down as necessary
#

USERNAME=vpn-username
IDENTITY=/root/.ssh/identity.vpn

VPN_DIR=/usr/local/vpn
LOCK_DIR=/var/run
VPN_EXTERNAL=vpn.mycompany.com
VPN_INTERNAL=vpn-internal.mycompany.com
PTY_REDIR=${VPN_DIR}/pty-redir
SSH=${VPN_DIR}/${VPN_EXTERNAL}
PPPD=/usr/sbin/pppd
ROUTE=/sbin/route
CRYPTO=blowfish
PPP_OPTIONS="noipdefault ipcp-accept-local ipcp-accept-remote local noauth nocrtscts lock nodefaultroute"
ORIG_SSH=/usr/bin/ssh


starttunnel () {
   $PTY_REDIR $SSH -t -e none -o 'Batchmode yes' -c $CRYPTO -i $IDENTITY -l $USERNAME > /tmp/vpn-device
   sleep 15

   $PPPD `cat /tmp/vpn-device` $PPP_OPTIONS
   sleep 15

   # Add routes (modify these lines as necessary)
   /sbin/route add -net 10.0.0.0 gw $VPN_INTERNAL netmask 255.0.0.0
   /sbin/route add -net 172.16.0.0 gw $VPN_INTERNAL netmask 255.240.0.0
   /sbin/route add -net 192.168.0.0 gw $VPN_INTERNAL netmask 255.255.0.0
}

stoptunnel () {
   kill `ps ax | grep $SSH | grep -v grep | awk '{print $1}'`
}

resettunnel () {
   echo "reseting tunnel."
   date >> ${VPN_DIR}/restart.log
   eval stoptunnel
   sleep 5
   eval starttunnel
}

checktunnel () {
   ping -c 4 $VPN_EXTERNAL 2>/dev/null 1>/dev/null

   if [ $? -eq 0 ]; then
      ping -c 4 $VPN_INTERNAL 2>/dev/null 1>/dev/null
      if [ $? -ne 0 ]; then
         eval resettunnel
      fi
   fi
}

settraps () {
   trap "eval stoptunnel; exit 0" INT TERM
   trap "eval resettunnel" HUP
   trap "eval checktunnel" USR1
}

runchecks () {
   if [ -f ${LOCK_DIR}/tunnel.pid ]; then
      OLD_PID=`cat ${LOCK_DIR}/vpnd.pid`
      if [ -d /proc/${OLD_PID} ]; then
         echo "vpnd is already running on process ${OLD_PID}."
         exit 1
      else
         echo "removing stale pid file."
         rm -rf ${LOCK_DIR}/vpnd.pid
         echo $$ > ${LOCK_DIR}/vpnd.pid
         echo "checking tunnel state."
         eval checktunnel
      fi
   else
      echo $$ > ${LOCK_DIR}/vpnd.pid
      eval starttunnel
   fi
}

case $1 in
    check)  if [ -d /proc/`cat ${LOCK_DIR}/vpnd.pid` ]; then
               kill -USR1 `cat ${LOCK_DIR}/vpnd.pid`
               exit 0
            else
               echo "vpnd is not running."
               exit 1
            fi ;;

    reset)  if [ -d /proc/`cat ${LOCK_DIR}/vpnd.pid` ]; then
               kill -HUP `cat ${LOCK_DIR}/vpnd.pid`
               exit 0
            else
               echo "vpnd is not running."
               exit 1
            fi ;;

   --help | -h)
            echo "Usage: vpnd [ check | reset ]"
            echo "Options:"
            echo "     check    Sends running vpnd a USR1 signal, telling it to check"
            echo "              the tunnel state, and restart if neccesary."
            echo "     reset    Sends running vpnd a HUP signal, telling it to reset"
            echo "              it's tunnel connection." ;; 
esac

ln -sf $ORIG_SSH $SSH
settraps
runchecks

while true; do
   i=0
   while [ $i -lt 600 ]; do
      i=((i+1))
      sleep 1
   done
   eval checktunnel
done

</verb>
</p>
<!-- <sect1>LRP - Linux Router Project -->
<sect1>LRP - Linux ルータプロジェクト
<p>
<!--
I actually run this setup on pentium 90's running the LRP distribution
of Linux.  LRP is a distribution of Linux that fits in, and boots off of
a single floppy disk.  You can learn more about it at <url
url="http://www.linuxrouter.org/" name="http://www.linuxrouter.org/"> 
You can download my LRP package for the VPN client from <url
url="http://www.shinythings.com/vpnd/vpnd.lrp" name="here">.  You will
also need both the ppp and ssh packages from the LRP site.
-->
実際、私はこの環境を Linux の LRP ディストリビューションが走る pentium
90MHz の上で動作させています。LRPは 1 枚のフロッピーディスクに収まり、
起動する Linux ディストリビューションです。これ以上のことについては <url
url="http://www.linuxrouter.org/" name="http://www.linuxrouter.org/">
で学ぶことができます。
私の VPN クライアント用の LRP パッケージは、<url
url="http://www.shinythings.com/vpnd/vpnd.lrp" name="ここ">から
ダウンロードできます。それから ppp および ssh パッケージも LRP サイト
から得る必要があるでしょう。
</p>

<!-- <sect>Implementation -->
<sect>実行
<p>
<!--
In this section, I explain step by step how to set up your VPN system.  I'll start
with the server, and then move on to the client.  For the purposes of an example, I
will invent a situation that would require a couple of different kinds of VPN set up.
-->
このセクションでは VPN システムの構築法について順番に説明します。まずサーバから
始め、次にクライアントへと移っていきます。例とするために、異なる 2 種類の
VPN 設定を必要とする状況を考えてみます。
</p>
<!-- <sect1>Planning -->
<sect1>計画
<p>
<!--
Let's imagine that we have a company, called mycompany.com.  At our head
office, we are using the 192.168.0.0 reserved network, breaking the
class B into 256 class C networks to allow routing.  We have just set up
two small remote offices, and want to add them to our network.  We also
want to allow employees who work from home to be able to use their DSL
and cable modem connections instead of making them use dialup.  To
start, we need to plan things out a little.
-->
mycompany.com という会社を持っていると想像してみてください。本社
オフィスで、予約されたネットワーク 192.168.0.0 を使っており、
経路設定を許すようにクラス B ネットワークを 256 のクラス C に
しています。ちょうど 2 つの小さな離れた所にあるオフィスを設定したところで、
それらをネットワークに追加したいと思っています。また
自宅から仕事している従業員に、彼らがダイヤルアップする代わりに
DSL や ケーブルモデムで接続できるようにさせたいとも思っています。
始めるためには少しばかり計画を立てなくてはなりません。
</p><p>
<!--
I decide that I want to give each remote office a class C network range
to allow them to expand as necessary.  So, I reserve the 192.168.10.0
and 192.168.11.0 nets.  I also decide that for home users, I've got
enough numbers that I don't need to masquerade them on the VPN server
side.  Each client gets it's own internal IP.  So, I need to reserve
another class C for that, say 192.168.40.0.  The only thing that I must
now do is to add these ranges to my router.  Let's imagine that our
company owns a small Cisco (192.168.254.254) that handles all of the
traffic through our OC1.  Just set routes on the Cisco such that traffic
headed to these reserved nets goes to our VPN server (192.168.40.254).
I put the VPN server into the home user's net for reasons that should
become clear later.  We'll name the external interface of the server
vpn.mycompany.com, and the internal vpn-internal.mycompany.com.
-->
それぞれの離れた所にあるオフィスで必要に応じて拡張できるよう、クラス C
ネットワークの範囲を割り当てることにします。そこで、192.168.10.0
と 192.168.11.0 ネットを予約します。自宅ユーザに対しても
VPN サーバ側でマスカレードする必要のない十分な数を確保することにします。
各クライアントはそれ自身の内部 IP を取得します。そこで、そのために
他のクラス C、192.168.40.0 を予約する必要があります。
今やらなくてはならないのは、ルータにそれらの範囲を追加することです。
私たちの会社が、OC1 を通過するトラフィック全てを取り扱う小さな Cisco
 (192.168.254.254) を所有していると思ってください。それらの予約された
ネットから VPN サーバ (192.168.40.254) へ向かうトラフィックを
Cisco 上で経路設定してください。
私は後で明かす理由のため、VPN サーバを自宅ユーザのネットに組み入れます。
サーバの外部インターフェースは vpn.mycompany.com 、
内部インターフェースは vpn-internal.mycompany.com と名づけることに
します。 
</p><p>
<!--
As for external numbers, we don't need to know them explicitly. You
should have your own numbers, supplied by your ISP.
-->
外部番号について、はっきりと知っておく必要はありません。
ISP によって割り当てられた自分自身の番号を知っているべきです。
</p>
<!-- <sect1>Gather the tools -->
<sect1>ツールを集める
<p>
<!--
we're going to need a few pieces of software.  Get the following
packages, and install them where specified.
-->
多少、ソフトウェアが必要になってきました。
次に挙げるパッケージを取得して、指定された場所にインストールしてください。
</p>
<!-- <sect2>For the Server: -->
<sect2>サーバに対して - 
<p>
<itemize>
<!--
<item>pppd (version 2.3 or greater)
<item>ssh (version 1.2.26 or better)
-->
<item>pppd (バージョン 2.3 以降)
<item>ssh (バージョン 1.2.26 以降)
</itemize>
</p>
<!-- <sect2>For the Client: -->
<sect2>クライアントに対して - 
<p>
<itemize>
<!--
<item>pppd (same version as server)
<item>ssh
<item><url url="ftp://ftp.vein.hu/ssa/contrib/mag/pty-redir-0.1.tar.gz" name="pty-redir">
-->
<item>pppd (サーバと同じバージョン)
<item>ssh
<item><url url="ftp://ftp.vein.hu/ssa/contrib/mag/pty-redir-0.1.tar.gz" name="pty-redir">
</itemize>
</p>
<!-- <sect1>Server: Build the kernel -->
<sect1>サーバ - カーネルを構築する
<p>
<!--
To start, you'll probably need to rebuild your kernel for the server.
You need to make sure that the following kernel options are turned on in
addition to basic networking and everything else that you might need. If
you've never built your own kernel before, read the <url
url="/HOWTO/Kernel-HOWTO.html" name="Kernel HOWTO">.
-->
最初に、多分、あなたはサーバのためにカーネルを再構築する必要があるでしょう。
基本ネットワークやその他の必要な項目に加えて、必ず以下のオプションをオンにしてください。
もし以前にカーネルを構築したことがなければ、<url
url="http://www.linuxdoc.org/HOWTO/Kernel-HOWTO.html" name="Kernel HOWTO">を読んでください。
&lsqb;訳注：日本語訳は <url url="http://www.linux.or.jp/JF/JFdocs/Kernel-HOWTO.html"> にあります。&rsqb;
</p><p>
<!--
For 2.0 kernels:
-->
2.0 カーネルに対して - 
<itemize>
<item>CONFIG_FIREWALL
<item>CONFIG_IP_FORWARD
<item>CONFIG_IP_FIREWALL
<item>CONFIG_IP_ROUTER
<item>CONFIG_PPP
</itemize>
</p><p>
<!--
For 2.2 kernels:
-->
2.2 カーネルに対して - 
<itemize>
<item>CONFIG_FIREWALL
<item>CONFIG_IP_ADVANCED_ROUTER
<item>CONFIG_IP_FIREWALL
<item>CONFIG_IP_ROUTER
<item>CONFIG_PPP
</itemize>
</p>
<!-- <sect1>Server: Configure Networking -->
<sect1>サーバ - ネットワークを設定する
<p>
<!--
If you are building a server that has only one network card, I suggest
that you think about buying another, and rewiring your network.  The
best way to keep your network private is to keep it on it's own wires. 
So if you do have two network cards, you'll need to know how to
configure both of them.  We'll use eth0 for the external interface, and eth1 for
the internal interface.
-->
ネットワークカード 1 枚しかないサーバを構築しようとしているのであれば、
もう 1 枚買って、新たに配線することを検討するよう勧めます。
ネットワークの非公開性をそのままにしておく一番良い方法は、それを
それ自身の線に割り当てることです。もし 2 枚のネットワークカード
を持っているのであれば、それぞれの設定方法を知る必要があります。
私たちは外部インターフェースに eth0、内部インターフェースに eth1 を使います。
</p>
<!-- <sect2>Configuring the interfaces -->
<sect2>インターフェースを設定する
<p>
<!--
We first should configure the external interface of the server.  You
should already know how to do this, and probably already have it done. 
If you don't, then do so now.  If you don't know how, go back and read
the <url url="/HOWTO/NET3-4-HOWTO.html" name="Networking HOWTO">
-->
最初にサーバの外部インターフェースを設定する必要があります。
既にどうすれば良いか知っているはずですし、多分、既に設定してしまった事でしょう。
まだであれば、すぐにやってください。どうすれば良いか分からなければ、戻って
<url url="http://www.linuxdoc.org/HOWTO/NET3-4-HOWTO.html" name="Networking HOWTO">
を読んでください。
</p><p>
<!--
Now we bring up the internal interface.  According to the numbers that
we've chosen, the internal interface of the server is 192.168.40.254.
so we have to configure that interface.
-->
では内部インターフェースを設定します。番号は私たちの選択によって、
サーバの内部インターフェースが 192.168.40.254 です。
ではそのインターフェースを設定しましょう。
</p><p>
<!--
For 2.0 kernels, use the following:
-->
2.0 カーネルでは次を使ってください - 
</p><p>
<verb>
# /sbin/ifconfig eth1 192.168.40.254 netmask 255.255.255.0 broadcast 192.168.40.255
# /sbin/route add -net 192.168.40.0 netmask 255.255.255.0 dev eth1
</verb>
</p><p>
<!--
For 2.2 kernels, use the following:
-->
2.2 カーネルでは次を使ってください - 
</p><p>
<verb>
# /sbin/ifconfig eth1 192.168.40.254 netmask 255.255.255.0 broadcast 192.168.40.255
</verb>
</p><p>
<!--
That get's our basic interfaces up.  You can now talk to machines on
both local networks that are attached to the server.
-->
それで基本インターフェースが用意できます。これで両方の
ローカルネットワークによってサーバに繋がったマシンに話しかけることが
できます。
</p>
<!-- <sect2>Setting routes -->
<sect2>経路を設定する
<p>
<!--
We can now talk to machines on our local nets, but we can't get to the rest
of our internal network.  That requires a few more lines of code.  In order
to reach the other machines on other subnets, we need have a route that tells
traffic to go to the Cisco router. Here's that line:
-->
私たちはローカルネットにあるマシンと話すことはできる様になりましたが、
内部ネットワークの残りとは話すことができません。
そうするにはもう数行コードが必要です。他のサブネットにあるほかのマシン
に到達するためには、トラフィックが Cisco ルータに向かうような経路を
知る必要があります。次のようにします - 
<verb>
# /sbin/route add -net 192.168.0.0 gw 192.168.254.254 netmask 255.255.0.0 dev eth1
</verb>
</p><p>
<!--
That line tells the kernel that any traffic destined for the 192.168.0.0 network
should go out eth1, and that it should be handed off to the Cisco.  Traffic for
our local net still gets where it is supposed to because the routing tables
are ordered by the size of the netmask.  If we were to have other internal nets
in our network, we would have a line like the above for each net.
-->
その行は、192.168.0.0 ネットワークに行くことになっているいくつかのトラフィック
は eth1 を出るべきで、それは Cisco に伝えられるべきであるということを
カーネルに伝えます。
ルーティングテーブルがネットマスクのサイズで決められるため、
ローカルネットに向かうトラフィックには、まだ向かうべき場所が分かっています。
もし他にもネットワークの中に内部的なネットワークがあるなら、それぞれに
対して、上記のような指定をすることになります。
<!-- <sect2>Making filter rules -->
<sect2>フィルタ規則を作成する
<p>
<!--
Ok, so we can reach every machine that we could need to.  Now we need to write
the firewall filtering rules that allow or deny access through the VPN server.
-->
OK, 必要とされ得るマシン全てに到達できるようになりました。
今度は、VPN サーバを通してアクセスを許すか許さないかという、
ファイアウォールのフィルタ規則を記述しなくてはなりません。
</p><p>
<!--
To set the rules with <tt>ipfwadm</tt>, run it like so:
-->
<tt>ipfwadm</tt> で規則を指定するには、次のようにします - 
</p><p>
<verb>
# /sbin/ipfwadm -F -f
# /sbin/ipfwadm -F -p deny
# /sbin/ipfwadm -F -a accept -S 192.168.40.0/24 -D 192.168.0.0/16
# /sbin/ipfwadm -F -a accept -b -S 192.168.10.0/24 -D 192.168.0.0/16
# /sbin/ipfwadm -F -a accept -b -S 192.168.11.0/24 -D 192.168.0.0/16
</verb>
</p><p>
<!--
To set the rules with <tt>ipchains</tt>, run it like so:
-->
<tt>ipchains</tt> で規則を指定するには、次のようにします - 
</p><p>
<verb>
# /sbin/ipchains -F forward
# /sbin/ipchains -P forward DENY
# /sbin/ipchains -A forward -j ACCEPT -s 192.168.40.0/24 -d 192.168.0.0/16
# /sbin/ipchains -A forward -j ACCEPT -b -s 192.168.10.0/24 -d 192.168.0.0/16
# /sbin/ipchains -A forward -j ACCEPT -b -s 192.168.11.0/24 -d 192.168.0.0/16
</verb>
</p><p>
<!--
This tells the kernel to deny all traffic except for the traffic that is coming
from the 192.168.40.0/24 network and destined for the 192.168.0.0/16 network. It
also tells the kernel that traffic going between the 192.168.10.0/24 and
192.168.0.0/16 nets is allowed, and the same for the 192.168.11.0 net.  These
last two are bidirectional rules, this is important for getting the routing
to work going both ways.
-->
これはカーネルに、192.168.40.0/24 ネットワークから来て 192.168.0.0/16
ネットワークに向かうものを除いた、全てのトラフィックを拒絶するように
伝えます。それはまた、192.168.10.0/24 と 192.168.0.0/16 ネットとの間で
やりとりされるトラフィックを許可するということをも伝えます。
192.168.11.0 ネットに対しても同様です。これらの最後 2 つは双方向の規則で、
これは双方向にやりとりできるよう経路を定めるためには重要なことです。
</p>
<!-- <sect2>Routing -->
<sect2>経路を設定する
<p>
<!--
For the home users, everything will work just fine to here.  However,
for the remote offices, we need to do some routing.  First of all, we
need to tell the main router, or Cisco, that the remote offices are
behind the VPN server.  So specify routes on the Cisco that tell
it to send traffic destined for the remote offices to the VPN server.
Now that that is taken care of, we must tell the VPN server what to do
with the traffic destined for the remote offices.  To do this, we run the
<tt>route</tt> command on the server.  The only problem is that in order
for the <tt>route</tt> command to work, the link must be up, and if
it goes down, the route will be lost.  The solution is to add the routes
when the clients connects, or more simply, to run the route command frequently
as it's not a problem to run it more than is necessary.  So, create a script
and add it to your crontab to be run every few minutes,  in it, put the
following:
-->
自宅ユーザにとっては、ここまでで全てがうまく動作するでしょう。
しかし、離れた所にあるオフィスのためにはいくらか経路を設定しなくてはなりません。
まず最初に、メインルータ、すなわち Cisco に、離れた所にあるオフィス
は VPN サーバの影に隠れているということを教えてやる必要があります。
ですから Cisco に対して、離れた所にあるオフィス行きのトラフィックを
VPN サーバに送るような経路を指定してください。
それがすんだら、今度は離れたオフィスに向かうトラフィックをどうすべきか
 VPN サーバに教えてやらなくてはなりません。
これをするには <tt>route</tt> コマンドをサーバで実行します。
<tt>route</tt> コマンドを動作させる上での唯一の問題は、
リンクは確立されていなくてはならず、もし切れてしまうと経路が失われて
しまうということです。解決策は、クライアントが接続してきたら
経路を追加してやる、あるいは、route コマンドは必要以上に実行しても問題無いので、
より簡単な方法としては、それを度々実行してやることです。
では、スクリプトを作成して、数分毎に実行されるようそれを crontab 
に加えてください。その中には次のように書いてください - 
</p><p>
<verb>
/sbin/route add -net 192.168.11.0 gw 192.168.10.253 netmask 255.255.255.0
/sbin/route add -net 192.168.10.0 gw 192.168.11.253 netmask 255.255.255.0
</verb>
</p>
<!-- <sect1>Server: Configure <tt>pppd</tt> -->
<sect1>サーバ - <tt>pppd</tt> を設定する
<p>
<!--
Now we will configure pppd on the server to handle VPN connections.  If
you are already using this server to handle dialup users or even dialing
out yourself, then you should note that these changes may affect those
services.  I go over how to avoid conflicts at the end of this section.
-->
さて今度は VPN 接続を取り扱うためにサーバの pppd を設定しましょう。
もしこのサーバを、ダイヤルアップユーザを処理するのに使っている、
あるいはあなた自身がダイヤルするのに使っているのであれば、これらの
変更がそれらのサービスに影響を与えるかもしれないということを覚えて
おくべきです。このセクションの最後で、いかにして衝突を回避するか検討
します。
 </p>
 <sect2><tt>/etc/ppp/</tt>
 <p>
 <!--
 This directory may contain a number of files.  You probably already
 have a file called <tt>options</tt>.  This file holds all of the global
 options for <tt>pppd</tt>.  These options cannot be overridden by <tt>pppd</tt> on the
 command line.
 -->
 このディレクトリにはたくさんのファイルがあるかもしれません。多分
 あなたは既に、<tt>options</tt> と呼ばれるファイルを持っている
 でしょう。このファイルには <tt>pppd</tt> に対する大域的なオプション
 の全てが入っています。これらのオプションは <tt>pppd</tt> の
 コマンドラインで無効にすることはできません。
 </p>
 <sect2><tt>/etc/ppp/options</tt>
 <p>
 <!--
 Your <tt>options</tt> file should contain at least the following:
 -->
 <tt>options</tt> ファイルは少なくとも次のような記述を
 含んでいるはずです - 
 </p><p>
<verb>
ipcp-accept-local
ipcp-accept-remote
proxyarp
noauth
</verb>
 </p><p>
 <!--
 The first two lines tell <tt>pppd</tt> to accept what the other end specifies
 for IP addresses.  This is necessary when hooking up remote offices, but can
 be disabled if you are only connecting home users.  It's ok to leave it on, as
 it does not prevent the server from assigning addresses, it only tells it that
 it's ok to accept what the client asks for.
 -->
 最初の 2 行は <tt>pppd</tt> に、他の端が IP アドレスとして指定したものを
 受け入れるよう指示します。これは離れた所にあるオフィスに接続するときには
 必要ですが、しかし自宅のユーザに接続しているのならば無効にすることができます。
 それはサーバがアドレスを割り当てることを妨げはしませんので有効にしておいて
 構いません。それはクライアントが求めてきたことを受け入れて良い
 ということを伝えるだけです。
 </p><p>
 <!--
 The third line is very important.  From the <tt>pppd</tt> man page:
 -->
 3 行目は非常に重要です。<tt>pppd</tt> のマニュアルページによると - 
 </p><p>
<!--
<verb>
proxyarp
       Add an entry to this system's ARP [Address  Resolu-
       tion  Protocol]  table  with  the IP address of the
       peer and the Ethernet address of this system.  This
       will  have  the effect of making the peer appear to
       other systems to be on the local ethernet.
</verb>
-->
<verb>
proxyarp
       このシステムの ARP [Address Resolution Protocol] テーブルに対して
       ピアの IP アドレスとこのシステムのイーサネットアドレスを付け加えます。
       これによって、ピアが他のシステムから見てローカルなイーサネットに
       あるように見えるという効果がもたらされます。
</verb>
 </p><p>
 <!--
 This is important because if it is not done, local traffic will not be able
 to get back through the tunnel.
 -->
 それが為されていなければ ローカルなトラフィックがトンネルを通って
 戻って来れなくなるため、これは非常に重要です。
 </p><p>
 <!--
 The last line is just as important.  This tells <tt>pppd</tt> to allow
 connections without username and password.  This is safe since authentication
 is already handled by <tt>sshd</tt>.
 -->
 最後の行も同じく重要です。これは <tt>pppd</tt> にユーザ名とパスワード
 無しで接続を許すよう指示します。これは <tt>sshd</tt> によって既に
 認証が為されているので安全です。
 </p>
 <!-- <sect2>Avoiding conflicts -->
 <sect2>衝突を回避する
 <p>
 <!--
If you are handling other services with <tt>pppd</tt>, you should
consider that the configurations for these other services may not be the
same as what the VPN system needs.  <tt>pppd</tt> is designed such that
the options in the main options file <tt>/etc/ppp/options</tt> cannot be
overridden by options specified at runtime.  This is done for security
reasons. In order to avoid conflict, determine which options cause the
conflict, and move them from the main file into a separate options file
that is loaded when the appropriate application of <tt>pppd</tt> is run.
-->
もしあなたが <tt>pppd</tt> で他のサービスを扱っているなら、それらの
他のサービスの設定は VPN システムが必要としているものとは異なっているかも
知れないということを考えてみるべきです。<tt>pppd</tt> は 
<tt>/etc/ppp/options</tt> メインオプションファイルの中のオプション
は実行時に指定されたオプションによって無効にできないように設計されて
います。これはセキュリティ上の理由に拠ります。衝突を避けるため、
どのオプションが衝突を起こしているか特定して下さい。そしてそれらを
メインファイルから <tt>pppd</tt> の特定のアプリケーション実行中に
ロードされる分離されたオプションファイルに移してください。
 </p>
<!-- <sect1>Server: Configure <tt>sshd</tt> -->
<sect1>サーバ - <tt>sshd</tt> を設定する
<p>
<!--
The following is what my <tt>/etc/sshd_config</tt> file looks like.  Yours
should look the same or similar:
-->
次に挙げるのは私の <tt>/etc/sshd_config</tt>ファイルの内容です。
あなたのファイルも、同じか、または似た形式をしているはずです - 
</p><p>
<verb>
# This is the ssh server system wide configuration file.

Port 22
ListenAddress 0.0.0.0
HostKey /etc/ssh_host_key
RandomSeed /etc/ssh_random_seed
ServerKeyBits 768
LoginGraceTime 600
KeyRegenerationInterval 3600
PermitRootLogin yes
IgnoreRhosts yes
StrictModes yes
QuietMode no
FascistLogging yes
CheckMail no
IdleTimeout 3d
X11Forwarding no
PrintMotd no
KeepAlive yes
SyslogFacility DAEMON
RhostsAuthentication no
RhostsRSAAuthentication no
RSAAuthentication yes
PasswordAuthentication no
PermitEmptyPasswords no
UseLogin no
</verb>
</p><p>
<!--
The important points to note are that password authentication is disabled
as are all of the &quot;r&quot; services.  I have also turned off mail checking
and the message of the day as they can confuse <tt>pppd</tt> on the client side.
I still allow root login, but as this can only be done with a key, it is adequately
safe.
-->
気をつけておくべき重要な点は、パスワード認証は &quot;r&quot; サービス全て
において無効になっているということです。私は、メールチェックやその日の
メッセージも、クライアント側から <tt>pppd</tt> を混乱させ得るので
無効にしています。root ログインは許可していますが、それはキーなしには実行できないため、
十分に安全です。
</p>
<!-- <sect1>Server: Set up user accounts<label id="user-accounts"> -->
<sect1>サーバ - ユーザアカウントを設定する <label id="user-accounts">
<p>
<!--
Now we'll set up the user accounts.
-->
次はユーザアカウントを設定します。
</p>
<!-- <sect2>Add <tt>vpn-users</tt> group -->
<sect2><tt>vpn-users</tt> グループを追加する
<p>
<!-- just run: -->
実行してください。
</p><p>
<verb>
# /usr/sbin/groupadd vpn-users
</verb>
</p><p>
<!--
Now cat the <tt>/etc/group</tt> file and look at the last line.  It should be
the entry for the vpn-users group.  Note the third field.  This is the group ID (GID).
Write it down, as we'll need it in a minute.  For this example, the GID is 101.
-->
では <tt>/etc/group</tt> ファイルを cat して最後の行を見てください。
それは vpn-users グループのためのエントリになっているはずです。
3 番目のフィールドに注意してください。これはグループ ID (GID) です。
すぐに必要になるのでそれを書き留めておいてください。
この例では GID は 101 です。
</p>
<!-- <sect2>create the <tt>vpn-users</tt> home directory -->
<sect2><tt>vpn-users</tt> のホームディレクトリを作る
<p>
<!--
We're going to use a single home directory for all of the users.  So just
run:
-->
私たちはユーザ全てのために一つのホームディレクトリを使おうとしています。
では実行してください -
</p><p>
<verb>
# mkdir /home/vpn-users
</verb>
</p>
<!-- <sect2>The <tt>.ssh</tt> directory -->
<sect2><tt>.ssh</tt> ディレクトリ
<p>
<!--
Now create the <tt>.ssh</tt> directory in the <tt>vpn-users</tt> home
directory.
-->
<tt>.ssh</tt> ディレクトリを <tt>vpn-users</tt> ホームディレクトリ
の中に作成します。
</p><p>
<verb>
# mkdir /home/vpn-users/.ssh
</verb>
</p>
<!-- <sect2>Adding users -->
<sect2>ユーザを追加する
<p>
<!--
Now comes the fun part.  We're going to edit the <tt>/etc/passwd</tt> file
by hand.  :)  Normally you let the system handle this file, but for a wierd
setup like this, it is easier to do it yourself.  To start, let's open the
<tt>/etc/passwd</tt> file and see what's in there.  Here's an example of what
you might find:
-->
さて面白い部分にやってきました。これから <tt>/etc/passwd</tt> ファイルを
手で編集するわけです。:) 通常はシステムに操作させるファイルなのですが、
こういう変わった設定を行うときには自分で書き換える方が簡単です。
最初に <tt>/etc/passwd</tt> ファイルを開いてそこに何があるか
見てみましょう。ここは次の例のようになっているはずです - 
</p><p>
<verb>
....
nobody:x:65534:100:nobody:/dev/null:
mwilson:x:1000:100:Matthew Wilson,,,:/home/mwilson:/bin/bash
joe:*:1020:101:Joe Mode (home),,,:/home/vpn-users:/usr/sbin/pppd
bill:*:1020:101:Bill Smith (home),,,:/home/vpn-users:/usr/sbin/pppd
frank:*:1020:101:Frank Jones (home),,,:/home/vpn-users:/usr/sbin/pppd
....
</verb>
</p><p>
<!--
You'll find the first user on most any system.  The second one is me. :)
After that are a few made up vpn-users. The first field is the username,
and the second is the password field. The third is user ID (UID) and the
fourth is the group ID (GID).  After that comes some info on who the
people are in the fifth field. The sixth field is the user's home
directory, and the last is their shell.  As you can see, each field is
separated by a colon.  Look at the last three lines. The only difference
between them is the username in the first field, and the user info in
the fifth field.  What we want to do is create lines like this for each
user.  Don't just use one user for all of the connections, you'll never
be able to tell them apart if you do.  So, copy the last line of this
file and edit it so that it looks something like the above.  Make sure
that the second field has an asterisk (*).  The second field should be
unique to all the other IDs in the file.  I used 1020.  You should use a
number above 1000, since those below are typically reserved for system
use.  The fourth field should be the group ID for vpn-users.  I told you
to write it down, now is the time that you need it. So put the group ID
in there.  Lastly, change the home directory to
<tt>/home/vpn-users</tt>, and the shell to <tt>/usr/sbin/pppd</tt>. 
That's it.  Now copy that line to make more users.  Just edit the first
the fifth fields and you're set.
-->
殆どのシステムに最初の行のユーザが見つかるでしょう。
2 番目のユーザは私です。:) その次は何人かの作成された vpn-user です。
最初のフィールドはユーザ名で、2 番目はパスワードのフィールドです。
3 番目はユーザ ID (UID) で 4 番目はグループ ID (GID) です。
つづく 5 番目のフィールドは各ユーザの個人情報です。
6 番目のフィールドはユーザのホームディレクトリで、最後は彼らのシェル
です。ご覧のとおり、各フィールドはコロンで区切られています。最後の
3 行を見てください。それらの間での唯一の違いは、最初のフィールドの
ユーザ名と、5 番目のフィールドのユーザ情報です。やりたいのは、
各ユーザに対してこのような行を作成することです。接続全てに単一の
ユーザを使わないでください。もしそうすると、彼ら個々を
見分けることはできなくなります。そこで、上に示したような内容になるよう、
このファイルの最後の行をコピーしてそれを編集してください。2 番目の
フィールドにアスタリスク (*) があることを確認してください。3 番目の
フィールドは、そのファイルの他の ID 全てと違っているべきです。
私は 1020 を使いました。普通 1000 未満はシステムの利用のために
予約されていますので、それ以上を使うべきです。
4 番目のフィールドは vpn-user のグループ ID のはずです。私は
書き留めておくよう言いました。それが必要なときがやってきました。
ではグループ ID をそこに入れてください。最後に、ホームディレクトリを
<tt>/home/vpn-users</tt> 、シェルを <tt>/usr/sbin/pppd</tt>
に変更してください。できました。ではその行を他のユーザを作成するために
コピーしてください。1 番目と 5 番目のフィールドを編集して設定するだけです。
</p>
<!-- <sect1>Server: Administration -->
<sect1>サーバ - 管理する
<p>
<!--
One of the advantages to using this system for user accounts is that you
can take advantage of the UNIX user administration commands.  Since each client
is logged in as a user, you can use standard methods to get user statistics.
The following are a few commands that I like to use to see what all is going on.
-->
ユーザアカウントに対してこのシステムを利用することの利点の一つは、
UNIX ユーザ管理コマンドを利用することができるということです。
クライアントはユーザとしてログインしていますので、あなたはユーザの統計を
得るために標準的な方法を使うことができます。次に挙げるのは、全てが
どうなっているのか見るために私が好んで使っている、少数のコマンドです。
</p><p>
<descrip>
<p><tag>who</tag>
<!--
Prints the users currently logged in, as well as when they logged in,
from where (name or IP), and on which port.
-->
現在ログインしているユーザ、それから彼らが何時、どこ (名前か IP) から、
どのポートでログインしたかを表示します。
<p><tag>w</tag>
<!--
This command prints a more extensive listing of who is currently logged
in.  It also tells you uptime and load averages for the system.  It also lists
the user's current process (which should be -pppd for VPN clients) as well
as idle time, and current CPU usage for all processes as well as the current
process.  Read the <tt>w</tt> man page for more info.
-->
このコマンドは現在ログインしている人についてより広範囲なリストを表示します。
それはシステムの利用時間と平均負荷も知らせてくれます。またユーザの、
アイドル時間を含む現在のプロセス (VPN クライアントにとっては -pppd の
はずです)、それから現在のプロセスを含む全てのプロセスの CPU 利用方法も
表示します。これ以上の情報については <tt>w</tt> のマニュアルページを
読んでください。
<p><tag>last [username]</tag>
<!--
This lists the login history for the specified user, or for all users if
a username is not provided.  It's most useful for finding out how well
the tunnels are running as it prints the length of time that the user
was logged in, or states that the user is still logged in. I should warn
you that on a system that has been up a long time, this list can grow
extremely long.  Pipe is through <tt>grep</tt> or <tt>head</tt> to find
out exactly what you want to know.
-->
これは指定されたユーザ、あるいはユーザ名が指定されなければ全ての
ユーザのログイン履歴を表示します。それはユーザがログインしていた時間、
あるいはユーザがまだログインしていることを示すので、トンネルがいかに
うまく動作しているか確かめるには最も便利な方法です。システムが長い
時間 起動しつづけていると、このリストは非常に長くなり得るという
ことを警告しておきます。パイプは <tt>grep</tt> あるいは <tt>head</tt>
を通って、知りたいことを確実に見つけます。
</descrip>
</p><p>
<!--
You can also control which users are allowed to connect by modifying the
<tt>/home/vpn-users/.ssh/authorized_keys</tt> file.  If you remove the user's
public key line from this file, they won't be able to log in.
-->
<tt>/home/vpn-users/.ssh/authorized_keys</tt> ファイルを変更して、
接続を許可するユーザを制御することもできます。もし
そのユーザの公開キーの行をこのファイルから削除すると、彼らはログインする
ことができなくなるでしょう。
</p>

<!-- <sect1>Client: Build the kernel -->
<sect1>クライアント - カーネルを構築する
<p>
<!--
Now we move onto the client.  First we must rebuild the kernel so that it can support
all of the functions that we need.  The minimum requirement is to have ppp in the
kernel.  After that, you will need forwarding, firewalling, and gatewaying only
if you are going to allow other machines access to the tunnel.  For this example, I
will setup one of the remote office machines in my example layout.  Add the following
options to your kernel.  Again, if you've never built a kernel before, read the
<url url="/HOWTO/Kernel-HOWTO.html" name="Kernel HOWTO">.
-->
クライアントに移りましょう。最初に、必要とする機能全てをサポートできるように、
カーネルを再構築しなくてはなりません。最低限求められるのは、カーネル内に ppp を
組み込むことです。その後、他のマシンに対してトンネルへのアクセスを
許可しようとしている場合に限ると、フォワーディング、ファイアウォール、ゲートウェイ機能が
必要となるでしょう。この例では、例として示したレイアウトの中の、離れたところにあるオフィスの
マシンのうちの一台を設定することにします。
次に挙げるオプションを追加してください。繰り返しになりますが、
もしあなたが以前にカーネルを構築したことがないのであれば、
<url url="http://www.linuxdoc.org/HOWTO/Kernel-HOWTO.html" name="Kernel HOWTO">を読んでください。
&lsqb;訳注：日本語訳は <url url="http://www.linux.or.jp/JF/JFdocs/Kernel-HOWTO.html"> にあります。&rsqb;
</p><p>
<!-- For 2.0 kernels: -->
2.0 カーネルに対して - 
<itemize>
<item>CONFIG_PPP
<item>CONFIG_FIREWALL
<item>CONFIG_IP_FORWARD
<item>CONFIG_IP_FIREWALL
<item>CONFIG_IP_ROUTER
<item>CONFIG_IP_MASQUERADE
<item>CONFIG_IP_MASQUERADE_ICMP
</itemize>
</p><p>
<!-- For 2.2 kernels: -->
2.2 カーネルに対して - 
<itemize>
<item>CONFIG_PPP
<item>CONFIG_FIREWALL
<item>CONFIG_IP_ADVANCED_ROUTER
<item>CONFIG_IP_FIREWALL
<item>CONFIG_IP_ROUTER
<item>CONFIG_IP_MASQUERADE
<item>CONFIG_IP_MASQUERADE_ICMP
</itemize>
</p>
<!-- <sect1>Client: Configure Networking -->
<sect1>クライアント - ネットワークを設定する
<p>
<!--
Now we should setup the networking on our client box.  Let's assume that
we've configured the external network and that it works.  Now we will configure
the internal interface of the client to service our intranet.
-->
さて、クライアントボックスを設定しましょう。外部ネットワークの
設定が済んで、それが動作していると想像しましょう。今度は、
イントラネットをサービスするためにクライアントの内部インターフェースを
設定することになるでしょう。
</p>
<!-- <sect2>Interface -->
<sect2>インターフェース
<p>
<!--
We need to first bring up the internal network interface.  To do this,
add the following to your <tt>/etc/rc.d/rc.inet1</tt> (or equivalent) file:
-->
まず最初に内部ネットワークインターフェースを設定する必要があります。
これをやるには次を <tt>/etc/rc.d/rc.inet1</tt> (あるいはそれに
相当する) ファイルに追加してください -
</p><p>
<!-- For 2.0 Kernels: -->
2.0 カーネルに対して - 
</p><p>
<verb>
/sbin/ifconfig eth1 192.168.10.253 broadcast 192.168.10.255 netmask 255.255.255.0
/sbin/route add -net 192.168.10.0 netmask 255.255.255.0 dev eth1
</verb>
</p><p>
<!-- For 2.2 Kernels: -->
2.2 カーネルに対して - 
</p><p>
<verb>
/sbin/ifconfig eth1 192.168.10.253 broadcast 192.168.10.255 netmask 255.255.255.0
</verb>
<!-- <sect2>Filter rules -->
<sect2>フィルタ規則
<p>
<!--
For setting up the remote office, we will want to set up our filter rules
that allow traffic to go both directions through the tunnel.  Add the following
lines to your <tt>/etc/rc.d/rc.inet1</tt> (or equivalent) file:
-->
離れた所にあるオフィスを設定するために、トンネルを通して
双方向にトラフィックが行き来することを許すようなフィルタ規則を設定
した方がよいでしょう。
次に挙げる行を <tt>/etc/rc.d/rc.inet1</tt> 
(またはそれに相当する) ファイルに追加してください -
</p><p>
<!-- For 2.0 kernels: -->
2.0 カーネルに対して - 
</p><p>
<verb>
/sbin/ipfwadm -F -f
/sbin/ipfwadm -F -p deny
/sbin/ipfwadm -F -a accept -b -S 192.168.10.0/24 -D 192.168.0.0/16
</verb>
</p><p>
<!-- For 2.2 kernels: -->
2.2 カーネルに対して - 
</p><p>
<verb>
/sbin/ipchains -F forward
/sbin/ipchains -P forward DENY
/sbin/ipchains -A forward -j ACCEPT -b -s 192.168.10.0/24 -d 192.168.0.0/16
</verb>
</p><p>
<!--
You may have noticed that these lines look like what we have
on the server.  That's because they are the same.  These rules
just say where traffic is allowed to go, that is, between these
two networks.
-->
あなたは、これらの行がサーバにあるものと似ていることに
気づいたかもしれません。なぜかというとそれは同じものだからです。
この規則はまさに、これらの 2 つのネットワークの間でトラフィックが
向かうことができる場所を述べています。
</p>
<!-- <sect2>Routing -->
<sect2>経路を設定する
<p>
<!--
The only extra routes that are needed are created by the script
that bring the tunnel up.
-->
唯一必要な特別の経路はトンネルを構築するスクリプトによって
作られます。
</p>
<!-- <sect1>Client: Configure <tt>pppd</tt> -->
<sect1>クライアント - <tt>pppd</tt>を設定する
<p>
<!--
You may not need to edit the client's <tt>/etc/ppp/options</tt> file at
all. You will if the "auth" option is present, or some of the other
priveledged options.  Try it, and if it fails, a black
<tt>/etc/ppp/options</tt> will work. just keep adding the options from
the old file to figure out which one broke it (if it's not obvious) and
see if you can get around that.  Maybe you don't need them at all.  You
probably don't if you don't use <tt>pppd</tt> for anything else.
-->
クライアントの <tt>/etc/ppp/options</tt> ファイルを編集する必要は
全くないかもしれません。"auth" オプション、あるいは他の特権オプション
が与えられた場合はその必要があるでしょう。やってみて駄目だったら、不正な
<tt>/etc/ppp/options</tt> が動作するでしょう。
どれ(もしそれが明白でなければ)がおかしくしたのかを見つけるために、
古いファイルからオプションを追加しつづけ、それを回避できるかどうか見極めてください。
それらは全く必要ないかもしれません。
あなたが <tt>pppd</tt> を他のことに使っていなければ、多分必要ないでしょう。

</p>
<!-- <sect1>Client: Configure <tt>ssh</tt> -->
<sect1>クライアント - <tt>ssh</tt> を設定する
<p>
<!--
As root on the client, run the following lines:
-->
クライアントの root で次の行を実行してください - 
</p><p>
<verb>
# mkdir /root/.ssh
# ssh-keygen -f /root/.ssh/identity.vpn -P ""
</verb>
</p><p>
<!--
This will create two files, <tt>identity.vpn</tt> and <tt>identity.vpn.pub</tt> in the
<tt>.ssh</tt> directory.  The first is your private key, and should be kept such.
<em>NEVER SEND THIS OVER THE NET</em> unless it is via an encrypted session.  The
second file is your public key, and you can send this anywhere you want, it only
serves to allow you access to other systems, and cannot be used to get into your
own.  It is a text file with one line in it that is your actual key.  At the end
of the line is the comment field which you may change without fear of breaking
the key.  an example key looks something like this:
-->
これは <tt>.ssh</tt> ディレクトリに <tt>identity.vpn</tt> と 
<tt>identity.vpn.pub</tt> の 2 つのファイルを作成するでしょう。
最初はあなたのプライベートキーで、そのままにしておくべきです。
暗号化されたセッションを通すのでない限り、<em>ネット上でこれを絶対に送信しないで
ください</em>。2 番目のファイルはあなたの公開キーで、あなたが他のシステムにアクセス
することを許可するだけで、あなたのシステムに入るために使うことはできないので、
これは何処でも好きなところへ送ることができます。
それは実際のキーを 1 行含むテキストファイルです。行の最後は、キーを壊すことを
怖がらずに変更できるコメントフィールドです。
例えばキーは次のようなものです -
</p><p>
<verb>
1024 35 1430723736674162619588314275167.......250872101150654839 root@vpn-client.mycompany.com
</verb>
</p><p>
<!--
It's actually a lot longer than that, but it wouldn't fit on the page if I
showed the whole thing.  Copy your key into the <tt>/home/vpn-users/.ssh/authorized_keys</tt>
file on the server.  Make sure that there is only one key per line, and
that each key is not broken onto multiple lines.  You may alter
the comment field all that you like in order to help you remember which
line goes with which user.  I highly recommend doing so.
-->
実際にはそれよりかなり長いですが、全部を見せたとしてもページには
そぐわないでしょう。サーバの <tt>/home/vpn-users/.ssh/authorized_keys</tt>
ファイルにキーをコピーしてください。1 行あたり 1 つのキーがあり、
各キーが複数行にまたがって壊れていないことを確認してください。
どの行がどのユーザに対応するのか思い出す助けになるよう、コメントフィールド
全てを好きなように変更することができます。私はそうすることを強く勧めます。
</p>
<!-- <sect1>Client: Bring up the connection -->
<sect1>クライアント - 接続を確立する
<p>
<!--
Now we'll try to actually make the connection to the VPN server.  First
we'll need to make a single connection the set up <tt>ssh</tt>'s known_hosts
file.  Run this:
-->
では VPN サーバに実際に接続してみましょう。まず、単一の接続を行い、
<tt>ssh</tt> のknown_hosts ファイルの設定をする必要があります。
これを実行してください - 
</p><p>
<verb>
# ssh vpn.mycompany.com
</verb>
</p><p>
<!--
Answer ''yes'' when it asks you if you want to continue connecting.  The
server will tell you ''permission denied'', but that''s ok. It's
important that you use the same name for the server that you are using
in your connection scripts.  Now run the following lines.  You will
obviously need to change most of the options to fit your setup.
-->
接続を続けたいかどうか質問されたときに ''yes'' と答えてください。
サーバは ''permission denied'' と言うかも知れませんが、大丈夫です。
サーバに対して、接続スクリプトの中で使っているのと同じ名前を
使うということは重要です。では、次の行を実行してください。
きっと、設定を適合させるためにオプションの殆どを変更する必要が
あるでしょう。
</p><p>
<!--
<verb>
# /usr/sbin/pty-redir /usr/bin/ssh -t -e none -o 'Batchmode yes' -c blowfish -i /root/.ssh/identity.vpn -l vpn-user vpn.mycompany.com > /tmp/vpn-device

(now wait about 10 seconds)

# /usr/sbin/pppd `cat /tmp/vpn-device` 192.168.10.254:192.168.40.254
</verb>
-->
<verb>
# /usr/sbin/pty-redir /usr/bin/ssh -t -e none -o 'Batchmode yes' -c blowfish -i /root/.ssh/identity.vpn -l vpn-user vpn.mycompany.com > /tmp/vpn-device

(10 秒ほど待ちましょう)

# /usr/sbin/pppd `cat /tmp/vpn-device` 192.168.10.254:192.168.40.254
</verb>
</p><p>
<!--
Note the IP addresses specified on the pppd line.  The first is the
address of the client end of the tunnel.  The second is the address of
the server end of the tunnel, which is set to the server's internal
address.  If all of that seemed to work, move on.  If not, check that you
have all of the options, and that they are spelled right.  If something
is still going wrong, check the <ref id="pitfalls" name="Pitfalls section">.
-->
pppd の行で指定されている IP アドレスに注意してください。最初はトンネルの
クライアント側の端のアドレスです。2 番目はトンネルのサーバ側の端のアドレスで
それはサーバの内部アドレスになっています。もしそれらの全てが動作
しているようなら、続けてください。もしそうでないなら、指定した
オプション全てに対して、それらが正しくつづられているかチェックして
ください。もしまだ何かがうまくいかないなら、<ref id="pitfalls" 
name="落とし穴 セクション">をチェックしてみてください。
</p>
<!-- <sect1>Client: Set the routes -->
<sect1>クライアント - 経路を設定する
<p>
<!--
Now set the route to send traffic through the tunnel.  Just run this:
-->
では、経路を、トンネルを通してトラフィックを送るように設定してください。
これを実行するだけです -
</p><p>
<verb>
# /sbin/route add -net 192.168.0.0 gw vpn-internal.mycompany.com netmask 255.255.0.0
</verb>
</p><p>
<!--
You should now be able to communicate with machines on the other side of
the tunnel.  Give it a try.  Neat huh?  If it doesn't work, try using
<tt>ping</tt> and <tt>traceroute</tt> to figure out where your problem
might be.  If in fact it does work, move on to setting up scripts to do
the work for you.
-->
これでトンネルの他端にあるマシンと通信できるようになっているはずです。
やってみてください。すんなりいった？ もしうまく動かないなら、
どこに問題があるのかを突き止めるために<tt>ping</tt> や <tt>traceroute</tt>
を使ってみてください。もし実は動いているなら、スクリプトがあなたのために
その仕事をしてくれるよう設定を続けてください。
</p>
<!-- <sect1>Client: Scripting -->
<sect1>クライアント - スクリプトを書く
<p>
<!--
Use the vpnd script that I show <ref id="vpn-script" name="here">.  Only, you
need to modify it a little.  Make the following changes:
-->
私が <ref id="vpnd-script" name="ここ"> で示した vpnd スクリプトを使ってください。
ただ、少し変更する必要があります。次の変更を行ってください -
</p><p>
<itemize>
<!--
<item>Change the variables at the top to match your setup.  Most should be just
fine as they are, but you can change them should you need to.
<item>Line 27: add the local and remote IP addresses before $PPP_OPTIONS
<item>Line 31: Change this line, and the two after it to set routes for
your internal nets.
-->
<item>環境に合うよう先頭の変数を変更してください。殆どはそのままで
      大丈夫ですが、必要なら変えることができます。
<item>27 行目 - ローカル、それからリモートの IP アドレスを $PPP_OPTIONS の
      前に加えてください。
<item>31 行目 - この行と後の 2 行を、内部ネットの経路を設定するように
      変更してください。
</itemize>
<!-- <sect2>Keeping it running -->
<sect2>実行させ続ける
<p>
<!--
While bash scripts are generally stable, they have been known to fail. 
In order to make sure that the <tt>vpnd</tt> script keeps running, add
an entry to the client's crontab that runs the <tt>check-vpnd</tt>
script. I run mine every 5 minutes or so.  If <tt>vpnd</tt> is indeed
running, <tt>check-vpnd</tt> doesn't use much CPU.
-->
bash スクリプトは普通安定していますが、失敗することが知られています。
<tt>vpnd</tt> スクリプトが動作を続けていることを確かめるためには、
クライアントの crontab に <tt>check-vpnd</tt> スクリプトを起動する
エントリを追加してください。私は 5 分かそこいら毎に私のものを起動
しています。もし <tt>vpnd</tt> が本当に実行されているとしても、
<tt>check-vpnd</tt> はそれ程多くの CPU を使用しません。
</p>

<!-- <sect>Addenda -->
<sect>付記
<!-- <sect1>Pitfalls<label id="pitfalls"> -->
<sect1>落とし穴<label id="pitfalls">
<p>
<!--
Here are just a few of the snags that I've run into while using this
system. I put them here so that you can hopefully avoid them.  If you
run into any new ones, please <url url="mailto:matthew@shinythings.com"
name="email them to me"> so that I can keep track, and help others avoid
them.
-->
このシステムを使う際、私が陥ったいくつかの思わぬ障害を挙げます。
願わくばあなたがそれらを避けることができるように、それらをここに示しました。
もし新たな障害に陥ったなら、私がそれを見逃さず、そして他の人がそれらを
避けることができるように、<url url="mailto:matthew@shinythings.com"
name="それらについてメール">をください。
</p>
<!-- <sect2>read: I/O error -->
<sect2>read: I/O error (読み込み - I/O エラー)
<p>
<!--
This error apparently comes from pppd.  It's associated with mis-matched
versions off pppd.  If you get it, try upgrading both ends of the
connection to the latest version of pppd.  I've found that pppd version
2.2 has this problem, and use version 2.3.7 or 2.3.8 instead.
-->
このエラーは明らかに pppd からきています。それは pppd のバージョンの
不整合に関連しています。それが起こったなら、接続の両端を pppd の
最新のバージョンにアップグレードしてみてください。
私は pppd のバージョン 2.2 はこの問題があることに気づきましたので、
代わりにバージョン 2.3.7 あるいは 2.3.8 を使ってください。
</p>
<!-- <sect2>SIOCADDRT: Network is unreachable -->
<sect2>SIOCADDRT: Network is unreachable (SIOCADDRT - ネットワークは到達不能)
<p>
<!--
This error is generated by <tt>route</tt>.  I've seen it happen when the
sleep time between <tt>ssh</tt> and <tt>pppd</tt> is not long enough. If
you get this error, run <tt>ifconfig</tt>, you may see that there is no
pppX interface.  This means that <tt>ssh</tt> was not done
authenticating before <tt>pppd</tt> was launched, and therefore
<tt>pppd</tt> did not make the connection.  just increase the delay, and
your problems will be solved.
-->
この問題は <tt>route</tt> によって生み出されます。私は <tt>ssh</tt> と
<tt>pppd</tt> の間のスリープ時間が十分長くなかった場合にそれが起こることを
知りました。もしこのエラーに遭遇したら、<tt>ifconfig</tt> を実行してみて下さい。
 pppX インターフェースがないのが分かるかもしれません。
これは、 <tt>ssh</tt> が <tt>pppd</tt> が動き始める前に認証を行っておらず、
 <tt>pppd</tt> が接続を実行していないためであるということを意味しています。
 単純に遅延時間を引き延ばしてください。そうすれば問題は解決するでしょう。
</p><p>
<!--
I wonder however if there might be some pppd option that will fix this
problem.
-->
この問題を修正するような pppd のオプションは無いのでしょうか。
</p>
<!-- <sect2>IPv4 Forwarding and 2.2 kernels<label id="ipv4forwarding"> -->
<sect2>IPv4 フォワーディングと 2.2 カーネル<label id="ipv4forwarding">
<p>
<!--
In the new 2.2 kernel, you must specifically enable IP forwarding in the
kernel at boot up.  This with the following command:
-->
新しい 2.2 カーネルでは、起動時にカーネルの中で IP フォワーディングを
特に有効にする必要があります。これは次のコマンドで行います - 
</p><p>
<verb>
# echo 1 > /proc/sys/net/ipv4/ip_forward
</verb>
</p><p>
<!--
Without this, the kernel will not forward any packets, and hence the
server will not work, nor will any of the gatewaying clients.
-->
これ無しでは、カーネルは如何なるパケットも転送せず、その結果
サーバ、さらにゲートウェイしているクライアントのいくらかが動作しない
ことになるでしょう。
</p>
<!-- <sect2>Routing -->
<sect2>経路を設定する
<p>
<!--
it should go without saying, but be careful when you are routing real numbers
that you don't route traffic destined for the VPN server's external address
through the tunnel.  It won't make it.  (yes, this <em>is</em> from personal
experience.)
-->
言うまでもないことですが、実際の数値を設定するときには、
トンネルを通って VPN サーバの外部アドレスに向かう
経路をトラフィックに対して設定しないよう注意してください。それはうまくいかないでしょう。
(そうです。<em>これは</em>個人的な経験からきています。)
</p>
<!-- <sect1>Hardware and Software Requirements -->
<sect1>ハードウェアおよびソフトウェア要件
<!-- <sect2>Minimum Hardware Requirements -->
<sect2>最低限のハードウェア要件
<p>
<!--
Believe it or not, this system has been run on a 486SX33 with 8
megabytes of RAM.  It didn't run very well though, it had trouble
handling heavy traffic.
-->
信じようが信じまいが、このシステムは 8 メガバイト RAM の 486SX33
で動作していました。とはいっても大量のトラフィックを扱ううえで
問題があり、さほどうまく動いてはいませんでした。
</p><p>
<!--
It doesn't take much more to make it work though.  This system does work
very well on a Pentium 75 with 16 megs of RAM, using an LRP distribution
running off of a floppy, with a 6 meg ramdisk, and 10 megs of main
memory. I've tested this setup by running a 700kbit RealVideo stream
through it for over an hour.
-->
しかし、動くようにするのにさほど多くは必要ありません。このシステムは
フロッピー上で動作する LRP ディストリビューションを使い、6 メガの
RAMDISK と 10 メガのメインメモリを備えた、RAM 16 メガの Pentium 75
の上で実に良好に動作します。私はこの環境を、700kbit の RealVideo を
1 時間以上流してテストしました。
</p><p>
<!--
I now typically run it on Pentium 90's, as their PCI clocking plays
nicer with cheap 100Mbit Ethernet cards.
-->
安っぽい 100Mbit イーサネットカードを挿したそれらの PCI がより良く
時間を刻んでいるので、私は現在それを、概して Pentium 90 の上で
動かしています。
</p>
<!-- <sect2>Software Requirements -->
<sect2>ソフトウェア要件
<p>
<!--
This system works with both the 2.0 and 2.2 kernels.  The script to keep
the tunnel up requires a reasonably modern bash.  I have however noticed
that certain distribution's versions of bash don't play too well with
the script.
-->
このシステムは 2.0 および 2.2 カーネルにおいて動作します。
トンネルを開いたままにしておくスクリプトは、適度に新しい bash
を必要とします。しかし私は、あるディストリビューションの bash のバージョン
では、スクリプトがあまりうまく動作しないということに気づきました。
</p><p>
<!--
Also, if someone could help me refine my scripts (or even write an
executable?) that would helps things a lot.  I'm not sure why, but even
my own bash doesn't follow the rules and doesn't seem to interpret
signals correctly.  If you do make any improvements, please email me at
<url url="mailto:matthew@shinythings.com" name="matthew@shinythings.com">
-->
それから、誰かが私のスクリプトを改善する (あるいは実行ファイルを作るのでも) 
手助けをしてくれるなら、大変助かります。なぜ自分の bash スクリプトが
規則に従わず、信号を正しく解釈しないのかが分かっていません。
あなたが何かしら改善したのであれば、どうか電子メールを
<url url="mailto:matthew@shinythings.com" name="matthew@shinythings.com">
宛に送ってください。
</p>

<p>
<descrip>
&lsqb;訳注 : 日本語版改訂履歴を以下に示します。
<tag>v1.0j, 2000 年 8 月 18 日</tag>
翻訳:
宮田 剛 <tt>&lt;t-miya@rb3.so-net.ne.jp&gt;</tt>

菊谷 誠 <tt>&lt;kikutani@galaxy.net&gt;</tt>,
武井 伸光 <tt>&lt;takei@kondara.org&gt;</tt>,
中野 武雄 <tt>&lt;nakano@apm.seikei.ac.jp&gt;</tt>,
宮野 浩史 <tt>&lt;hmiyano@webjapan.com&gt;</tt>,
山下 義之 <tt>&lt;dica@eurus.dti.ne.jp&gt;</tt>
&rsqb;
</descrip>
</p>
</article>
